Make LLTransUtil::parseStrings() merge all relevant strings.xml files.
Until now, adding a xui/en/strings.xml file in any non-default skin meant you had to clone the entire file, editing only the particular entries you wanted to override. With this change, we load strings.xml file(s) from the default skin before loading the specified skin -- so a non-default skin can now provide a strings.xml file containing only the specific entries it wants to override.meow-7.2.2
parent
fdddd37db0
commit
9e4927ece5
|
|
@ -31,15 +31,27 @@
|
|||
#include "lltrans.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llxmlnode.h"
|
||||
|
||||
#include "lldir.h"
|
||||
|
||||
bool LLTransUtil::parseStrings(const std::string& xml_filename, const std::set<std::string>& default_args)
|
||||
{
|
||||
// LLUICtrlFactory::getLayeredXMLNode() just calls
|
||||
// gDirUtilp->findSkinnedFilenames(merge=false) and then passes the
|
||||
// resulting paths to LLXMLNode::getLayeredXMLNode(). Bypass that and call
|
||||
// LLXMLNode::getLayeredXMLNode() directly: we want merge=true.
|
||||
std::vector<std::string> paths =
|
||||
gDirUtilp->findSkinnedFilenames(LLDir::XUI, xml_filename, true);
|
||||
if (paths.empty())
|
||||
{
|
||||
// xml_filename not found at all in any skin -- check whether entire
|
||||
// path was passed (but I hope we no longer have callers who do that)
|
||||
paths.push_back(xml_filename);
|
||||
}
|
||||
LLXMLNodePtr root;
|
||||
BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
|
||||
bool success = LLXMLNode::getLayeredXMLNode(root, paths);
|
||||
if (!success)
|
||||
{
|
||||
llerrs << "Couldn't load string table" << llendl;
|
||||
llerrs << "Couldn't load string table " << xml_filename << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +66,7 @@ bool LLTransUtil::parseLanguageStrings(const std::string& xml_filename)
|
|||
|
||||
if (!success)
|
||||
{
|
||||
llerrs << "Couldn't load string table " << xml_filename << llendl;
|
||||
llerrs << "Couldn't load localization table " << xml_filename << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -897,7 +897,8 @@ bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,
|
|||
|
||||
std::vector<std::string>::const_iterator itor;
|
||||
|
||||
for (itor = paths.begin(), ++itor; itor != paths.end(); ++itor)
|
||||
// We've already dealt with the first item, skip that one
|
||||
for (itor = paths.begin() + 1; itor != paths.end(); ++itor)
|
||||
{
|
||||
std::string layer_filename = *itor;
|
||||
if(layer_filename.empty() || layer_filename == filename)
|
||||
|
|
|
|||
Loading…
Reference in New Issue