我正在为我们的网络应用程序开发多语言支持.我们在gettext库周围使用Django的助手.除了如何处理包含重要HTML标记的句子之外,一切都非常容易.这是一个简单的例子:
Please log in to continue.
以下是我能想到的方法:
更改链接以包括整个句子.无论在这种情况下改变是否是一个好主意,该解决方案的问题在于,当两者理想地独立时,UI变得依赖于i18n的需要.
将上面的整个字符串标记为翻译(包括格式).然后,翻译字符串也将直接包含HTML.这样做的问题是更改HTML格式需要更改所有翻译.
紧紧耦合多个翻译,然后使用字符串插值来组合它们.例如,可以单独标记短语"Please%s to continue"和"log in"进行翻译,然后合并."登录"已本地化,然后包装在HREF中,然后插入到翻译的短语中,这使%s保持翻译以标记链接应该去的位置.这种方法使代码复杂化并破坏了翻译字符串的独立性.
还有其他选择吗?其他人如何解决这个问题?
解决方案2就是您想要的.发送整个句子,嵌入HTML标记.
原因:
主要的翻译工具Trados可以保护标记免受翻译者的无意破坏.
即使标签的内容发生了变化(但标签的数量和它们在句子中的位置相同),Trados也可以自动翻译之前看过的文本.至少,翻译会给你一个很好的折扣.
样式是特定于语言环境的.在某些情况下,粗体在中文或日文中是不合适的,例如,斜体在东亚语言中较少使用.译者应该可以自由地保留或删除样式.
字顺序是特定于语言的.如果你将上面的句子分成片段,它可能适用于英语和法语,但是在中文或日语中,单词顺序在连接时不正确.因此,最好将整个句子外部化,而不是句子碎片.
2,具有潜在的扭曲.
你当然可以本地化整个字符串,如:
loginLink=Please log in to continue
但是,根据您的工具和本地化组,他们可能更愿意为您执行以下操作:
// tokens in this string add html links loginLink=Please {0}log in{1} to continue
这将是我的首选方法.如果您具有忽略某些字符的本地化工具,则可以使用不同的替换模式.例如
loginLink=Please %startlink%log in%endlink% to continue
然后在你正在使用的任何语言的jsp,servlet或等效语言中执行替换...
免责声明:我自己在软件国际化方面没有经验.
我不认为这在任何情况下都会好 - 只是引入了太多的耦合......
只要你在需要翻译的部分中保持稀疏格式,这可能没问题.为翻译人员提供重要特殊词汇的可能性(通过使他们成为链接或可能使用重点听起来像一个好主意.但是,那些带有(X)HTML的翻译可能无法在其他任何地方轻松使用.
这听起来像对我不必要的工作......
如果是我,我想我会采用第二种方法,但我会将URI放入格式化参数中,这样就可以更改,而无需更改所有这些翻译.
Please log in to continue.
你应该记住,如果你采用这种方法,你可能需要教你的译员基本的(X)HTML知识,这样他们就不会搞砸你的标记,以便他们知道他们写的那些文本会有什么期望.无论如何,这些额外的知识可能会导致更好的语义标记,因为如上所述,文本可以用(X)HTML进行翻译和注释,以反映本地的写作风格.