1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """Functions to manage Poedit's language features.
23
24 ISO 639 maps are form Poedit's U{isocode.cpp 1.4.2<http://poedit.svn.sourceforge.net/viewvc/poedit/poedit/tags/release-1.4.2/src/isocodes.cpp?revision=1452&view=markup>}
25 to ensure that we match currently released versions of Poedit.
26 """
27
28 lang_codes = {
29 "aa": "Afar",
30 "ab": "Abkhazian",
31 "ae": "Avestan",
32 "af": "Afrikaans",
33 "am": "Amharic",
34 "ar": "Arabic",
35 "as": "Assamese",
36 "ay": "Aymara",
37 "az": "Azerbaijani",
38 "ba": "Bashkir",
39 "be": "Belarusian",
40 "bg": "Bulgarian",
41 "bh": "Bihari",
42 "bi": "Bislama",
43 "bn": "Bengali",
44 "bo": "Tibetan",
45 "br": "Breton",
46 "bs": "Bosnian",
47 "ca": "Catalan",
48 "ce": "Chechen",
49 "ch": "Chamorro",
50 "co": "Corsican",
51 "cs": "Czech",
52 "cu": "Church Slavic",
53 "cv": "Chuvash",
54 "cy": "Welsh",
55 "da": "Danish",
56 "de": "German",
57 "dz": "Dzongkha",
58 "el": "Greek",
59 "en": "English",
60 "eo": "Esperanto",
61 "es": "Spanish",
62 "et": "Estonian",
63 "eu": "Basque",
64 "fa": "Persian",
65 "fi": "Finnish",
66 "fj": "Fijian",
67 "fo": "Faroese",
68 "fr": "French",
69 "fur": "Friulian",
70 "fy": "Frisian",
71 "ga": "Irish",
72 "gd": "Gaelic",
73 "gl": "Galician",
74 "gn": "Guarani",
75 "gu": "Gujarati",
76 "ha": "Hausa",
77 "he": "Hebrew",
78 "hi": "Hindi",
79 "ho": "Hiri Motu",
80 "hr": "Croatian",
81 "hu": "Hungarian",
82 "hy": "Armenian",
83 "hz": "Herero",
84 "ia": "Interlingua",
85 "id": "Indonesian",
86 "ie": "Interlingue",
87 "ik": "Inupiaq",
88 "is": "Icelandic",
89 "it": "Italian",
90 "iu": "Inuktitut",
91 "ja": "Japanese",
92 "jw": "Javanese",
93 "ka": "Georgian",
94 "ki": "Kikuyu",
95 "kj": "Kuanyama",
96 "kk": "Kazakh",
97 "kl": "Kalaallisut",
98 "km": "Khmer",
99 "kn": "Kannada",
100 "ko": "Korean",
101 "ks": "Kashmiri",
102 "ku": "Kurdish",
103 "kv": "Komi",
104 "kw": "Cornish",
105 "ky": "Kyrgyz",
106 "la": "Latin",
107 "lb": "Letzeburgesch",
108 "ln": "Lingala",
109 "lo": "Lao",
110 "lt": "Lithuanian",
111 "lv": "Latvian",
112 "mg": "Malagasy",
113 "mh": "Marshall",
114 "mi": "Maori",
115 "mk": "Macedonian",
116 "ml": "Malayalam",
117 "mn": "Mongolian",
118 "mo": "Moldavian",
119 "mr": "Marathi",
120 "ms": "Malay",
121 "mt": "Maltese",
122 "my": "Burmese",
123 "na": "Nauru",
124 "ne": "Nepali",
125 "ng": "Ndonga",
126 "nl": "Dutch",
127 "nn": "Norwegian Nynorsk",
128 "nb": "Norwegian Bokmal",
129 "nr": "Ndebele, South",
130 "nv": "Navajo",
131 "ny": "Chichewa; Nyanja",
132 "oc": "Occitan",
133 "om": "(Afan) Oromo",
134 "or": "Oriya",
135 "os": "Ossetian; Ossetic",
136 "pa": "Panjabi",
137 "pi": "Pali",
138 "pl": "Polish",
139 "ps": "Pashto, Pushto",
140 "pt": "Portuguese",
141 "qu": "Quechua",
142 "rm": "Rhaeto-Romance",
143 "rn": "Rundi",
144 "ro": "Romanian",
145 "ru": "Russian",
146 "rw": "Kinyarwanda",
147 "sa": "Sanskrit",
148 "sc": "Sardinian",
149 "sd": "Sindhi",
150 "se": "Northern Sami",
151 "sg": "Sangro",
152 "sh": "Serbo-Croatian",
153 "si": "Sinhalese",
154 "sk": "Slovak",
155 "sl": "Slovenian",
156 "sm": "Samoan",
157 "sn": "Shona",
158 "so": "Somali",
159 "sq": "Albanian",
160 "sr": "Serbian",
161 "ss": "Siswati",
162 "st": "Sesotho",
163 "su": "Sundanese",
164 "sv": "Swedish",
165 "sw": "Swahili",
166 "ta": "Tamil",
167 "te": "Telugu",
168 "tg": "Tajik",
169 "th": "Thai",
170 "ti": "Tigrinya",
171 "tk": "Turkmen",
172 "tl": "Tagalog",
173 "tn": "Setswana",
174 "to": "Tonga",
175 "tr": "Turkish",
176 "ts": "Tsonga",
177 "tt": "Tatar",
178 "tw": "Twi",
179 "ty": "Tahitian",
180 "ug": "Uighur",
181 "uk": "Ukrainian",
182 "ur": "Urdu",
183 "uz": "Uzbek",
184 "vi": "Vietnamese",
185 "vo": "Volapuk",
186 "wa": "Walloon",
187 "wo": "Wolof",
188 "xh": "Xhosa",
189 "yi": "Yiddish",
190 "yo": "Yoruba",
191 "za": "Zhuang",
192 "zh": "Chinese",
193 "zu": "Zulu",
194 }
195 """ISO369 codes and names as used by Poedit.
196 Mostly these are identical to ISO 639, but there are some differences."""
197
198 lang_names = dict([(value, key) for (key, value) in lang_codes.items()])
199 """Reversed L{lang_codes}"""
200
201 dialects = {
202 "Portuguese": {"PORTUGAL": "pt", "BRAZIL": "pt_BR", "None": "pt"},
203
204 "English": {"UNITED KINGDOM": "en_GB", "SOUTH AFRICA": "en_ZA", "None": "en"},
205
206 "Chinese": {"CHINA": "zh_CN", "TAIWAN": "zh_TW", "None": "zh_CN"},
207 }
208 """Language dialects based on ISO 3166 country names, 'None' is the default fallback"""
209
210 -def isocode(language, country=None):
211 """Returns a language code for the given Poedit language name.
212
213 Poedit uses language and country names in the PO header entries:
214 - X-Poedit-Language
215 - X-Poedit-Country
216
217 This function converts the supplied language name into the required ISO 639
218 code. If needed, in the case of L{dialects}, the country name is used
219 to create an xx_YY style dialect code.
220
221 @param language: Language name
222 @type language: String
223 @param country: Country name
224 @type country: String
225 @return: ISO 639 language code
226 @rtype: String
227 """
228 dialect = dialects.get(language, None)
229 if dialect:
230 return dialect.get(country, dialect["None"])
231 return lang_names.get(language, None)
232