Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中本地化文本的最佳实践+;跨平台应用程序? 在当前C++标准(C++ 03)中,文本本地化的规范太少,这使得C++开发人员在使用本地化文本时的使用寿命比以往更难(当然,C++ 0x标准将在以后有所帮助)。 假设以下场景(来自真实的PC Mac游戏开发案例): 响应(实时)应用程序:应用程序必须将非响应时间降至“不明显”,因此执行速度非常重要 本地化文本:显示的文本本地化为两种以上的语言,可能更多-不要期望固定数量的语言,应该易于扩展 运行时定义的语言:文本不应该在应用程序中编译(也不应该每个语言有一个应用程序),您可以在应用程序启动时获得所选语言信息-这意味着某种文本加载 跨平台:应用程序的编码考虑到了跨平台(Windows-Linux/Ubuntu-Mac/OSX),因此本地化的文本系统也必须是跨平台的 独立应用程序:应用程序提供运行它所需的一切;它不使用任何环境库,也不要求用户安装操作系统以外的任何东西(比如大多数游戏) 什么是最佳的做法来管理本地化文本在C++中的这种应用程序?_C++_Localization - Fatal编程技术网

C+中本地化文本的最佳实践+;跨平台应用程序? 在当前C++标准(C++ 03)中,文本本地化的规范太少,这使得C++开发人员在使用本地化文本时的使用寿命比以往更难(当然,C++ 0x标准将在以后有所帮助)。 假设以下场景(来自真实的PC Mac游戏开发案例): 响应(实时)应用程序:应用程序必须将非响应时间降至“不明显”,因此执行速度非常重要 本地化文本:显示的文本本地化为两种以上的语言,可能更多-不要期望固定数量的语言,应该易于扩展 运行时定义的语言:文本不应该在应用程序中编译(也不应该每个语言有一个应用程序),您可以在应用程序启动时获得所选语言信息-这意味着某种文本加载 跨平台:应用程序的编码考虑到了跨平台(Windows-Linux/Ubuntu-Mac/OSX),因此本地化的文本系统也必须是跨平台的 独立应用程序:应用程序提供运行它所需的一切;它不使用任何环境库,也不要求用户安装操作系统以外的任何东西(比如大多数游戏) 什么是最佳的做法来管理本地化文本在C++中的这种应用程序?

C+中本地化文本的最佳实践+;跨平台应用程序? 在当前C++标准(C++ 03)中,文本本地化的规范太少,这使得C++开发人员在使用本地化文本时的使用寿命比以往更难(当然,C++ 0x标准将在以后有所帮助)。 假设以下场景(来自真实的PC Mac游戏开发案例): 响应(实时)应用程序:应用程序必须将非响应时间降至“不明显”,因此执行速度非常重要 本地化文本:显示的文本本地化为两种以上的语言,可能更多-不要期望固定数量的语言,应该易于扩展 运行时定义的语言:文本不应该在应用程序中编译(也不应该每个语言有一个应用程序),您可以在应用程序启动时获得所选语言信息-这意味着某种文本加载 跨平台:应用程序的编码考虑到了跨平台(Windows-Linux/Ubuntu-Mac/OSX),因此本地化的文本系统也必须是跨平台的 独立应用程序:应用程序提供运行它所需的一切;它不使用任何环境库,也不要求用户安装操作系统以外的任何东西(比如大多数游戏) 什么是最佳的做法来管理本地化文本在C++中的这种应用程序?,c++,localization,C++,Localization,去年我研究过这个问题,我唯一确定的是您应该使用std::wstring或std::basic_string来操作应用程序中的文本。我停止了我的研究,因为我正在更多地研究“文本显示”问题(在实时3D的情况下),但是我想在C++中有一些最好的方法来管理本地化的文本,而不仅仅是“使用Unicode”。 因此,欢迎提供所有最佳实践、建议和信息(我认为跨平台的做法很难做到) 就我所知,C++0x标准中不会有任何附加功能。我怀疑委员会认为这是第三方图书馆的事情。在一家小型视频游戏公司Black Lanter

去年我研究过这个问题,我唯一确定的是您应该使用
std::wstring
std::basic_string
来操作应用程序中的文本。我停止了我的研究,因为我正在更多地研究“文本显示”问题(在实时3D的情况下),但是我想在C++中有一些最好的方法来管理本地化的文本,而不仅仅是“使用Unicode”。
因此,欢迎提供所有最佳实践、建议和信息(我认为跨平台的做法很难做到)

就我所知,C++0x标准中不会有任何附加功能。我怀疑委员会认为这是第三方图书馆的事情。

在一家小型视频游戏公司Black Lantern Studios,我是一款名为Lionel Trains DS的游戏的首席开发者。我们本地化为英语、西班牙语、法语和德语。我们预先知道所有的语言,所以在编译时包含它们是唯一的选择。(你看,它们被烧成了ROM)

我可以给你一些我们做过的事情的信息。我们的字符串在启动时根据播放器的语言选择加载到数组中。每种语言都被放入一个单独的文件中,所有字符串的顺序都相同。字符串1始终是游戏的标题,字符串2始终是第一个菜单选项,依此类推。我们在
枚举
中键入数组,因为
整数
索引非常快,在游戏中,速度就是一切。(在另一个答案中链接的解决方案使用
string
查找,我倾向于避免这种情况。)在显示字符串时,我们使用
printf()
type函数将标记替换为值。“3次列车将驶离1号城市。”

现在来看一些陷阱

1) 不同语言之间,短语顺序完全不同。“3号列车驶离1号城市。”翻译成德语,后面是“从1号城市出发,3号列车驶离”。如果您使用的是类似于
printf()
的字符串是“火车%d驶离城市%d”。德国人最后会说“火车1驶离城市3”。这是完全错误的。我们通过强制翻译保留相同的词序来解决这个问题,但最终我们得到了一些非常糟糕的德语。若我再次这样做,我将编写一个函数,该函数接受字符串和一个从零开始的值数组。然后我会使用像
%0
%1
这样的标记,基本上将数组索引嵌入到字符串中Update:@Jonathan Leffler指出,兼容POSIX的
printf()
支持使用
%2$s
类型标记,其中
2$
部分指示
printf()
用第二个附加参数填充该标记。只要足够快,那就很方便了。自定义解决方案可能更快,因此您需要确保并测试两者。

2) 语言的长度差别很大。英语中有30个字符,德语中有时多达110个字符。这意味着它通常不适合我们正在安装的屏幕。这可能不是PC机和Mac游戏的关注点,但是如果你正在做任何文本必须匹配在一个定义框中的工作,你会想考虑这一点。为了解决这个问题,我们从我们的文本中删除了尽可能多的其他语言的形容词。这缩短了句子,但保留了意思,如果失去了一点味道。后来,我设计了一个应用程序,我们可以使用它来包含字体和方框大小,并允许翻译人员进行自己的修改,以使文本适合方框。不知道他们是否实施过。如果你有这个问题,你也可以考虑滚动文本区域。

3)对于跨平台的开发,我们为本地化系统编写了很多纯C++。我们编写了用于加载的自定义编码二进制文件,以及一个用于将CSV语言文本转换为

.h
的自定义程序,其中包含枚举和文件到语言的映射,以及每种语言的
.lang
。我们使用的最具体的平台是字体和printf()函数,但是您将拥有适合您开发的任何地方的东西,或者可以根据需要编写自己的东西。

我强烈反对公认的答案。首先,是关于使用静态数组查找来加速的部分