I18N: fix behaviour when defaultLocale == current
This commit is contained in:
parent
f05c10e13a
commit
112d1028bf
1 changed files with 20 additions and 5 deletions
|
@ -243,7 +243,7 @@ void FGLocale::clear()
|
||||||
_inited = false;
|
_inited = false;
|
||||||
_currentLocaleString.clear();
|
_currentLocaleString.clear();
|
||||||
|
|
||||||
if (_currentLocale) {
|
if (_currentLocale && (_currentLocale != _defaultLocale)) {
|
||||||
// remove loaded strings, so we don't duplicate
|
// remove loaded strings, so we don't duplicate
|
||||||
_currentLocale->removeChild("strings");
|
_currentLocale->removeChild("strings");
|
||||||
}
|
}
|
||||||
|
@ -294,8 +294,17 @@ FGLocale::loadResource(SGPropertyNode* localeNode, const char* resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
SGPropertyNode* stringNode = localeNode->getNode("strings", 0, true);
|
SGPropertyNode* stringNode = localeNode->getNode("strings", 0, true);
|
||||||
|
SGPropertyNode* resourceNode = stringNode->getNode(resource);
|
||||||
|
|
||||||
const char *path_str = stringNode->getStringValue(resource, nullptr);
|
if (!resourceNode)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (resourceNode->getBoolValue("__loaded")) {
|
||||||
|
// already loaded previously
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* path_str = resourceNode->getStringValue();
|
||||||
if (!path_str)
|
if (!path_str)
|
||||||
{
|
{
|
||||||
SG_LOG(SG_GENERAL, SG_WARN, "No path in " << stringNode->getPath() << "/" << resource << ".");
|
SG_LOG(SG_GENERAL, SG_WARN, "No path in " << stringNode->getPath() << "/" << resource << ".");
|
||||||
|
@ -310,7 +319,7 @@ FGLocale::loadResource(SGPropertyNode* localeNode, const char* resource)
|
||||||
// load the actual file
|
// load the actual file
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
readProperties(path, stringNode->getNode(resource, 0, true));
|
readProperties(path, resourceNode);
|
||||||
} catch (const sg_exception &e)
|
} catch (const sg_exception &e)
|
||||||
{
|
{
|
||||||
SG_LOG(SG_GENERAL, SG_ALERT, "Unable to read the localized strings from " << path <<
|
SG_LOG(SG_GENERAL, SG_ALERT, "Unable to read the localized strings from " << path <<
|
||||||
|
@ -318,7 +327,9 @@ FGLocale::loadResource(SGPropertyNode* localeNode, const char* resource)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
// set marker to indicate the data has been loaded
|
||||||
|
resourceNode->setBoolValue("__loaded", true);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load strings for requested resource (for current and default locale).
|
// Load strings for requested resource (for current and default locale).
|
||||||
|
@ -434,7 +445,11 @@ size_t FGLocale::getLocalizedStringCount(const char* id, const char* resource) c
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_defaultLocale) {
|
if (_defaultLocale) {
|
||||||
size_t count = _defaultLocale->getNode("strings",0, true)->getNode(resource)->getChildren(id).size();
|
auto resourceNode = _defaultLocale->getNode("strings", 0, true)->getNode(resource);
|
||||||
|
if (!resourceNode)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
size_t count = resourceNode->getChildren(id).size();
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue