您的位置:首页 > 其它

第二人生的源码分析(八十)界面语言的选择

2008-06-04 20:51 369 查看
随着全球化的发展,地球变得平坦了。我有一个同事现在还在美国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
MSN: caimouse1976@sina.com
EMAIL: ccaimouse@gmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: