if(locale)
{
char * dot;
+ char * colon;
if(language != locale)
strcpy(language, locale);
dot = strstr(language, ".");
if(dot) *dot = 0;
+
+ // TODO: Try multiple languages defined in LANGUAGE
+ colon = strstr(language, ":");
+ if(colon) *colon = 0;
locale = language;
}
if(locale)
under = strchr(genericLocale, '_');
if(under)
*under = 0;
+ if(!strcmpi(genericLocale, "zh"))
+ strcpy(genericLocale, "zh_CN");
}
if(moduleName)
if(moduleName)
sprintf(fileName, "<:%s>locale/%s.mo", moduleName, genericLocale);
else
- sprintf(fileName, ":locale/%s.mo", name, genericLocale);
+ sprintf(fileName, ":locale/%s.mo", genericLocale);
f = FileOpen(fileName, read);
if(!f)
{
String GetLanguageString()
{
+ char * dot, * colon;
+ static char lang[256];
String language = getenv("ECERE_LANGUAGE");
if(!language) language = getenv("LANGUAGE");
if(!language) language = getenv("LC_ALL");
if(!language) language = getenv("LC_MESSAGES");
if(!language) language = getenv("LANG");
if(!language) language = "";
+ if(language && (colon = strchr(language, ':')))
+ {
+ if(lang != language)
+ strncpy(lang, language, sizeof(lang));
+ lang[sizeof(lang)-1] = 0;
+ lang[colon - language] = 0;
+ language = lang;
+ }
+ if(language && (dot = strchr(language, '.')))
+ {
+ if(lang != language)
+ strncpy(lang, language, sizeof(lang));
+ lang[sizeof(lang)-1] = 0;
+ lang[dot - language] = 0;
+ language = lang;
+ }
return language;
}
// Default to language specified by environment if no language selected
if(!ideSettings.language)
+ {
ideSettings.language = GetLanguageString();
+ settingsContainer.Save();
+ }
// Default to home directory if no directory yet set up
if(!ideSettings.ideProjectFileDialogLocation[0])
{
String language = ideSettings.language;
int i = 0;
+ bool found = false;
ide.languageItems = new MenuItem[languages.count];
for(l : languages)
return true;
}
};
- if(((!language || !language[0]) && i == 0) ||
- (language && !strcmpi(l.code, language)))
- ide.languageItems[i].checked = true;
i++;
}
+
+ // Try to find country-specific language first
+ if(language)
+ {
+ i = 0;
+ for(l : languages)
+ {
+ if(!strcmpi(l.code, language) || (i == 0 && !strcmpi("en", language)))
+ {
+ ide.languageItems[i].checked = true;
+ found = true;
+ break;
+ }
+ i++;
+ }
+ }
+
+ // Try generalizing locale
+ if(!found && language)
+ {
+ char * under;
+ char genericLocale[256];
+ i = 0;
+ strncpy(genericLocale, language, sizeof(genericLocale));
+ genericLocale[sizeof(genericLocale)] = 0;
+
+ under = strchr(genericLocale, '_');
+ if(under)
+ *under = 0;
+ if(!strcmpi(genericLocale, "zh"))
+ strcpy(genericLocale, "zh_CN");
+ if(strcmp(genericLocale, language))
+ {
+ for(l : languages)
+ {
+ if(!strcmpi(l.code, genericLocale) || (i == 0 && !strcmpi("en", genericLocale)))
+ {
+ ide.languageItems[i].checked = true;
+ found = true;
+ break;
+ }
+ i++;
+ }
+ }
+ }
+
+ if(!found)
+ ide.languageItems[0].checked = true;
+
MenuDivider { ide.languageMenu };
MenuItem
{