网站开发属于什么模式/西安今日头条新闻
有些开发人员几乎从未接触过软件标签翻译,有些则每天进行。 它无疑有助于在一个国家使用多种语言(官方或事实上)的工作。
即使是在第一种情况下,也可以将属性文件中的标签外部化。 至于第二种情况,语言通常是相关的。
在Java中,整个标签转换机制是通过属性文件的层次结构来处理的。 层次结构的顶部是根文件,第二级是特定于语言的文件,最后是最底下的国家/地区文件(让我们忘了较低的级别,因为我已经有15年没有使用它们了)。 消息字符串的翻译是沿着特定的区域搜索的,从最特定的国家(直到国家)一直到根。 如果找到任何级别的翻译,则解析机制将在那里停止并返回标签。
作为一个简单的示例,让我们看一个简单的用例,在列表上显示项目数。 我可能需要3个标签:
- 找不到项目
- 找到一项
- 找到多个项目
这可能是生成的messages.properties文件:
result.found.none=No item found
result.found.one=One item found
result.found.multiple={0} items found
当客户希望在初始发行后将软件翻译成不相关的语言时,事情会变得很有趣。 我们不深入探讨基于象形文字的语言(例如普通话中文)或RTL语言(例如阿拉伯语),而是使用俄语(我正在尝试学习的语言)(强调尝试)。
俄语是一种带有个案的语言,例如拉丁语。
格是一种语法类别,其值反映了短语,从句或句子中名词或代词所执行的语法功能。 在某些语言中,名词,代词及其修饰语会根据其所处的情况而采用不同的变形形式。
常见的情况包括主格,宾格,和格和格。 这些语言之一按大小写标记的角色通常会使用介词用英语标记。
那么,有什么大惊小怪的呢? 只需翻译文件并完成即可! 好吧,俄语是一种有趣的计数语言。 如果使用1,则使用2到4的单数,使用复数和主格,但是从5开始,使用复数和和格–表示数量。
现在,密钥将如下所示(消息本身并不是很重要):
- result.found.none
- 结果找到一个
- result.found.twotofour
- 结果发现五
现在可以翻译吗? 不完全的。 俄语源自旧斯拉夫语,而旧斯拉夫语具有三个语法数字:单数,复数和对偶。 俄语只有单数和复数形式,但对于女性而言,这是一个剩余的数字。 在这种情况下,您将使用две而不是два。
这需要以下键:
- result.found.none
- 结果找到一个
- 结果发现两个女性
- 结果发现两个女人味
- 结果三三四
- 结果发现五
这仅适用于我所知道的事情。 恐怕还有比我不知道的更多的规则。
这里有两课要学习:
- 翻译不是简单明了的,尤其是当目标是具有不同根源的语言时。
- i18n比翻译要庞大,难得多。 考虑一下日期:月或日应该放在第一位吗? 而l10n比i18n更大,更难。
- 翻译的成本不为零,并且可能会高于预期。 估算很难,而且在大多数情况下都是错误的。
- 永远不要承担任何责任。 隐式对软件项目不利...
翻译自: https://blog.frankel.ch/software-labels-translation-not-easy/