Localization 源代码不是英语;向用户显示哪种(自然)语言?

Localization 源代码不是英语;向用户显示哪种(自然)语言?,localization,internationalization,Localization,Internationalization,我正在为一个用德语编写的程序创建一个英语翻译(即tr(“…”)中的所有字符串都是德语)。在非英语非德语地区的用户可能希望看到英语翻译,但使用现在的程序,他们将看到德语 有一些方法可以解决此问题: 检查是否是德语区域设置,否则强制使用英语 向用户提供一个选项 让程序员把源代码改成英语 在源代码不是英语的情况下,国际化的最佳实践是什么?我认为最好的选择是询问用户(可能在安装过程中) 将源代码更改为英语成本太高,不值得。我住在巴西,我们有大量葡萄牙语代码,翻译成英语一次也不需要(我们为说英语的人制

我正在为一个用德语编写的程序创建一个英语翻译(即tr(“…”)中的所有字符串都是德语)。在非英语非德语地区的用户可能希望看到英语翻译,但使用现在的程序,他们将看到德语

有一些方法可以解决此问题:

  • 检查是否是德语区域设置,否则强制使用英语
  • 向用户提供一个选项
  • 让程序员把源代码改成英语

在源代码不是英语的情况下,国际化的最佳实践是什么?

我认为最好的选择是询问用户(可能在安装过程中)

将源代码更改为英语成本太高,不值得。我住在巴西,我们有大量葡萄牙语代码,翻译成英语一次也不需要(我们为说英语的人制作软件)。除非你有一个客户要求你这样做(通常是在你出售源代码的时候)


希望有帮助

这是两个独立的问题

最佳实践是在源代码中不使用任何类型的硬编码字符串。 字符串应存储在外部文件中,并按ID加载

但你所拥有的并不是最好的做法。可能要做太多的工作才能到达那里

你所描述的(tr(“…”)东西)听起来像gettext(或类似的东西)。 gettext(和类似的库)的方法是“源代码中的内容是最终的回退”,如果所需语言的字符串不存在,则使用该方法

在本例中,我将使用“向用户提供一个选项” 你不能假设用户懂英语


真实的例子:在瑞士,官方语言是意大利语、德语、法语和罗马语。如果我要法语,但它不存在,那么下一个最好的选择可能是德语,而不是英语。我加拿大的官方语言是法语和英语,因此如果我想说法语,但不可用,下一个最好的选择可能是英语。

好的,所以我想有三种选择:

用翻译后的字符串重新编译程序。
这是充满危险的,因为你最终会得到源代码的两个副本。其中一个中的Bug修复需要在另一个中完成。然后,如果你需要法语怎么办?意大利人西班牙语?这种方法的唯一优点是,对于非开发人员来说,完成这项工作是可行的。(差不多。)

从字符串中提取资源,并自动检查加载的UI区域设置。
在这里,字符串替换为
GetResource(“key”)
或类似内容。加载时,程序会自动转换为用户的文化。这可能行得通,但我知道很多说德语的人的电脑上安装了英语文化,但他们在某些时候更喜欢德语程序

从字符串中提取资源,并在加载时为用户提供选择
一般来说,最好让用户控制。这可能是加载时的提示,但如果经常使用应用程序,这可能会很麻烦。也许平衡点是在安装过程中询问用户的偏好,然后在对话框中提供一个选项,以便以后更改此设置


顺便说一下,请注意,翻译不是本地化。例如:德国的数字格式(如1.233,44)与英语(如1233.44)有很大不同。图标之类的东西往往具有民族特色。

我不太明白这个问题。这三件事有什么不同的选择?您可以通过编程方式解决它,也可以向用户提供一个选项?后者不需要前者吗?源代码不使用英语意味着什么?源代码从来不是用英语编写的——它是用C、Delphi或Java之类的语言编写的。你的意思是他们硬编码的外国字符串?使用的语言(如自然语言)是德语而不是英语。谢谢Chuck。我编辑了一下以澄清一下。