Localization 设计非特定语言应用程序,例如本地化规划

Localization 设计非特定语言应用程序,例如本地化规划,localization,internationalization,Localization,Internationalization,创建此社区wiki:3 我正在开发一个基本的RPG,从一开始我的目标之一就是确保我的程序是非特定语言的。基本上,在我设计或开始编程任何菜单之前,我想确保我可以用支持的语言加载和显示它们,这样我就不会硬编码值 (这将使我免于沿途的多次迁移) 对于这个例子,让我们使用西方的从左到右的语言。英语、西班牙语、德语、法语、意大利语 这是我所拥有的基本示例。 一个XML文件包含会话的映射和设计 <conversation> <dialog>line1</dialog> &

创建此社区wiki:3

我正在开发一个基本的RPG,从一开始我的目标之一就是确保我的程序是非特定语言的。基本上,在我设计或开始编程任何菜单之前,我想确保我可以用支持的语言加载和显示它们,这样我就不会硬编码值

(这将使我免于沿途的多次迁移)

对于这个例子,让我们使用西方的从左到右的语言。英语、西班牙语、德语、法语、意大利语

这是我所拥有的基本示例。
一个XML文件包含会话的映射和设计

<conversation>
<dialog>line1</dialog>
<dialog>line2</dialog>
</conversation>

第1行
第2行
其他XML文件包含这些定义

<mappings language="English">
<line1>This is line 1 in English!</line1>
<line2>Other lines are contained in language-separated xml files</line2>
</mappings>

这是英语的第一行!
其他行包含在语言分隔的xml文件中
呵呵。这将非常有效,除了我忘了英语不为单词指定性别,而其他语言会这样做。所以,如果一句话用英语就足够了,我可能需要用其他语言的两句话,一句话涵盖masuline时态,另一句话涵盖女性时态

解决这个问题最有效的方法是什么?现在,我考虑了使用不同的映射表,一个用于男性时态句子,而另一个表仅用于女性时态。或者只是阅读不同的定义表

另一个踢球者将基于我的游戏数据设计。我从未想过,但我可能需要在我的游戏项目和角色中存储它们的性别,这样我才能使用正确的句子。然而,其他语言也有他们自己的特殊怪癖,我也需要考虑(尽管谢天谢地,从我所知道的意大利语和西班牙语比较相似,法语也可能类似)。 所以,很明显,这是摆在我面前的一项艰巨任务。我还应该考虑哪些其他设计因素?现在,我认为静态类是最简单的。在启动时配置所选的语言,输入并希望得到一个字符串


任何想法(想四处传播:p)

对于性别,你可以尝试鼓励译者使用非性别特定的翻译(这在商业应用中通常是可能的,但在这里可能是不可能的)


您可能在其他地方也遇到了这个问题。其他(非英语)语言有多种复数形式。例如:“你的团队获得了2把剑”。不管你会收到多少把剑,不管是5把还是1000把,在英语中,你总会得到一个复数句。但在许多语言中,情况并非如此。

有两种方法可以解决这一问题:暴力和试图变得聪明。暴力意味着写下每一行,并将其包含在XML文件中。这是一个很大的工作,但它会工作

试图变得聪明会很快进入深水区,特别是当你试图覆盖很多语言的时候

你需要保留更多关于角色的信息,而不是性别。例如,在俄语中,根据你是非正式的还是正式的(或与多人交谈),有不同的词表示“你”,动词结尾也不同。根据礼节的不同,“请把面包递给我”有不同的翻译。在其他语言中,翻译是否正确取决于社会地位

正如pawel_dyda指出的那样,存在单数、复数以及可能的双格的问题。其他语言也使用不同的词序:“箭头每个都是X铜币,所以要买Y箭头你需要Z银币”可能需要你记录数字的顺序

VisualC++和MFC附带的国际化设施实际上非常好。您可以将字符串保存在资源文件中,并且可以在中替换数字等,同时保持不同语言的顺序正确


在web上查找“国际化”(通常缩写为“i18n”)。外面有很多东西。

谢谢。我计划在一个资源文件中包含字符串,并在每个字符串中硬编码变量,以使approp。数字将发生#N1#,#S1#等等。