随着全球化的发展,地球变得平坦了。我有一个同事现在还在美国
ORACLE进行学习,说明软件是真正的无国界产品。那么在第二人生里,到底是怎么样实现多语言的支持呢?带着这个问题来分析下面一段代码,如下:
#001 void LLUICtrlFactory::setupPaths()
#002 {
获取
UI资源所在目录路径,比如:F:/secondlife/linden/indra/newview/ReleaseNoOpt/skins/ paths.xml。
#003
LLString filename = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, "paths.xml");
#004
下面开始分析
paths.xml文件。
#005
LLXMLNodePtr root;
#006
BOOL success = LLXMLNode::parseFile(filename, root, NULL);
#007
mXUIPaths.clear();
#008
如果分析成功,就获取
XML里的数据。
#009
if (success)
#010
{
#011
LLXMLNodePtr path;
取得第二人生运行程序所在的目录。
#012
LLString app_dir = gDirUtilp->getAppRODataDir();
#013
遍历
XML里的目录路径。
#014
for (path = root->getFirstChild(); path.notNull(); path = path->getNextSibling())
#015
{
取得资源所在的目录路径。
#016
LLUIString path_val_ui(path->getValue());
固定设置语言为
US英语。
#017
LLString language = "en-us";
查看系统配置文件里是否有其它语言的设置。
#018
if (LLUI::sConfigGroup)
#019
{
获取设置的语言。
#020
language = LLUI::sConfigGroup->getString("Language");
如果设置按系统的语言来选择。
#021
if(language == "default")
#022
{
#023
language = LLUI::sConfigGroup->getString("SystemLanguage");
#024
}
#025
}
设置当前正在设置的语言的资源所在的目录。
#026
path_val_ui.setArg("[Language]", language);
#027
LLString fullpath = app_dir + path_val_ui.getString();
#028
如果这个目录没有保存,下面就开始保存这个路径。
#029
if (std::find(mXUIPaths.begin(), mXUIPaths.end(), fullpath) == mXUIPaths.end())
#030
{
#031
mXUIPaths.push_back(app_dir + path_val_ui.getString());
#032
}
#033
}
#034
}
#035
else // parsing failed
#036
{
下面分析
XML出错,使用缺省的目录路径。
#037
LLString slash = gDirUtilp->getDirDelimiter();
#038
LLString dir = gDirUtilp->getAppRODataDir() + slash + "skins" + slash + "xui" + slash + "en-us" + slash;
#039
llwarns << "XUI::config file unable to open." << llendl;
#040
mXUIPaths.push_back(dir);
#041
}
#042 }
#043
下面再来仔细地看看
paths.xml里是什么内容,如下:
<paths>
<directory>/skins/xui/en-us/</directory>
<directory>/skins/xui/[Language]/</directory>
</paths>
这个
XML文件是目录的结构,第一个是缺省的资源目录,第二个是设置的目录。
第二人生开发包提供,价格198元/套(含邮费)。
包括内容如下:
1.
《第二人生的源码分析》PDF文档。
2.
第二人生客户端源程序。
3.
2G
U
盘一个,主要用来拷贝源程序以及相关开发工具。
提供三个月的技术服务,
提供快速编译指导,
提供完整的书参考。
联系方式:
QQ: 9073204