lltrans.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file lltrans.h
  3.  * @brief LLTrans definition
  4.  *
  5.  * $LicenseInfo:firstyear=2000&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2000-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_TRANS_H
  33. #define LL_TRANS_H
  34. #include <map>
  35. #include "llstring.h"
  36. #include "llxmlnode.h"
  37. /**
  38.  * @brief String template loaded from strings.xml
  39.  */
  40. class LLTransTemplate
  41. {
  42. public:
  43. LLTransTemplate(const std::string& name = LLStringUtil::null, const std::string& text = LLStringUtil::null) : mName(name), mText(text) {}
  44. std::string mName;
  45. std::string mText;
  46. };
  47. /**
  48.  * @brief Localized strings class
  49.  * This class is used to retrieve translations of strings used to build larger ones, as well as
  50.  * strings with a general usage that don't belong to any specific floater. For example,
  51.  * "Owner:", "Retrieving..." used in the place of a not yet known name, etc.
  52.  */
  53. class LLTrans
  54. {
  55. public:
  56. LLTrans();
  57. /**
  58.  * @brief Parses the xml root that holds the strings. Used once on startup
  59. // *FIXME  * @param xml_filename Filename to parse
  60.  * @param default_args Set of strings (expected to be in the file) to use as default replacement args, e.g. "SECOND_LIFE"
  61.  * @returns true if the file was parsed successfully, true if something went wrong
  62.  */
  63. static bool parseStrings(LLXMLNodePtr& root, const std::set<std::string>& default_args);
  64. static bool parseLanguageStrings(LLXMLNodePtr &root);
  65. /**
  66.  * @brief Returns a translated string
  67.  * @param xml_desc String's description
  68.  * @param args A list of substrings to replace in the string
  69.  * @returns Translated string
  70.  */
  71. static std::string getString(const std::string &xml_desc, const LLStringUtil::format_map_t& args);
  72. static bool findString(std::string &result, const std::string &xml_desc, const LLStringUtil::format_map_t& args);
  73. // Returns translated string with [COUNT] replaced with a number, following
  74. // special per-language logic for plural nouns.  For example, some languages
  75. // may have different plurals for 0, 1, 2 and > 2.
  76. // See "AgeWeeksA", "AgeWeeksB", etc. in strings.xml for examples.
  77. static std::string getCountString(const std::string& language, const std::string& xml_desc, S32 count);
  78. /**
  79.  * @brief Returns a translated string
  80.  * @param xml_desc String's description
  81.  * @returns Translated string
  82.  */
  83. static std::string getString(const std::string &xml_desc)
  84. {
  85. LLStringUtil::format_map_t empty;
  86. return getString(xml_desc, empty);
  87. }
  88. static bool findString(std::string &result, const std::string &xml_desc)
  89. {
  90. LLStringUtil::format_map_t empty;
  91. return findString(result, xml_desc, empty);
  92. }
  93.         static std::string getKeyboardString(const char* keystring)
  94.         {
  95.                 // These map directly - no need to specialize
  96.                 return getString( ll_safe_string(keystring) );
  97.         }
  98. // get the default args
  99. static const LLStringUtil::format_map_t& getDefaultArgs()
  100. {
  101. return sDefaultArgs;
  102. }
  103. // insert default args into an arg list
  104. static void getArgs(LLStringUtil::format_map_t& args)
  105. {
  106. args.insert(sDefaultArgs.begin(), sDefaultArgs.end());
  107. }
  108. private:
  109. typedef std::map<std::string, LLTransTemplate > template_map_t;
  110. static template_map_t sStringTemplates;
  111. static LLStringUtil::format_map_t sDefaultArgs;
  112. };
  113. #endif