summaryrefslogtreecommitdiffstats
path: root/app/language.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/language.c739
1 files changed, 739 insertions, 0 deletions
diff --git a/app/language.c b/app/language.c
new file mode 100644
index 0000000..581ff67
--- /dev/null
+++ b/app/language.c
@@ -0,0 +1,739 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/* Win32 language lookup table:
+ * Copyright (C) 2007-2008 Dieter Verfaillie <dieterv@optionexplicit.be>
+ */
+
+#include "config.h"
+
+#include <locale.h>
+
+#include <glib.h>
+
+#ifdef G_OS_WIN32
+#include <windows.h>
+#include <winnls.h>
+#endif
+
+#include "language.h"
+
+
+void
+language_init (const gchar *language)
+{
+#ifdef G_OS_WIN32
+ if (! language &&
+ g_getenv ("LANG") == NULL &&
+ g_getenv ("LC_MESSAGES") == NULL &&
+ g_getenv ("LC_ALL") == NULL &&
+ g_getenv ("LANGUAGE") == NULL)
+ {
+ /* FIXME: This is a hack. gettext doesn't pick the right language
+ * by default on Windows, so we enforce the right one. The
+ * following code is an adaptation of Python code from
+ * pynicotine. For reasons why this approach is needed, and why
+ * the GetLocaleInfo() approach in other libs falls flat, see:
+ * http://blogs.msdn.com/b/michkap/archive/2007/04/15/2146890.aspx
+ */
+
+ switch (GetUserDefaultUILanguage())
+ {
+ case 1078:
+ language = "af"; /* Afrikaans - South Africa */
+ break;
+ case 1052:
+ language = "sq"; /* Albanian - Albania */
+ break;
+ case 1118:
+ language = "am"; /* Amharic - Ethiopia */
+ break;
+ case 1025:
+ language = "ar_SA"; /* Arabic - Saudi Arabia */
+ break;
+ case 5121:
+ language = "ar_DZ"; /* Arabic - Algeria */
+ break;
+ case 15361:
+ language = "ar_BH"; /* Arabic - Bahrain */
+ break;
+ case 3073:
+ language = "ar_EG"; /* Arabic - Egypt */
+ break;
+ case 2049:
+ language = "ar_IQ"; /* Arabic - Iraq */
+ break;
+ case 11265:
+ language = "ar_JO"; /* Arabic - Jordan */
+ break;
+ case 13313:
+ language = "ar_KW"; /* Arabic - Kuwait */
+ break;
+ case 12289:
+ language = "ar_LB"; /* Arabic - Lebanon */
+ break;
+ case 4097:
+ language = "ar_LY"; /* Arabic - Libya */
+ break;
+ case 6145:
+ language = "ar_MO"; /* Arabic - Morocco */
+ break;
+ case 8193:
+ language = "ar_OM"; /* Arabic - Oman */
+ break;
+ case 16385:
+ language = "ar_QA"; /* Arabic - Qatar */
+ break;
+ case 10241:
+ language = "ar_SY"; /* Arabic - Syria */
+ break;
+ case 7169:
+ language = "ar_TN"; /* Arabic - Tunisia */
+ break;
+ case 14337:
+ language = "ar_AE"; /* Arabic - U.A.E. */
+ break;
+ case 9217:
+ language = "ar_YE"; /* Arabic - Yemen */
+ break;
+ case 1067:
+ language = "hy"; /* Armenian - Armenia */
+ break;
+ case 1101:
+ language = "as"; /* Assamese */
+ break;
+ case 2092:
+ language = NULL; /* Azeri (Cyrillic) */
+ break;
+ case 1068:
+ language = NULL; /* Azeri (Latin) */
+ break;
+ case 1069:
+ language = "eu"; /* Basque */
+ break;
+ case 1059:
+ language = "be"; /* Belarusian */
+ break;
+ case 1093:
+ language = "bn_IN"; /* Bengali (India) */
+ break;
+ case 2117:
+ language = "bn_BD"; /* Bengali (Bangladesh) */
+ break;
+ case 5146:
+ language = "bs"; /* Bosnian (Bosnia/Herzegovina) */
+ break;
+ case 1026:
+ language = "bg"; /* Bulgarian */
+ break;
+ case 1109:
+ language = "my"; /* Burmese */
+ break;
+ case 1027:
+ language = "ca"; /* Catalan */
+ break;
+ case 1116:
+ language = NULL; /* Cherokee - United States */
+ break;
+ case 2052:
+ language = "zh_CN"; /* Chinese - People"s Republic of China */
+ break;
+ case 4100:
+ language = "zh_SG"; /* Chinese - Singapore */
+ break;
+ case 1028:
+ language = "zh_TW"; /* Chinese - Taiwan */
+ break;
+ case 3076:
+ language = "zh_HK"; /* Chinese - Hong Kong SAR */
+ break;
+ case 5124:
+ language = "zh_MO"; /* Chinese - Macao SAR */
+ break;
+ case 1050:
+ language = "hr_HR"; /* Croatian */
+ break;
+ case 4122:
+ language = "hr_BA"; /* Croatian (Bosnia/Herzegovina) */
+ break;
+ case 1029:
+ language = "cs"; /* Czech */
+ break;
+ case 1030:
+ language = "da"; /* Danish */
+ break;
+ case 1125:
+ language = "dv"; /* Divehi */
+ break;
+ case 1043:
+ language = "nl_NL"; /* Dutch - Netherlands */
+ break;
+ case 2067:
+ language = "nl_BE"; /* Dutch - Belgium */
+ break;
+ case 1126:
+ language = NULL; /* Edo */
+ break;
+ case 1033:
+ language = "en_US"; /* English - United States */
+ break;
+ case 2057:
+ language = "en_UK"; /* English - United Kingdom */
+ break;
+ case 3081:
+ language = "en_AU"; /* English - Australia */
+ break;
+ case 10249:
+ language = "en_BZ"; /* English - Belize */
+ break;
+ case 4105:
+ language = "en_CA"; /* English - Canada */
+ break;
+ case 9225:
+ language = "en"; /* English - Caribbean */
+ break;
+ case 15369:
+ language = "en_HK"; /* English - Hong Kong SAR */
+ break;
+ case 16393:
+ language = "en_IN"; /* English - India */
+ break;
+ case 14345:
+ language = "en_ID"; /* English - Indonesia */
+ break;
+ case 6153:
+ language = "en_IR"; /* English - Ireland */
+ break;
+ case 8201:
+ language = "en_JM"; /* English - Jamaica */
+ break;
+ case 17417:
+ language = "en_MW"; /* English - Malaysia */
+ break;
+ case 5129:
+ language = "en_NZ"; /* English - New Zealand */
+ break;
+ case 13321:
+ language = "en_PH"; /* English - Philippines */
+ break;
+ case 18441:
+ language = "en_SG"; /* English - Singapore */
+ break;
+ case 7177:
+ language = "en_ZA"; /* English - South Africa */
+ break;
+ case 11273:
+ language = "en_TT"; /* English - Trinidad */
+ break;
+ case 12297:
+ language = "en_ZW"; /* English - Zimbabwe */
+ break;
+ case 1061:
+ language = "et"; /* Estonian */
+ break;
+ case 1080:
+ language = "fo"; /* Faroese */
+ break;
+ case 1065:
+ language = "fa"; /* Farsi */
+ break;
+ case 1124:
+ language = NULL; /* Filipino */
+ break;
+ case 1035:
+ language = "fi"; /* Finnish */
+ break;
+ case 1036:
+ language = "fr_FR"; /* French - France */
+ break;
+ case 2060:
+ language = "fr_BE"; /* French - Belgium */
+ break;
+ case 11276:
+ language = "fr_CM"; /* French - Cameroon */
+ break;
+ case 3084:
+ language = "fr_CA"; /* French - Canada */
+ break;
+ case 9228:
+ language = "fr_CD"; /* French - Democratic Rep. of Congo */
+ break;
+ case 12300:
+ language = "fr_CI"; /* French - Cote d"Ivoire */
+ break;
+ case 15372:
+ language = "fr_HT"; /* French - Haiti */
+ break;
+ case 5132:
+ language = "fr_LU"; /* French - Luxembourg */
+ break;
+ case 13324:
+ language = "fr_ML"; /* French - Mali */
+ break;
+ case 6156:
+ language = "fr_MC"; /* French - Monaco */
+ break;
+ case 14348:
+ language = "fr_MA"; /* French - Morocco */
+ break;
+ case 58380:
+ language = "fr"; /* French - North Africa */
+ break;
+ case 8204:
+ language = "fr_RE"; /* French - Reunion */
+ break;
+ case 10252:
+ language = "fr_SN"; /* French - Senegal */
+ break;
+ case 4108:
+ language = "fr_CH"; /* French - Switzerland */
+ break;
+ case 7180:
+ language = "fr"; /* French - West Indies */
+ break;
+ case 1122:
+ language = "fy"; /* Frisian - Netherlands */
+ break;
+ case 1127:
+ language = NULL; /* Fulfulde - Nigeria */
+ break;
+ case 1071:
+ language = "mk"; /* FYRO Macedonian */
+ break;
+ case 2108:
+ language = "ga"; /* Gaelic (Ireland) */
+ break;
+ case 1084:
+ language = "gd"; /* Gaelic (Scotland) */
+ break;
+ case 1110:
+ language = "gl"; /* Galician */
+ break;
+ case 1079:
+ language = "ka"; /* Georgian */
+ break;
+ case 1031:
+ language = "de_DE"; /* German - Germany */
+ break;
+ case 3079:
+ language = "de_AT"; /* German - Austria */
+ break;
+ case 5127:
+ language = "de_LI"; /* German - Liechtenstein */
+ break;
+ case 4103:
+ language = "de_LU"; /* German - Luxembourg */
+ break;
+ case 2055:
+ language = "de_CH"; /* German - Switzerland */
+ break;
+ case 1032:
+ language = "el"; /* Greek */
+ break;
+ case 1140:
+ language = "gn"; /* Guarani - Paraguay */
+ break;
+ case 1095:
+ language = "gu"; /* Gujarati */
+ break;
+ case 1128:
+ language = "ha"; /* Hausa - Nigeria */
+ break;
+ case 1141:
+ language = NULL; /* Hawaiian - United States */
+ break;
+ case 1037:
+ language = "he"; /* Hebrew */
+ break;
+ case 1081:
+ language = "hi"; /* Hindi */
+ break;
+ case 1038:
+ language = "hu"; /* Hungarian */
+ break;
+ case 1129:
+ language = NULL; /* Ibibio - Nigeria */
+ break;
+ case 1039:
+ language = "is"; /* Icelandic */
+ break;
+ case 1136:
+ language = "ig"; /* Igbo - Nigeria */
+ break;
+ case 1057:
+ language = "id"; /* Indonesian */
+ break;
+ case 1117:
+ language = "iu"; /* Inuktitut */
+ break;
+ case 1040:
+ language = "it_IT"; /* Italian - Italy */
+ break;
+ case 2064:
+ language = "it_CH"; /* Italian - Switzerland */
+ break;
+ case 1041:
+ language = "ja"; /* Japanese */
+ break;
+ case 1099:
+ language = "kn"; /* Kannada */
+ break;
+ case 1137:
+ language = "kr"; /* Kanuri - Nigeria */
+ break;
+ case 2144:
+ language = "ks"; /* Kashmiri */
+ break;
+ case 1120:
+ language = "ks"; /* Kashmiri (Arabic) */
+ break;
+ case 1087:
+ language = "kk"; /* Kazakh */
+ break;
+ case 1107:
+ language = "km"; /* Khmer */
+ break;
+ case 1111:
+ language = NULL; /* Konkani */
+ break;
+ case 1042:
+ language = "ko"; /* Korean */
+ break;
+ case 1088:
+ language = "ky"; /* Kyrgyz (Cyrillic) */
+ break;
+ case 1108:
+ language = "lo"; /* Lao */
+ break;
+ case 1142:
+ language = "la"; /* Latin */
+ break;
+ case 1062:
+ language = "lv"; /* Latvian */
+ break;
+ case 1063:
+ language = "lt"; /* Lithuanian */
+ break;
+ case 1086:
+ language = "ms_MY"; /* Malay - Malaysia */
+ break;
+ case 2110:
+ language = "ms_BN"; /* Malay - Brunei Darussalam */
+ break;
+ case 1100:
+ language = "ml"; /* Malayalam */
+ break;
+ case 1082:
+ language = "mt"; /* Maltese */
+ break;
+ case 1112:
+ language = NULL; /* Manipuri */
+ break;
+ case 1153:
+ language = "mi"; /* Maori - New Zealand */
+ break;
+ case 1102:
+ language = "mr"; /* Marathi */
+ break;
+ case 1104:
+ language = "mn"; /* Mongolian (Cyrillic) */
+ break;
+ case 2128:
+ language = "mn"; /* Mongolian (Mongolian) */
+ break;
+ case 1121:
+ language = "ne_NP"; /* Nepali */
+ break;
+ case 2145:
+ language = "ne_IN"; /* Nepali - India */
+ break;
+ case 1044:
+ language = "no"; /* Norwegian (Bokmᅢᆬl) */
+ break;
+ case 2068:
+ language = "no"; /* Norwegian (Nynorsk) */
+ break;
+ case 1096:
+ language = "or"; /* Oriya */
+ break;
+ case 1138:
+ language = "om"; /* Oromo */
+ break;
+ case 1145:
+ language = NULL; /* Papiamentu */
+ break;
+ case 1123:
+ language = "ps"; /* Pashto */
+ break;
+ case 1045:
+ language = "pl"; /* Polish */
+ break;
+ case 1046:
+ language = "pt_BR"; /* Portuguese - Brazil */
+ break;
+ case 2070:
+ language = "pt_PT"; /* Portuguese - Portugal */
+ break;
+ case 1094:
+ language = "pa"; /* Punjabi */
+ break;
+ case 2118:
+ language = "pa_PK"; /* Punjabi (Pakistan) */
+ break;
+ case 1131:
+ language = "qu_BO"; /* Quecha - Bolivia */
+ break;
+ case 2155:
+ language = "qu_EC"; /* Quecha - Ecuador */
+ break;
+ case 3179:
+ language = "qu_PE"; /* Quecha - Peru */
+ break;
+ case 1047:
+ language = "rm"; /* Rhaeto-Romanic */
+ break;
+ case 1048:
+ language = "ro_RO"; /* Romanian */
+ break;
+ case 2072:
+ language = "ro_MD"; /* Romanian - Moldava */
+ break;
+ case 1049:
+ language = "ru_RU"; /* Russian */
+ break;
+ case 2073:
+ language = "ru_MD"; /* Russian - Moldava */
+ break;
+ case 1083:
+ language = NULL; /* Sami (Lappish) */
+ break;
+ case 1103:
+ language = "sa"; /* Sanskrit */
+ break;
+ case 1132:
+ language = NULL; /* Sepedi */
+ break;
+ case 3098:
+ language = "sr"; /* Serbian (Cyrillic) */
+ break;
+ case 2074:
+ language = "sr@latin"; /* Serbian (Latin) */
+ break;
+ case 1113:
+ language = "sd_IN"; /* Sindhi - India */
+ break;
+ case 2137:
+ language = "sd_PK"; /* Sindhi - Pakistan */
+ break;
+ case 1115:
+ language = "si"; /* Sinhalese - Sri Lanka */
+ break;
+ case 1051:
+ language = "sk"; /* Slovak */
+ break;
+ case 1060:
+ language = "sl"; /* Slovenian */
+ break;
+ case 1143:
+ language = "so"; /* Somali */
+ break;
+ case 1070:
+ language = NULL; /* Sorbian */
+ break;
+ case 3082:
+ language = "es"; /* Spanish - Spain (Modern Sort) */
+ break;
+ case 1034:
+ language = "es"; /* Spanish - Spain (Traditional Sort) */
+ break;
+ case 11274:
+ language = "es_AR"; /* Spanish - Argentina */
+ break;
+ case 16394:
+ language = "es_BO"; /* Spanish - Bolivia */
+ break;
+ case 13322:
+ language = "es_CL"; /* Spanish - Chile */
+ break;
+ case 9226:
+ language = "es_CO"; /* Spanish - Colombia */
+ break;
+ case 5130:
+ language = "es_CR"; /* Spanish - Costa Rica */
+ break;
+ case 7178:
+ language = "es_DO"; /* Spanish - Dominican Republic */
+ break;
+ case 12298:
+ language = "es_EC"; /* Spanish - Ecuador */
+ break;
+ case 17418:
+ language = "es_SV"; /* Spanish - El Salvador */
+ break;
+ case 4106:
+ language = "es_GT"; /* Spanish - Guatemala */
+ break;
+ case 18442:
+ language = "es_HN"; /* Spanish - Honduras */
+ break;
+ case 58378:
+ language = "es"; /* Spanish - Latin America */
+ break;
+ case 2058:
+ language = "es_MX"; /* Spanish - Mexico */
+ break;
+ case 19466:
+ language = "es_NI"; /* Spanish - Nicaragua */
+ break;
+ case 6154:
+ language = "es_PA"; /* Spanish - Panama */
+ break;
+ case 15370:
+ language = "es_PY"; /* Spanish - Paraguay */
+ break;
+ case 10250:
+ language = "es_PE"; /* Spanish - Peru */
+ break;
+ case 20490:
+ language = "es_PR"; /* Spanish - Puerto Rico */
+ break;
+ case 21514:
+ language = "es_US"; /* Spanish - United States */
+ break;
+ case 14346:
+ language = "es_UY"; /* Spanish - Uruguay */
+ break;
+ case 8202:
+ language = "es_VE"; /* Spanish - Venezuela */
+ break;
+ case 1072:
+ language = NULL; /* Sutu */
+ break;
+ case 1089:
+ language = "sw"; /* Swahili */
+ break;
+ case 1053:
+ language = "sv_SE"; /* Swedish */
+ break;
+ case 2077:
+ language = "sv_FI"; /* Swedish - Finland */
+ break;
+ case 1114:
+ language = NULL; /* Syriac */
+ break;
+ case 1064:
+ language = "tg"; /* Tajik */
+ break;
+ case 1119:
+ language = NULL; /* Tamazight (Arabic) */
+ break;
+ case 2143:
+ language = NULL; /* Tamazight (Latin) */
+ break;
+ case 1097:
+ language = "ta"; /* Tamil */
+ break;
+ case 1092:
+ language = "tt"; /* Tatar */
+ break;
+ case 1098:
+ language = "te"; /* Telugu */
+ break;
+ case 1054:
+ language = "th"; /* Thai */
+ break;
+ case 2129:
+ language = "bo_BT"; /* Tibetan - Bhutan */
+ break;
+ case 1105:
+ language = "bo_CN"; /* Tibetan - People"s Republic of China */
+ break;
+ case 2163:
+ language = "ti_ER"; /* Tigrigna - Eritrea */
+ break;
+ case 1139:
+ language = "ti_ET"; /* Tigrigna - Ethiopia */
+ break;
+ case 1073:
+ language = "ts"; /* Tsonga */
+ break;
+ case 1074:
+ language = "tn"; /* Tswana */
+ break;
+ case 1055:
+ language = "tr"; /* Turkish */
+ break;
+ case 1090:
+ language = "tk"; /* Turkmen */
+ break;
+ case 1152:
+ language = "ug"; /* Uighur - China */
+ break;
+ case 1058:
+ language = "uk"; /* Ukrainian */
+ break;
+ case 1056:
+ language = "ur"; /* Urdu */
+ break;
+ case 2080:
+ language = "ur_IN"; /* Urdu - India */
+ break;
+ case 2115:
+ language = "uz"; /* Uzbek (Cyrillic) */
+ break;
+ case 1091:
+ language = "uz@latin"; /* Uzbek (Latin) */
+ break;
+ case 1075:
+ language = "ve"; /* Venda */
+ break;
+ case 1066:
+ language = "vi"; /* Vietnamese */
+ break;
+ case 1106:
+ language = "cy"; /* Welsh */
+ break;
+ case 1076:
+ language = "xh"; /* Xhosa */
+ break;
+ case 1144:
+ language = NULL; /* Yi */
+ break;
+ case 1085:
+ language = "yi"; /* Yiddish */
+ break;
+ case 1130:
+ language = "yo"; /* Yoruba */
+ break;
+ case 1077:
+ language = "zu"; /* Zulu */
+ break;
+ default:
+ language = NULL;
+ }
+ }
+#endif
+
+ /* We already set the locale according to the environment, so just
+ * return early if no language is set in gimprc.
+ */
+ if (! language)
+ return;
+
+ g_setenv ("LANGUAGE", language, TRUE);
+ setlocale (LC_ALL, "");
+}