我有包含名称列表的字符串,如下所示:
“约翰向金、凯利、李和鲍勃询问了新年计划”。名单中的名字数量可以非常多。
我如何在 Java 中本地化它?
我正在考虑 ResourceBundle 和 MessageFormat。我将如何在 MessageFormat 中编写此模式?
有没有更好的方法?
本地化(内联)列表不仅仅是翻译单词“and”。 CLDR 处理格式化列表的问题,查看他们的列表页面 http://cldr.unicode.org/translation/lists。恐怕 ICU 还不支持这一点,所以你可能需要单独编码。
另一个问题是,您不能指望能够在这样的句子中使用名称。例如,许多语言要求物体呈倾斜形式。在芬兰语中,您的示例句子应为“John kysyi Kimiltä, Kellyltä, Leeltä ja Bobilta uudenvuoden suunnitelmista”。因此,您可能需要找出并包含名称的不同倾斜形式。此外,如果所使用的语言没有拉丁字母,您可能需要姓名的音译形式(例如,在阿拉伯语中,John 是 ר)。还有其他问题。在俄语中,与“询问”相对应的动词取决于主语的性别(例如,спросила 与 спросил)。
我知道这听起来很复杂,但本地化通常很复杂。如果您仅针对一组有限的语言,事情会容易得多,因此定义您的目标很重要 - 也许接受一些可能会导致语法错误的表达的简化。但对于涵盖多种语言的本地化,您可能需要对生成函数进行本地化。也就是说,对于每种语言,您将拥有一个接受名称列表作为参数并返回表示该语句的字符串的函数,可能使用包含有关专有名称的信息(音译形式、不同倾斜形式、性别)的资源文件,这些信息可能出现。
在某些情况下,您甚至可以考虑生成英语句子,然后将其发送给在线翻译器。例如,谷歌翻译可以处理我提到的一些问题。它肯定会产生很多错误的翻译,但对于语法结构非常简单的句子,如果您可以接受一定数量的错误,这可能是一个务实的解决方案。如果您考虑尝试此操作,请确保充分测试自动翻译器如何处理您将使用的特定句子。通常,您可以通过重新组织句子来改善结果。将包含多个子句的句子分成单独的句子通常会有所帮助。但即使是简单的句子也会导致自动翻译出现问题。
如果您可以重新表述句子结构,您可能会避免一些复杂的情况,例如:这样所有的名词都出现在主语位置,并且避免使用诸如“新年计划”之类的“拥挤”表达。例如,“约翰询问 Kim、Kelly、Lee 和 Bob 在新的一年有什么计划”对于自动翻译和基于模式的本地化来说都会更简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)