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:
@@ -288,6 +288,13 @@ void ThemeManager::LoadThemeMetrics( const RString &sThemeName_, const RString &
|
|||||||
IniFile iniMetrics;
|
IniFile iniMetrics;
|
||||||
IniFile iniStrings;
|
IniFile iniStrings;
|
||||||
iniMetrics.ReadFile( GetMetricsIniPath(sThemeName) );
|
iniMetrics.ReadFile( GetMetricsIniPath(sThemeName) );
|
||||||
|
// 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) );
|
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" );
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user