summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2010-03-12 22:06:08 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2010-03-12 22:06:08 +0100
commit0d6c5e7dcb2d4fe5334a4177aff3a2b6e55e6768 (patch)
tree9d9a4037dd9ba969b3b781cb52e70c1e12aa0de6 /apt-pkg
parentddff663f897a422d61a36238ec71edb7fe3e3eb1 (diff)
* apt-pkg/indexfile.cc:
- deal correctly with three letter langcodes (LP: #391409)
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/indexfile.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc
index 08f71feb0..34fd71b20 100644
--- a/apt-pkg/indexfile.cc
+++ b/apt-pkg/indexfile.cc
@@ -89,8 +89,11 @@ bool pkgIndexFile::TranslationsAvailable()
bool pkgIndexFile::CheckLanguageCode(const char *Lang)
{
- if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
- return true;
+ if (strlen(Lang) == 2 ||
+ strlen(Lang) == 3 ||
+ (strlen(Lang) > 3 && Lang[3] == '_') ||
+ (strlen(Lang) == 5 && Lang[2] == '_'))
+ return true;
if (strcmp(Lang,"C") != 0)
_error->Warning("Wrong language code %s", Lang);
@@ -112,13 +115,18 @@ string pkgIndexFile::LanguageCode()
// we have a mapping of the language codes that contains all the language
// codes that need the country code as well
// (like pt_BR, pt_PT, sv_SE, zh_*, en_*)
- const char *need_full_langcode[] = { "pt","sv","zh","en", NULL };
+ const char *need_full_langcode[] = { "cs_",
+ "en_",
+ "pt_",
+ "sv_",
+ "zh_",
+ NULL };
for(const char **s = need_full_langcode;*s != NULL; s++)
if(lang.find(*s) == 0)
return lang.substr(0,5);
- if(lang.size() > 2)
- return lang.substr(0,2);
+ if(lang.find("_") != lang.npos)
+ return lang.substr(0, lang.find("_"));
else
return lang;
}