app: s/sprintf/g_snprintf/ in xcf_save_image()
[gimp.git] / app / language.c
blob581ff6780216c68cc61bb07744926f7cc98826a2
1 /* GIMP - The GNU Image Manipulation Program
2 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 /* Win32 language lookup table:
19 * Copyright (C) 2007-2008 Dieter Verfaillie <dieterv@optionexplicit.be>
22 #include "config.h"
24 #include <locale.h>
26 #include <glib.h>
28 #ifdef G_OS_WIN32
29 #include <windows.h>
30 #include <winnls.h>
31 #endif
33 #include "language.h"
36 void
37 language_init (const gchar *language)
39 #ifdef G_OS_WIN32
40 if (! language &&
41 g_getenv ("LANG") == NULL &&
42 g_getenv ("LC_MESSAGES") == NULL &&
43 g_getenv ("LC_ALL") == NULL &&
44 g_getenv ("LANGUAGE") == NULL)
46 /* FIXME: This is a hack. gettext doesn't pick the right language
47 * by default on Windows, so we enforce the right one. The
48 * following code is an adaptation of Python code from
49 * pynicotine. For reasons why this approach is needed, and why
50 * the GetLocaleInfo() approach in other libs falls flat, see:
51 * http://blogs.msdn.com/b/michkap/archive/2007/04/15/2146890.aspx
54 switch (GetUserDefaultUILanguage())
56 case 1078:
57 language = "af"; /* Afrikaans - South Africa */
58 break;
59 case 1052:
60 language = "sq"; /* Albanian - Albania */
61 break;
62 case 1118:
63 language = "am"; /* Amharic - Ethiopia */
64 break;
65 case 1025:
66 language = "ar_SA"; /* Arabic - Saudi Arabia */
67 break;
68 case 5121:
69 language = "ar_DZ"; /* Arabic - Algeria */
70 break;
71 case 15361:
72 language = "ar_BH"; /* Arabic - Bahrain */
73 break;
74 case 3073:
75 language = "ar_EG"; /* Arabic - Egypt */
76 break;
77 case 2049:
78 language = "ar_IQ"; /* Arabic - Iraq */
79 break;
80 case 11265:
81 language = "ar_JO"; /* Arabic - Jordan */
82 break;
83 case 13313:
84 language = "ar_KW"; /* Arabic - Kuwait */
85 break;
86 case 12289:
87 language = "ar_LB"; /* Arabic - Lebanon */
88 break;
89 case 4097:
90 language = "ar_LY"; /* Arabic - Libya */
91 break;
92 case 6145:
93 language = "ar_MO"; /* Arabic - Morocco */
94 break;
95 case 8193:
96 language = "ar_OM"; /* Arabic - Oman */
97 break;
98 case 16385:
99 language = "ar_QA"; /* Arabic - Qatar */
100 break;
101 case 10241:
102 language = "ar_SY"; /* Arabic - Syria */
103 break;
104 case 7169:
105 language = "ar_TN"; /* Arabic - Tunisia */
106 break;
107 case 14337:
108 language = "ar_AE"; /* Arabic - U.A.E. */
109 break;
110 case 9217:
111 language = "ar_YE"; /* Arabic - Yemen */
112 break;
113 case 1067:
114 language = "hy"; /* Armenian - Armenia */
115 break;
116 case 1101:
117 language = "as"; /* Assamese */
118 break;
119 case 2092:
120 language = NULL; /* Azeri (Cyrillic) */
121 break;
122 case 1068:
123 language = NULL; /* Azeri (Latin) */
124 break;
125 case 1069:
126 language = "eu"; /* Basque */
127 break;
128 case 1059:
129 language = "be"; /* Belarusian */
130 break;
131 case 1093:
132 language = "bn_IN"; /* Bengali (India) */
133 break;
134 case 2117:
135 language = "bn_BD"; /* Bengali (Bangladesh) */
136 break;
137 case 5146:
138 language = "bs"; /* Bosnian (Bosnia/Herzegovina) */
139 break;
140 case 1026:
141 language = "bg"; /* Bulgarian */
142 break;
143 case 1109:
144 language = "my"; /* Burmese */
145 break;
146 case 1027:
147 language = "ca"; /* Catalan */
148 break;
149 case 1116:
150 language = NULL; /* Cherokee - United States */
151 break;
152 case 2052:
153 language = "zh_CN"; /* Chinese - People"s Republic of China */
154 break;
155 case 4100:
156 language = "zh_SG"; /* Chinese - Singapore */
157 break;
158 case 1028:
159 language = "zh_TW"; /* Chinese - Taiwan */
160 break;
161 case 3076:
162 language = "zh_HK"; /* Chinese - Hong Kong SAR */
163 break;
164 case 5124:
165 language = "zh_MO"; /* Chinese - Macao SAR */
166 break;
167 case 1050:
168 language = "hr_HR"; /* Croatian */
169 break;
170 case 4122:
171 language = "hr_BA"; /* Croatian (Bosnia/Herzegovina) */
172 break;
173 case 1029:
174 language = "cs"; /* Czech */
175 break;
176 case 1030:
177 language = "da"; /* Danish */
178 break;
179 case 1125:
180 language = "dv"; /* Divehi */
181 break;
182 case 1043:
183 language = "nl_NL"; /* Dutch - Netherlands */
184 break;
185 case 2067:
186 language = "nl_BE"; /* Dutch - Belgium */
187 break;
188 case 1126:
189 language = NULL; /* Edo */
190 break;
191 case 1033:
192 language = "en_US"; /* English - United States */
193 break;
194 case 2057:
195 language = "en_UK"; /* English - United Kingdom */
196 break;
197 case 3081:
198 language = "en_AU"; /* English - Australia */
199 break;
200 case 10249:
201 language = "en_BZ"; /* English - Belize */
202 break;
203 case 4105:
204 language = "en_CA"; /* English - Canada */
205 break;
206 case 9225:
207 language = "en"; /* English - Caribbean */
208 break;
209 case 15369:
210 language = "en_HK"; /* English - Hong Kong SAR */
211 break;
212 case 16393:
213 language = "en_IN"; /* English - India */
214 break;
215 case 14345:
216 language = "en_ID"; /* English - Indonesia */
217 break;
218 case 6153:
219 language = "en_IR"; /* English - Ireland */
220 break;
221 case 8201:
222 language = "en_JM"; /* English - Jamaica */
223 break;
224 case 17417:
225 language = "en_MW"; /* English - Malaysia */
226 break;
227 case 5129:
228 language = "en_NZ"; /* English - New Zealand */
229 break;
230 case 13321:
231 language = "en_PH"; /* English - Philippines */
232 break;
233 case 18441:
234 language = "en_SG"; /* English - Singapore */
235 break;
236 case 7177:
237 language = "en_ZA"; /* English - South Africa */
238 break;
239 case 11273:
240 language = "en_TT"; /* English - Trinidad */
241 break;
242 case 12297:
243 language = "en_ZW"; /* English - Zimbabwe */
244 break;
245 case 1061:
246 language = "et"; /* Estonian */
247 break;
248 case 1080:
249 language = "fo"; /* Faroese */
250 break;
251 case 1065:
252 language = "fa"; /* Farsi */
253 break;
254 case 1124:
255 language = NULL; /* Filipino */
256 break;
257 case 1035:
258 language = "fi"; /* Finnish */
259 break;
260 case 1036:
261 language = "fr_FR"; /* French - France */
262 break;
263 case 2060:
264 language = "fr_BE"; /* French - Belgium */
265 break;
266 case 11276:
267 language = "fr_CM"; /* French - Cameroon */
268 break;
269 case 3084:
270 language = "fr_CA"; /* French - Canada */
271 break;
272 case 9228:
273 language = "fr_CD"; /* French - Democratic Rep. of Congo */
274 break;
275 case 12300:
276 language = "fr_CI"; /* French - Cote d"Ivoire */
277 break;
278 case 15372:
279 language = "fr_HT"; /* French - Haiti */
280 break;
281 case 5132:
282 language = "fr_LU"; /* French - Luxembourg */
283 break;
284 case 13324:
285 language = "fr_ML"; /* French - Mali */
286 break;
287 case 6156:
288 language = "fr_MC"; /* French - Monaco */
289 break;
290 case 14348:
291 language = "fr_MA"; /* French - Morocco */
292 break;
293 case 58380:
294 language = "fr"; /* French - North Africa */
295 break;
296 case 8204:
297 language = "fr_RE"; /* French - Reunion */
298 break;
299 case 10252:
300 language = "fr_SN"; /* French - Senegal */
301 break;
302 case 4108:
303 language = "fr_CH"; /* French - Switzerland */
304 break;
305 case 7180:
306 language = "fr"; /* French - West Indies */
307 break;
308 case 1122:
309 language = "fy"; /* Frisian - Netherlands */
310 break;
311 case 1127:
312 language = NULL; /* Fulfulde - Nigeria */
313 break;
314 case 1071:
315 language = "mk"; /* FYRO Macedonian */
316 break;
317 case 2108:
318 language = "ga"; /* Gaelic (Ireland) */
319 break;
320 case 1084:
321 language = "gd"; /* Gaelic (Scotland) */
322 break;
323 case 1110:
324 language = "gl"; /* Galician */
325 break;
326 case 1079:
327 language = "ka"; /* Georgian */
328 break;
329 case 1031:
330 language = "de_DE"; /* German - Germany */
331 break;
332 case 3079:
333 language = "de_AT"; /* German - Austria */
334 break;
335 case 5127:
336 language = "de_LI"; /* German - Liechtenstein */
337 break;
338 case 4103:
339 language = "de_LU"; /* German - Luxembourg */
340 break;
341 case 2055:
342 language = "de_CH"; /* German - Switzerland */
343 break;
344 case 1032:
345 language = "el"; /* Greek */
346 break;
347 case 1140:
348 language = "gn"; /* Guarani - Paraguay */
349 break;
350 case 1095:
351 language = "gu"; /* Gujarati */
352 break;
353 case 1128:
354 language = "ha"; /* Hausa - Nigeria */
355 break;
356 case 1141:
357 language = NULL; /* Hawaiian - United States */
358 break;
359 case 1037:
360 language = "he"; /* Hebrew */
361 break;
362 case 1081:
363 language = "hi"; /* Hindi */
364 break;
365 case 1038:
366 language = "hu"; /* Hungarian */
367 break;
368 case 1129:
369 language = NULL; /* Ibibio - Nigeria */
370 break;
371 case 1039:
372 language = "is"; /* Icelandic */
373 break;
374 case 1136:
375 language = "ig"; /* Igbo - Nigeria */
376 break;
377 case 1057:
378 language = "id"; /* Indonesian */
379 break;
380 case 1117:
381 language = "iu"; /* Inuktitut */
382 break;
383 case 1040:
384 language = "it_IT"; /* Italian - Italy */
385 break;
386 case 2064:
387 language = "it_CH"; /* Italian - Switzerland */
388 break;
389 case 1041:
390 language = "ja"; /* Japanese */
391 break;
392 case 1099:
393 language = "kn"; /* Kannada */
394 break;
395 case 1137:
396 language = "kr"; /* Kanuri - Nigeria */
397 break;
398 case 2144:
399 language = "ks"; /* Kashmiri */
400 break;
401 case 1120:
402 language = "ks"; /* Kashmiri (Arabic) */
403 break;
404 case 1087:
405 language = "kk"; /* Kazakh */
406 break;
407 case 1107:
408 language = "km"; /* Khmer */
409 break;
410 case 1111:
411 language = NULL; /* Konkani */
412 break;
413 case 1042:
414 language = "ko"; /* Korean */
415 break;
416 case 1088:
417 language = "ky"; /* Kyrgyz (Cyrillic) */
418 break;
419 case 1108:
420 language = "lo"; /* Lao */
421 break;
422 case 1142:
423 language = "la"; /* Latin */
424 break;
425 case 1062:
426 language = "lv"; /* Latvian */
427 break;
428 case 1063:
429 language = "lt"; /* Lithuanian */
430 break;
431 case 1086:
432 language = "ms_MY"; /* Malay - Malaysia */
433 break;
434 case 2110:
435 language = "ms_BN"; /* Malay - Brunei Darussalam */
436 break;
437 case 1100:
438 language = "ml"; /* Malayalam */
439 break;
440 case 1082:
441 language = "mt"; /* Maltese */
442 break;
443 case 1112:
444 language = NULL; /* Manipuri */
445 break;
446 case 1153:
447 language = "mi"; /* Maori - New Zealand */
448 break;
449 case 1102:
450 language = "mr"; /* Marathi */
451 break;
452 case 1104:
453 language = "mn"; /* Mongolian (Cyrillic) */
454 break;
455 case 2128:
456 language = "mn"; /* Mongolian (Mongolian) */
457 break;
458 case 1121:
459 language = "ne_NP"; /* Nepali */
460 break;
461 case 2145:
462 language = "ne_IN"; /* Nepali - India */
463 break;
464 case 1044:
465 language = "no"; /* Norwegian (Bokmᅢᆬl) */
466 break;
467 case 2068:
468 language = "no"; /* Norwegian (Nynorsk) */
469 break;
470 case 1096:
471 language = "or"; /* Oriya */
472 break;
473 case 1138:
474 language = "om"; /* Oromo */
475 break;
476 case 1145:
477 language = NULL; /* Papiamentu */
478 break;
479 case 1123:
480 language = "ps"; /* Pashto */
481 break;
482 case 1045:
483 language = "pl"; /* Polish */
484 break;
485 case 1046:
486 language = "pt_BR"; /* Portuguese - Brazil */
487 break;
488 case 2070:
489 language = "pt_PT"; /* Portuguese - Portugal */
490 break;
491 case 1094:
492 language = "pa"; /* Punjabi */
493 break;
494 case 2118:
495 language = "pa_PK"; /* Punjabi (Pakistan) */
496 break;
497 case 1131:
498 language = "qu_BO"; /* Quecha - Bolivia */
499 break;
500 case 2155:
501 language = "qu_EC"; /* Quecha - Ecuador */
502 break;
503 case 3179:
504 language = "qu_PE"; /* Quecha - Peru */
505 break;
506 case 1047:
507 language = "rm"; /* Rhaeto-Romanic */
508 break;
509 case 1048:
510 language = "ro_RO"; /* Romanian */
511 break;
512 case 2072:
513 language = "ro_MD"; /* Romanian - Moldava */
514 break;
515 case 1049:
516 language = "ru_RU"; /* Russian */
517 break;
518 case 2073:
519 language = "ru_MD"; /* Russian - Moldava */
520 break;
521 case 1083:
522 language = NULL; /* Sami (Lappish) */
523 break;
524 case 1103:
525 language = "sa"; /* Sanskrit */
526 break;
527 case 1132:
528 language = NULL; /* Sepedi */
529 break;
530 case 3098:
531 language = "sr"; /* Serbian (Cyrillic) */
532 break;
533 case 2074:
534 language = "sr@latin"; /* Serbian (Latin) */
535 break;
536 case 1113:
537 language = "sd_IN"; /* Sindhi - India */
538 break;
539 case 2137:
540 language = "sd_PK"; /* Sindhi - Pakistan */
541 break;
542 case 1115:
543 language = "si"; /* Sinhalese - Sri Lanka */
544 break;
545 case 1051:
546 language = "sk"; /* Slovak */
547 break;
548 case 1060:
549 language = "sl"; /* Slovenian */
550 break;
551 case 1143:
552 language = "so"; /* Somali */
553 break;
554 case 1070:
555 language = NULL; /* Sorbian */
556 break;
557 case 3082:
558 language = "es"; /* Spanish - Spain (Modern Sort) */
559 break;
560 case 1034:
561 language = "es"; /* Spanish - Spain (Traditional Sort) */
562 break;
563 case 11274:
564 language = "es_AR"; /* Spanish - Argentina */
565 break;
566 case 16394:
567 language = "es_BO"; /* Spanish - Bolivia */
568 break;
569 case 13322:
570 language = "es_CL"; /* Spanish - Chile */
571 break;
572 case 9226:
573 language = "es_CO"; /* Spanish - Colombia */
574 break;
575 case 5130:
576 language = "es_CR"; /* Spanish - Costa Rica */
577 break;
578 case 7178:
579 language = "es_DO"; /* Spanish - Dominican Republic */
580 break;
581 case 12298:
582 language = "es_EC"; /* Spanish - Ecuador */
583 break;
584 case 17418:
585 language = "es_SV"; /* Spanish - El Salvador */
586 break;
587 case 4106:
588 language = "es_GT"; /* Spanish - Guatemala */
589 break;
590 case 18442:
591 language = "es_HN"; /* Spanish - Honduras */
592 break;
593 case 58378:
594 language = "es"; /* Spanish - Latin America */
595 break;
596 case 2058:
597 language = "es_MX"; /* Spanish - Mexico */
598 break;
599 case 19466:
600 language = "es_NI"; /* Spanish - Nicaragua */
601 break;
602 case 6154:
603 language = "es_PA"; /* Spanish - Panama */
604 break;
605 case 15370:
606 language = "es_PY"; /* Spanish - Paraguay */
607 break;
608 case 10250:
609 language = "es_PE"; /* Spanish - Peru */
610 break;
611 case 20490:
612 language = "es_PR"; /* Spanish - Puerto Rico */
613 break;
614 case 21514:
615 language = "es_US"; /* Spanish - United States */
616 break;
617 case 14346:
618 language = "es_UY"; /* Spanish - Uruguay */
619 break;
620 case 8202:
621 language = "es_VE"; /* Spanish - Venezuela */
622 break;
623 case 1072:
624 language = NULL; /* Sutu */
625 break;
626 case 1089:
627 language = "sw"; /* Swahili */
628 break;
629 case 1053:
630 language = "sv_SE"; /* Swedish */
631 break;
632 case 2077:
633 language = "sv_FI"; /* Swedish - Finland */
634 break;
635 case 1114:
636 language = NULL; /* Syriac */
637 break;
638 case 1064:
639 language = "tg"; /* Tajik */
640 break;
641 case 1119:
642 language = NULL; /* Tamazight (Arabic) */
643 break;
644 case 2143:
645 language = NULL; /* Tamazight (Latin) */
646 break;
647 case 1097:
648 language = "ta"; /* Tamil */
649 break;
650 case 1092:
651 language = "tt"; /* Tatar */
652 break;
653 case 1098:
654 language = "te"; /* Telugu */
655 break;
656 case 1054:
657 language = "th"; /* Thai */
658 break;
659 case 2129:
660 language = "bo_BT"; /* Tibetan - Bhutan */
661 break;
662 case 1105:
663 language = "bo_CN"; /* Tibetan - People"s Republic of China */
664 break;
665 case 2163:
666 language = "ti_ER"; /* Tigrigna - Eritrea */
667 break;
668 case 1139:
669 language = "ti_ET"; /* Tigrigna - Ethiopia */
670 break;
671 case 1073:
672 language = "ts"; /* Tsonga */
673 break;
674 case 1074:
675 language = "tn"; /* Tswana */
676 break;
677 case 1055:
678 language = "tr"; /* Turkish */
679 break;
680 case 1090:
681 language = "tk"; /* Turkmen */
682 break;
683 case 1152:
684 language = "ug"; /* Uighur - China */
685 break;
686 case 1058:
687 language = "uk"; /* Ukrainian */
688 break;
689 case 1056:
690 language = "ur"; /* Urdu */
691 break;
692 case 2080:
693 language = "ur_IN"; /* Urdu - India */
694 break;
695 case 2115:
696 language = "uz"; /* Uzbek (Cyrillic) */
697 break;
698 case 1091:
699 language = "uz@latin"; /* Uzbek (Latin) */
700 break;
701 case 1075:
702 language = "ve"; /* Venda */
703 break;
704 case 1066:
705 language = "vi"; /* Vietnamese */
706 break;
707 case 1106:
708 language = "cy"; /* Welsh */
709 break;
710 case 1076:
711 language = "xh"; /* Xhosa */
712 break;
713 case 1144:
714 language = NULL; /* Yi */
715 break;
716 case 1085:
717 language = "yi"; /* Yiddish */
718 break;
719 case 1130:
720 language = "yo"; /* Yoruba */
721 break;
722 case 1077:
723 language = "zu"; /* Zulu */
724 break;
725 default:
726 language = NULL;
729 #endif
731 /* We already set the locale according to the environment, so just
732 * return early if no language is set in gimprc.
734 if (! language)
735 return;
737 g_setenv ("LANGUAGE", language, TRUE);
738 setlocale (LC_ALL, "");