summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2012-10-11 17:29:04 -0400
committerNat Goodspeed <nat@lindenlab.com>2012-10-11 17:29:04 -0400
commit9e4927ece5448c94bc3f46f7be019c0ffe14a686 (patch)
tree951c276092a807dd483f3847b34ffd5b95be3678 /indra
parentfdddd37db095dbbefb17b1725db5fb9527ba3fd9 (diff)
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.
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/lltransutil.cpp20
-rw-r--r--indra/llxml/llxmlnode.cpp3
2 files changed, 18 insertions, 5 deletions
diff --git a/indra/llui/lltransutil.cpp b/indra/llui/lltransutil.cpp
index 58fa8a0828..97a72b55e1 100644
--- a/indra/llui/lltransutil.cpp
+++ b/indra/llui/lltransutil.cpp
@@ -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;
}
diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
index 2ffb0d8503..b775249219 100644
--- a/indra/llxml/llxmlnode.cpp
+++ b/indra/llxml/llxmlnode.cpp
@@ -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)