read optional language inis so that non-theme packages can provide strings (for example, the translated name of the package)

This commit is contained in:
Chris Danford
2008-06-24 10:49:06 +00:00
parent 28784d9aa8
commit 00578338f0
2 changed files with 28 additions and 9 deletions
+27 -9
View File
@@ -288,7 +288,14 @@ void ThemeManager::LoadThemeMetrics( const RString &sThemeName_, const RString &
IniFile iniMetrics; IniFile iniMetrics;
IniFile iniStrings; IniFile iniStrings;
iniMetrics.ReadFile( GetMetricsIniPath(sThemeName) ); iniMetrics.ReadFile( GetMetricsIniPath(sThemeName) );
iniStrings.ReadFile( GetLanguageIniPath(sThemeName,SpecialFiles::BASE_LANGUAGE) ); // Load optional language inis (probably mounted by a package) first so that they can be overridden by the current theme.
{
vector<RString> vs;
GetOptionalLanguageIniPaths(vs,sThemeName,sLanguage);
FOREACH_CONST(RString,vs,s)
iniStrings.ReadFile( *s );
}
iniStrings.ReadFile( GetLanguageIniPath(sThemeName,SpecialFiles::BASE_LANGUAGE) );
if( sLanguage.CompareNoCase(SpecialFiles::BASE_LANGUAGE) ) if( sLanguage.CompareNoCase(SpecialFiles::BASE_LANGUAGE) )
iniStrings.ReadFile( GetLanguageIniPath(sThemeName,sLanguage) ); iniStrings.ReadFile( GetLanguageIniPath(sThemeName,sLanguage) );
@@ -1015,16 +1022,21 @@ void ThemeManager::GetLanguagesForTheme( const RString &sThemeName, vector<RStri
vector<RString> as; vector<RString> as;
GetDirListing( sLanguageDir + "*.ini", as ); GetDirListing( sLanguageDir + "*.ini", as );
// strip out metrics.ini FOREACH_CONST( RString, as, s )
for( int i=as.size()-1; i>=0; i-- )
{ {
if( as[i].CompareNoCase(SpecialFiles::METRICS_FILE)==0 ) // ignore metrics.ini
as.erase( as.begin()+i ); if( s->CompareNoCase(SpecialFiles::METRICS_FILE)==0 )
// strip ".ini" continue;
as[i] = as[i].Left( as[i].size()-4 );
}
asLanguagesOut.insert( asLanguagesOut.end(), as.begin(), as.end() ); // Ignore filenames with a space. These are optional language inis that probably came from a mounted package.
if( s->find(" ") != RString::npos )
continue;
// strip ".ini"
RString s2 = s->Left( s->size()-4 );
asLanguagesOut.push_back( s2 );
}
} }
RString ThemeManager::GetLanguageIniPath( const RString &sThemeName, const RString &sLanguage ) RString ThemeManager::GetLanguageIniPath( const RString &sThemeName, const RString &sLanguage )
@@ -1032,6 +1044,12 @@ RString ThemeManager::GetLanguageIniPath( const RString &sThemeName, const RStri
return GetThemeDirFromName(sThemeName) + SpecialFiles::LANGUAGES_SUBDIR + sLanguage + ".ini"; return GetThemeDirFromName(sThemeName) + SpecialFiles::LANGUAGES_SUBDIR + sLanguage + ".ini";
} }
void ThemeManager::GetOptionalLanguageIniPaths( vector<RString> &vsPathsOut, const RString &sThemeName, const RString &sLanguage )
{
// optional ini names look like: "en PackageName.ini"
GetDirListing( GetThemeDirFromName(sThemeName) + SpecialFiles::LANGUAGES_SUBDIR + sLanguage + " *.ini", vsPathsOut, false, true );
}
void ThemeManager::GetOptionNames( vector<RString>& AddTo ) void ThemeManager::GetOptionNames( vector<RString>& AddTo )
{ {
const XNode *cur = g_pLoadedThemeData->iniStrings.GetChild( "OptionNames" ); const XNode *cur = g_pLoadedThemeData->iniStrings.GetChild( "OptionNames" );
+1
View File
@@ -119,6 +119,7 @@ protected:
static RString GetMetricsIniPath( const RString &sThemeName ); static RString GetMetricsIniPath( const RString &sThemeName );
static void GetLanguagesForTheme( const RString &sThemeName, vector<RString>& asLanguagesOut ); static void GetLanguagesForTheme( const RString &sThemeName, vector<RString>& asLanguagesOut );
static RString GetLanguageIniPath( const RString &sThemeName, const RString &sLanguage ); static RString GetLanguageIniPath( const RString &sThemeName, const RString &sLanguage );
void GetOptionalLanguageIniPaths( vector<RString> &vsPathsOut, const RString &sThemeName, const RString &sLanguage );
RString GetDefaultLanguage(); RString GetDefaultLanguage();
RString m_sCurThemeName; RString m_sCurThemeName;