编写国际化软件的最佳实践(i18n)

11

我希望能够听取国际上编写过软件的专家们的意见。我想了解人们在每个逻辑软件层面(数据(关系型数据库),业务(中间件),用户界面)上采用的最佳实践。

感谢您提供的任何帮助。


为了回答你的问题,你应该读几本书,但即使如此也不足够。有太多的事情需要考虑了。我建议你支付一些具有i18n工作知识的人来为你评估你的软件。 - sorin
6个回答

9

数据

  • 当你转换到UTF-8编码时,需要准备好每个字符占用多达3个字节(如中文),这意味着VARCHAR(20)现在需要变成VARCHAR(60)。
  • 除非你真的有充足的理由,否则请不要把用户界面翻译存储在数据库中。

业务

  • 花费大量时间在需求上。作为起点,对你的应用程序中的每个屏幕截取屏幕截图,放到一个文档中,并开始为需要i18n支持的内容划分方框。然后将这些方框映射到需要更改的代码区域。

用户界面

不要

string foo = "Page " + currentPage + " of " + totalPages;

string foo = string.Format("Page {0} of {1}", currentPage, totalPages);

为什么?词序很重要。
<value>Page {0} of {1}</value>
 <value>{1}ページ中の第{0}ページ</value>

在用户界面中没有什么是神圣的 即使像正数显示绿色,负数显示红色这样基本的东西也是公平竞争的对象


2
VARCHAR的定义取决于数据库。例如,MySQL计算的是字符而不是字节。此外,“+1”针对单词顺序也是正确的。 - Michael Madsen
实际上,这两个例子都会失败,因为单词顺序仍然由字符串块定义,而不是本地化源,参数是无关紧要的。 - Russ Clarke
1
@Russ,显然字符串应该外部化。我只是为了举例说明才把它放在里面。 - Mike Sickler
你能说一下你的例子中使用的是哪种语言吗? <value>{0}页(共{1}页)</value> 谢谢。 - bialix

5

确保UI控件有足够的空余空间。当从英语翻译成法语或德语等其他语言时,文本往往会变得更长。

尽管它在国际化(i18n)方面更注重Windows方面,但请注意Michael Kaplan的博客。他在这个领域非常熟练,并发布了许多包含通用信息的博客文章,非常有用。


+1 提及 Michael Kaplan 的博客 - 这个人是国际化的宝库。 - McDowell

4

这个主题可以写一本书。

在所有层面上,不要做出以下方面的假设:

  • 文本宽度
  • 文本方向性
  • 自然语言的分词
  • 货币(格式、小数精度、税收等)
  • 语法和拼写
  • 字母表
  • 数字系统和格式
  • 排序顺序
  • 日期、时间、时区和日历
  • 社交习俗或文化参考(图标、旗帜等)
  • 搜索
  • 大写
  • 地址
  • 姓名(名字/姓氏等)
  • 电话号码
  • 法律/监管要求
  • 社会保障号码或其他地方惯例的使用

我相信我只是触及了表面。


2

Unicode(或等价于<所选语言>的wchar)应该被普遍采用。不要将标签存储在数据库中。要准备好允许文本和控件从“错误的方向”即从右到左。


2

对于本地化,不要硬编码UI字符串。使用类似gettext的东西。


0

如果您正在使用 .Net,资源文件 (.resx) 系统非常灵活。

查找 ResourceManager.GetString("string name", CultureInfo) 的用法。

我们成功地在英语、德语、法语、西班牙语、俄语和阿拉伯语之间切换使用此系统。

此外,在考虑在外国区域使用时,花些时间查看输入和输出;土耳其问题 是不同输入可能会导致问题的一个很好的例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接