| (((unsigned int)(dword) & 0x00ff0000) >> 8) \
| (((unsigned int)(dword) & 0xff000000) >> 24))
-public dllexport void LoadTranslatedStrings(Module module, char * name)
+public dllexport void LoadTranslatedStrings(String moduleName, char * name)
{
#ifndef ECERE_NOFILE
File f;
char lang[256];
char lcMessages[256];
char * locale = null;
+ char genericLocale[256];
+
+ genericLocale[0] = 0;
if(GetEnvironment("LANGUAGE", language, sizeof(language)))
locale = language;
if(dot) *dot = 0;
locale = language;
}
+ if(locale)
+ {
+ char * under;
+ strcpy(genericLocale, locale);
+ under = strchr(genericLocale, '_');
+ if(under)
+ *under = 0;
+ }
- if(module.name)
- sprintf(fileName, "<:%s>locale/%s/LC_MESSAGES/%s.mo", module.name, locale, name);
+ if(moduleName)
+ sprintf(fileName, "<:%s>locale/%s.mo", moduleName, locale);
else
- sprintf(fileName, ":locale/%s/LC_MESSAGES/%s.mo", locale, name);
+ sprintf(fileName, ":locale/%s.mo", locale);
f = FileOpen(fileName, read);
if(!f)
{
+ if(moduleName)
+ sprintf(fileName, "<:%s>locale/%s/LC_MESSAGES/%s.mo", moduleName, locale, name);
+ else
+ sprintf(fileName, ":locale/%s/LC_MESSAGES/%s.mo", locale, name);
+ f = FileOpen(fileName, read);
+ }
+ if(!f)
+ {
sprintf(fileName, "locale/%s/LC_MESSAGES/%s.mo", locale, name);
f = FileOpen(fileName, read);
}
sprintf(fileName, "/usr/share/locale/%s/LC_MESSAGES/%s.mo", locale, name);
f = FileOpen(fileName, read);
}
+
+ if(!f && locale && strcmpi(locale, genericLocale))
+ {
+ // Attempt with generic language
+ if(moduleName)
+ sprintf(fileName, "<:%s>locale/%s.mo", moduleName, genericLocale);
+ else
+ sprintf(fileName, ":locale/%s.mo", name, genericLocale);
+ f = FileOpen(fileName, read);
+ if(!f)
+ {
+ if(moduleName)
+ sprintf(fileName, "<:%s>locale/%s/LC_MESSAGES/%s.mo", moduleName, genericLocale, name);
+ else
+ sprintf(fileName, ":locale/%s/LC_MESSAGES/%s.mo", genericLocale, name);
+ f = FileOpen(fileName, read);
+ }
+ if(!f)
+ {
+ sprintf(fileName, "locale/%s/LC_MESSAGES/%s.mo", genericLocale, name);
+ f = FileOpen(fileName, read);
+ }
+ if(!f)
+ {
+ sprintf(fileName, "/usr/share/locale/%s/LC_MESSAGES/%s.mo", genericLocale, name);
+ f = FileOpen(fileName, read);
+ }
+ }
+
if(f)
{
uint magic = 0;
f.Read(&transStrings, sizeof(uint), 1); if(swap) SWAP_DWORD(transStrings);
f.Read(&hashingSize, sizeof(uint), 1); if(swap) SWAP_DWORD(hashingSize);
f.Read(&hashingOffset, sizeof(uint), 1); if(swap) SWAP_DWORD(hashingOffset);
-
+
if(!moduleMaps)
moduleMaps = { };
{
MapIterator<String, Map<String, String>> it { map = moduleMaps };
- if(it.Index(module.name, false))
+ if(it.Index(name, false))
delete it.data;
// TOFIX: delete moduleMaps[module];
}
- moduleMaps[module.name] = textMap = { };
+ moduleMaps[name] = textMap = { };
for(c = 0; c < numStrings; c++)
{
uint len = 0, offset = 0;
#endif
}
-public dllexport void UnloadTranslatedStrings(Module module)
+public dllexport void UnloadTranslatedStrings(String name)
{
MapIterator<String, Map<String, String>> it { map = moduleMaps };
- if(it.Index(module.name, false))
+ if(it.Index(name, false))
{
it.data.Free();
moduleMaps.Delete(it.pointer);
}
}
-public dllexport char * GetTranslatedString(Module module, char * string, char * stringAndContext)
+public dllexport char * GetTranslatedString(String name, char * string, char * stringAndContext)
{
- Map<String, String> textMap = moduleMaps ? moduleMaps[module.name] : null;
+ Map<String, String> textMap = moduleMaps ? moduleMaps[name] : null;
char * result = textMap ? textMap[stringAndContext ? stringAndContext : string] : string;
return (result && result[0]) ? result : string;
}