java - 本地化包含名称列表的字符串

标签 java localization

我有一个包含名称列表的字符串,如下所示: “约翰向金、凯利、李和鲍勃询问了新年计划”。列表中的名称数量可以非常多。 我如何在 Java 中本地化它? 我正在考虑 ResourceBundle 和 MessageFormat。我将如何在 MessageFormat 中为此编写模式? 有没有更好的方法?

最佳答案

本地化(内联)列表不仅仅是翻译“和”这个词。 CLDR 处理格式化列表的问题,查看他们的 page on lists .恐怕 ICU 还没有对此的支持,所以你可能需要单独编码。

另一个问题是您不能指望能够在这样的句子中使用名称本身。例如,许多语言要求对象呈倾斜形式。在芬兰语中,您的例句可以读作“John kysyi Kimiltä, Kellyltä, Leeltä ja Bobilta uudenvuoden suunnitelmista”。因此,您可能需要找出并包含名称的不同倾斜形式。此外,如果使用的语言没有拉丁字母表,您可能需要名称的音译形式(例如,在阿拉伯语中,John 是ìون)。还有其他问题。在俄语中,与“询问”相对应的动词取决于主语的性别(例如,спросила 与 спросил)。

我知道这听起来很复杂,但本地化通常很复杂。如果你只针对一组有限的语言,事情会容易得多,所以定义你的目标很重要——也许接受一些可能导致语法错误表达的简化。但是对于覆盖范围广泛的语言的本地化,您可能需要将生成函数本地化。也就是说,对于每种语言,您将拥有一个函数,该函数接受名称列表作为参数并返回表示语句的字符串,可能使用包含有关专有名称的信息(音译形式、不同倾斜形式、性别)的资源文件,这些信息可能出现。

在某些情况下,您甚至可以考虑生成英文句子,然后将其发送给在线翻译人员。例如,谷歌翻译可以处理我提到的一些问题。它肯定会产生很多错误的翻译,但对于语法结构非常简单的句子,如果你能接受一些错误,它可能是一个实用的解决方案。如果您考虑尝试这样做,请确保您充分测试了自动翻译器如何处理您将使用的特定句子。通常,您可以通过重新组织句子来改善结果。将包含多个从句的句子分成单独的句子通常会有所帮助。但即使是您的简单句子也会导致自动翻译出现问题。

如果您可以重新组织句子结构,您可能会避免一些复杂情况,例如这样所有的名词都出现在主语位置,并且避免像“new year plans”这样“打包”的表达方式。例如,“John 问 Kim、Kelly、Lee 和 Bob 新年有什么计划”对于自动翻译和基于模式的本地化来说都会更简单。

关于java - 本地化包含名称列表的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447942/

相关文章:

java - Android Studio 添加 rxjava 库

Java 正则表达式 : Cannot match angular brackets

java - 在java中转义javascript字符串

java - 如何从 DateFormat 中删除 SECONDS 字段

c# - 本地化 resx 文件中资源字符串的参数

ios - 应用程序如何将存储的通知显示为本地化字符串?

java - ThreadLocal 类的目的和用途?

java - 神秘持久的 ClassNotFoundException(主要 Activity )

eclipse - Lint : How to ignore "<key> is not translated in <language>" errors?

c# - 每个表单/其他字符串仅使用 1 个资源文件而不是 1 个资源文件