生产环境中真正会出问题的文件格式
软件本地化看似简单,直到实际交付时才会发现问题。团队编写en.json时往往假设西班牙语、德语和阿拉伯语会遵循同样的路径。实际情况并非如此。每种文件格式都有特殊之处,会导致准备不足的机构在构建时出错。经过14年和数千次SaaS发布的经验,我们总结了即使是成熟工程团队也会遇到的常见问题。
JSON、YAML与撇号问题
纯JSON不支持注释和复数形式——英语可以应付,但一旦译员添加弯引号(' vs ')、法语标点周围的窄不间断空格或德语书名号(»、«),脆弱的JSON解析器就会在生产环境中崩溃。法语译员使用正确的排版撇号书写L'application能通过语言质量检查,却会破坏脆弱的JSON解析器。我们在导入时规范撇号,验证UTF-8 BOM是否存在,并在任何语言环境交付前进行语法检查。
Android strings.xml:隐蔽的转义
Android将撇号存储为\',将&符号存储为&。译员经常粘贴Microsoft Word的弯引号,外观相同但实际不同——直到运行时布局渲染出乱码。我们对Android资源使用自定义XLIFF往返流程,译员无需接触原始XML,导出时自动重新转义。
iOS .strings和.stringsdict
经典问题是复数规则。iOS通过.stringsdict使用CLDR复数类别(zero、one、two、few、many、other)。不熟悉的译员会将文件视为一对一翻译并丢失复数变体——您的德语应用随后会显示"1 Nachrichten"(语法错误)。我们使用复数感知编辑器,根据目标语言环境的要求显示每个CLDR类别,如果任何类别缺失则拒绝导出。
.NET .resx和Java .properties
.resx接受XML注释和嵌入式代码引用;.properties默认使用ISO-8859-1(现代工具链支持UTF-8,但错误的组合仍会输出\uXXXX转义序列,令译员困惑)。我们在导入时强制使用UTF-8,仅在构建时生成原生转义序列。
XLIFF往返流程
只要可能,我们将源文件提取为XLIFF 1.2或2.0,在编辑器内翻译并附带上下文,然后重新合并。这让译员能看到源注释、截图和约束条件(字符限制、ICU复数形式、RTL镜像标志),而无需接触源文件。构建管线将内容合并回开发人员提交的格式。