已经有一段时间了,所以这并不全面。
字符集
Unicode 很棒,但你不能忽略其他字符集。Windows XP(英文)上的默认字符集是 Cp1252。在网络上,您不知道浏览器会向您发送什么(尽管希望您的容器能够处理大部分内容)。当您使用的任何实现中存在错误时,请不要感到惊讶。当字符集在机器之间移动时,它们可以与文件名进行有趣的交互。
翻译字符串
一般来说,翻译人员不是编码人员。如果您将源文件发送给翻译人员,他们会破坏它。字符串应该被提取到资源文件(例如Java 中的属性文件或Visual C++ 中的资源DLL)。应该为翻译者提供难以破解的文件和不会让他们破解的工具。
翻译人员不知道产品中字符串的来源。没有上下文就很难翻译字符串。如果您不提供指导,翻译质量就会受到影响。
在上下文的主题上,您可能会看到多次出现相同的字符串“foo”,并认为让 UI 中的所有实例都指向相同的资源会更有效。这是一个坏主意。在某些语言中,单词可能对上下文非常敏感。
翻译字符串需要花钱。如果您发布产品的新版本,则恢复旧版本是有意义的。拥有从旧资源文件中恢复字符串的工具。
应尽量减少字符串连接和手动操作字符串。在适用的情况下使用格式函数。
翻译人员需要能够修改热键。Ctrl+P是英文打印;德国人使用Ctrl+ D。
如果您的翻译过程需要有人随时手动剪切和粘贴字符串,那您就是在自找麻烦。
日期、时间、日历、货币、数字格式、时区
这些都可能因国家而异。逗号可用于表示小数位。时间可能是 24 小时制。不是每个人都使用公历。你也需要明确。如果您注意在您的网站上将日期显示为美国的 MM/DD/YYYY 和英国的 DD/MM/YYYY,除非用户知道您已经完成,否则这些日期是不明确的。
尤其是货币
类库中提供的 Locale 函数将为您提供当地货币符号,但您不能只在以美元表示价格的值前面加上英镑(英镑)或欧元符号。
用户界面
布局应该是动态的。不仅字符串在翻译时可能会加倍长度,而且整个 UI 可能需要反转(希伯来语;阿拉伯语),以便控件从右到左运行。那是在我们到达亚洲之前。
翻译前测试
- 使用代码的静态分析来定位问题。至少,利用 IDE 中内置的工具。(Eclipse 用户可以转到 Window > Preferences > Java > Compiler > Errors/Warnings 并检查非外部化字符串。)
- 通过模拟翻译进行冒烟测试。解析资源文件并将字符串替换为长度加倍并插入时髦字符的伪翻译版本并不难。您不必说一种语言就可以使用外国操作系统。现代系统应该允许您以具有翻译字符串和外国语言环境的外国用户身份登录。如果您熟悉您的操作系统,您可以在不知道该语言的一个单词的情况下弄清楚什么是什么。
- 键盘映射和字符集引用非常有用。
- 虚拟化在这里非常有用。
非技术问题
有时您必须对文化差异保持敏感(可能会导致冒犯或不理解)。您经常看到的一个错误是使用标志作为选择网站语言或地理位置的视觉提示。除非您希望您的软件在全球政治中表明立场,否则这是一个坏主意。如果您是法国人并且提供了带有圣乔治国旗的英语选项(英格兰国旗是白色区域上的红十字),这可能会导致许多说英语的人感到困惑 - 假设外语和国家也会出现类似的问题. 图标需要经过文化相关性的审查。竖起大拇指或绿色勾号是什么意思?语言应该是相对中性的——在一个地区以特定方式称呼用户可能是可以接受的,但在另一个地区被认为是粗鲁的。
资源
C++ 和 Java 程序员可能会发现 ICU 网站很有用:http: //www.icu-project.org/