1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
# -*- coding: UTF-8 -*-
# The contents of this file are subject to the BitTorrent Open Source License
# Version 1.1 (the License). You may not copy or use this file, in either
# source code or executable form, except in compliance with the License. You
# may obtain a copy of the License at http://www.bittorrent.com/license/.
#
# Software distributed under the License is distributed on an AS IS basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
# http://people.w3.org/rishida/names/languages.html
language_names = {
'af' :u'Afrikaans' , 'bg' :u'Български' ,
'da' :u'Dansk' , 'ca' :u'Català' ,
'cs' :u'Čeština' , 'de' :u'Deutsch' ,
'en' :u'English' , 'es' :u'Español' ,
'es_MX':u'Español de Mexico ' , 'fr' :u'Français' ,
'el' :u'Ελληνικά' , 'he' :u'עברית' ,
'hu' :u'Magyar' , 'it' :u'Italiano' ,
'is' :u'Íslenska' , 'ja' :u'日本語' ,
'ko' :u'한국어' ,'nl' :u'Nederlands' ,
'nb_NO':u'Norsk bokmål' , 'pl' :u'Polski' ,
'pt' :u'Português' , 'pt_BR':u'Português do Brasil' ,
'ro' :u'Română' , 'ru' :u'Русский' ,
'sk' :u'Slovenský' , 'sl' :u'Slovensko' ,
'sv' :u'Svenska' , 'tr' :u'Türkçe' ,
'vi' :u'Tiê?ng Viê?t' ,
'zh_CN':u'简体中文' , # Simplified
'zh_TW':u'繁體中文' , # Traditional
}
unfinished_language_names = {
'ar' :u'العربية' , 'bs' :u'Bosanski' ,
'eo' :u'Esperanto' , 'eu' :u'Euskara' ,
'et' :u'Eesti' , 'fi' :u'Suomi' ,
'fa' :u'فارسی' , 'ga' :u'Gaeilge' ,
'gl' :u'Galego' , 'hr' :u'Hrvatski' ,
'hy' :u'Հայերեն' , 'in' :u'Bahasa indonesia' ,
'ka' :u'ქართული ენა', 'lt' :u'Lietuvių' ,
'ms' :u'Bahasa melayu' , 'ml' :u'Malayalam' ,
'sq' :u'Shqipe' , 'th' :u'ภาษาไทย' ,
'tlh' :u'tlhIngan-Hol' , 'uk' :u'Українська' ,
'hi' :u'हिंदी' , 'cy' :u'Cymraeg' ,
'nn_NO':u'Norsk Nynorsk' , 'te' :u' తెలుగు' ,
}
#language_names.update(unfinished_language_names)
languages = language_names.keys()
languages.sort()
# windows codepage to locale mapping
locale_sucks = {
0x0436: "af", # Afrikaans
0x3801: "ar_ae", # Arabic - United Arab Emirates
0x3C01: "ar_bh", # Arabic - Bahrain
0x1401: "ar_dz", # Arabic - Algeria
0x0C01: "ar_eg", # Arabic - Egypt
0x0801: "ar_iq", # Arabic - Iraq
0x2C01: "ar_jo", # Arabic - Jordan
0x3401: "ar_kw", # Arabic - Kuwait
0x3001: "ar_lb", # Arabic - Lebanon
0x1001: "ar_ly", # Arabic - Libya
0x1801: "ar_ma", # Arabic - Morocco
0x2001: "ar_om", # Arabic - Oman
0x4001: "ar_qa", # Arabic - Qatar
0x0401: "ar_sa", # Arabic - Saudi Arabia
0x2801: "ar_sy", # Arabic - Syria
0x1C01: "ar_tn", # Arabic - Tunisia
0x2401: "ar_ye", # Arabic - Yemen
0x082C: "az_az", # Azeri - Cyrillic
0x0423: "be", # Belarusian
0x0402: "bg", # Bulgarian
0x0403: "ca", # Catalan
0x0405: "cs", # Czech
0x0406: "da", # Danish
0x0007: "de", # German
0x0C07: "de_at", # German - Austria
0x0807: "de_ch", # German - Switzerland
0x0407: "de_de", # German - Germany
0x1407: "de_li", # German - Liechtenstein
0x1007: "de_lu", # German - Luxembourg
0x0408: "el", # Greek
0x0C09: "en_au", # English - Australia
0x2809: "en_bz", # English - Belize
0x1009: "en_ca", # English - Canada
0x2409: "en_cb", # English - Carribbean
0x0809: "en_gb", # English - United Kingdom
0x1809: "en_ie", # English - Ireland
0x2009: "en_jm", # English - Jamaica
0x1409: "en_nz", # English - New Zealand
0x3409: "en_ph", # English - Phillippines
0x2C09: "en_tt", # English - Trinidad
0x0409: "en_us", # English - United States
0x1C09: "en_za", # English - South Africa
0x000A: "es", # Spanish (added)
0x2C0A: "es_ar", # Spanish - Argentina
0x400A: "es_bo", # Spanish - Bolivia
0x340A: "es_cl", # Spanish - Chile
0x240A: "es_co", # Spanish - Colombia
0x140A: "es_cr", # Spanish - Costa Rica
0x1C0A: "es_do", # Spanish - Dominican Republic
0x300A: "es_ec", # Spanish - Ecuador
0x040a: "es_es", # Spanish - Spain
0x100A: "es_gt", # Spanish - Guatemala
0x480A: "es_hn", # Spanish - Honduras
0x080A: "es_mx", # Spanish - Mexico
0x4C0A: "es_ni", # Spanish - Nicaragua
0x180A: "es_pa", # Spanish - Panama
0x280A: "es_pe", # Spanish - Peru
0x500A: "es_pr", # Spanish - Puerto Rico
0x3C0A: "es_py", # Spanish - Paraguay
0x440A: "es_sv", # Spanish - El Salvador
0x380A: "es_uy", # Spanish - Uruguay
0x200A: "es_ve", # Spanish - Venezuela
0x0425: "et", # Estonian
0x0009: "en", # English (added)
0x042D: "eu", # Basque
0x0429: "fa", # Farsi
0x040B: "fi", # Finnish
0x0438: "fo", # Faroese
0x000C: "fr", # French (added)
0x080C: "fr_be", # French - Belgium
0x0C0C: "fr_ca", # French - Canada
0x100C: "fr_ch", # French - Switzerland
0x040C: "fr_fr", # French - France
0x140C: "fr_lu", # French - Luxembourg
0x043C: "gd", # Gaelic - Scotland
0x083C: "gd_ie", # Gaelic - Ireland
0x040D: "he", # Hebrew
0x0439: "hi", # Hindi
0x041A: "hr", # Croatian
0x040E: "hu", # Hungarian
0x042B: "hy", # Armenian
0x0421: "id", # Indonesian
0x040F: "is", # Icelandic
0x0010: "it", # Italian (added)
0x0810: "it_ch", # Italian - Switzerland
0x0410: "it_it", # Italian - Italy
0x0411: "ja", # Japanese
0x0412: "ko", # Korean
0x0427: "lt", # Lithuanian
0x0426: "lv", # Latvian
0x042F: "mk", # FYRO Macedonian
0x044E: "mr", # Marathi
0x083E: "ms_bn", # Malay - Brunei
0x043E: "ms_my", # Malay - Malaysia
0x043A: "mt", # Maltese
0x0013: "nl", # Dutch (added)
0x0813: "nl_be", # Dutch - Belgium
0x0413: "nl_nl", # Dutch - The Netherlands
0x0814: "no_no", # Norwegian - Nynorsk
0x0414: "nb_no", # Norwegian - Bokmal (?)
0x0415: "pl", # Polish
0x0016: "pt", # Portuguese (added)
0x0416: "pt_br", # Portuguese - Brazil
0x0816: "pt_pt", # Portuguese - Portugal
0x0417: "rm", # Raeto-Romance
0x0418: "ro", # Romanian - Romania
0x0818: "ro_mo", # Romanian - Moldova
0x0419: "ru", # Russian
0x0819: "ru_mo", # Russian - Moldova
0x044F: "sa", # Sanskrit
0x042E: "sb", # Sorbian
0x041B: "sk", # Slovak
0x0424: "sl", # Slovenian
0x041C: "sq", # Albanian
0x081A: "sr_sp", # Serbian - Latin
0x001D: "sv", # Swedish (added)
0x081D: "sv_fi", # Swedish - Finland
0x041D: "sv_se", # Swedish - Sweden
0x0441: "sw", # Swahili
0x0430: "sx", # Sutu
0x0449: "ta", # Tamil
0x041E: "th", # Thai
0x0432: "tn", # Setsuana
0x041F: "tr", # Turkish
0x0431: "ts", # Tsonga
0X0444: "tt", # Tatar
0x0422: "uk", # Ukrainian
0x0420: "ur", # Urdu
0x0443: "uz_uz", # Uzbek - Latin
0x042A: "vi", # Vietnamese
0x0434: "xh", # Xhosa
0x043D: "yi", # Yiddish
0x0804: "zh_cn", # Chinese - China
0x0C04: "zh_hk", # Chinese - Hong Kong S.A.R.
0x1404: "zh_mo", # Chinese - Macau S.A.R
0x1004: "zh_sg", # Chinese - Singapore
0x0404: "zh_tw", # Chinese - Taiwan
0x0435: "zu", # Zulu
}
if __name__ == '__main__':
from sets import Set
internal = Set([x.lower() for x in languages])
windows = Set(locale_sucks.values())
if not windows.issuperset(internal):
diff = list(internal.difference(windows))
diff.sort()
print diff
|