如何使用动态数量的连词来定位句子?

时间:2011-09-16 14:02:57

标签: java android localization

假设我有一个句子,我根据从别人传入的数据动态形成。假设它是食物项目列表,例如:["apples", "pears", "oranges"]["bread", "meat"]。我想用这些句子形成一句话:“我喜欢吃苹果,梨和橘子”和“我喜欢吃面包和肉。”

这对于英语来说很容易做到,但我很确定连词在所有语言中的工作方式都不一样(实际上我打赌它们中的一些是完全不同的)。如何使用动态数量的项目本地化句子,以某种方式加入?

如果它有帮助,我正在为Android工作,所以你将能够使用它提供的任何库(或者一个用于Java的库)。

4 个答案:

答案 0 :(得分:1)

我会问母语人士您想要定位的语言。如果所有语言都使用相同的构造(除了最后一个元素之外的所有元素之间的逗号),那么只需构建一个逗号分隔的n - 1个元素列表,并使用外化模式并使用java.util.MessageFormat来构建整个句子用n - 1个元素字符串作为第一个参数,第n个元素作为第二个参数。您也可以将分隔符外部化(英文逗号),以便在需要时更灵活。

如果某些语言使用其他构造,则定义多个策略实现,外化策略名称以了解要用于给定语言环境的策略,然后请求相应的策略为您格式化列表。英语策略将使用上述算法。另一种语言的策略将使用不同的方式将元素连接在一起,但如果这些语言使用相同的构造但使用不同的单词,则可以使用外化模式将其重用于多种语言。

请注意,这是因为大多数程序都很简单地执行我喜欢的列表:面包,肉类

答案 1 :(得分:0)

问题当然是了解其他语言。如果没有找到目标语言的母语人士,我不知道你是如何准确地做到的。谷歌翻译是一个选项,但你仍然应该有人说这种语言校对它。

Android在Plurals字符串资源中具有此内置功能。 他们的文档提供了英语(res/valules/strings.xml)和另一种语言(放在res/values-pl/strings.xml)中的示例

有效数量:{zero, one, two, few, many, other}

他们的例子:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">One song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>

所以看起来他们的方法是使用比单个单词和复数更长的句子片段。

答案 2 :(得分:0)

非常困难。以法语为例:它使用每个名词前面的文章。你的例子是:

  

J'aime manger des pommes, des poires et des oranges。

或更好:

  

J'aime les pommes, les poires et les oranges。

(字面意思:我喜欢 苹果, 梨和 橙子。)

所以它不再仅仅是连词的问题。这是一个超越连词的不同语法规则的问题。毋庸置疑,其他语言可能引发完全不同的问题。

答案 3 :(得分:0)

遗憾的是,这几乎是不可能的。这是因为一方面的结合和另一方面的不同形式。英语没有这种区别,但很多(大多数?)其他语言都有。更糟糕的是,动词形式可能取决于以下名词(性别依赖形式和结合)。

我们倾向于使用事物列表,而不是这些好的句子,例如:

  

我想吃的东西清单:
  苹果
  梨
  橘子

我担心这是唯一合理的事情(变量,可修改列表)。