我的字符串中包含如下名称的列表:"John向Kim,Kelly,Lee和Bob询问了新年计划".列表中的名称数量非常多.我如何在Java中本地化?我正在考虑ResourceBundle和MessageFormat.我将如何在MessageFormat中为此编写模式?有没有更好的方法?
Juk*_*ela 13
本地化(内联)列表不仅仅是翻译单词"和".CLDR处理格式化列表的问题,查看列表中的页面.我担心ICU还没有支持,所以你可能需要单独编写代码.
另一个问题是你不能指望能够在这样的句子中使用这样的名字.例如,许多语言要求对象处于倾斜形式.在芬兰语中,您的样本句子将为"JohnkysyiKimiltä,Kellyltä,LeeltäjaBobilta uudenvuoden suunnitelmista."因此,您可能需要找出并包含不同倾向形式的名称.此外,如果使用的语言没有拉丁字母,您可能需要音译形式的名称(例如,阿拉伯语,约翰是جون).还有其他问题.在俄语中,对应于"问"的动词取决于主语的性别(例如,спросила与спросил).
我知道这听起来很复杂,但本地化往往很复杂.如果你只针对一组有限的语言,事情就会容易得多,所以定义你的目标很重要 - 也许接受一些可能导致语法不正确的表达的简化.但是对于涵盖广泛语言的本地化,您可能需要使生成函数本地化.也就是说,对于每种语言,您将拥有一个函数,该函数接受名称列表作为参数并返回表示该语句的字符串,可能使用包含有关可能名称的信息的资源文件(音译形式,不同的倾斜形式,性别).出现.
在某些情况下,您甚至可以考虑用英语生成句子,然后将其发送给在线翻译.例如,谷歌翻译可以处理我提到的一些问题.它肯定会产生错误的翻译,但对于语法结构非常简单的句子,如果你能接受一些错误,它可能是一个实用的解决方案.如果您考虑尝试这一点,请确保您充分测试自动翻译器如何处理您将使用的特定句子.通常,您可以通过重新构造句子来改善结果.将具有多个条款的句子分成单独的句子通常会有所帮助.但即使是简单的句子也会导致自动翻译出现问题.
如果你可以重新构造句子结构,你可以避免一些并发症,例如,所有名词都出现在主题位置,你避免像"新年计划"这样的"包装"表达.例如,"约翰问金,凯利,李和鲍勃在新的一年里"会更简单,无论是自动翻译还是基于模式的本地化.
你可以这样做:
"{0} asked {1} about the new year plans"
Run Code Online (Sandbox Code Playgroud)
其中 0 是第一个名称,1 是其他名称的逗号分隔列表。
希望这可以帮助。