假设我有一个句子,我根据从别人传入的数据动态形成。假设它是食物项目列表,例如:["apples", "pears", "oranges"]
或["bread", "meat"]
。我想用这些句子形成一句话:“我喜欢吃苹果,梨和橘子”和“我喜欢吃面包和肉。”
这对于英语来说很容易做到,但我很确定连词在所有语言中的工作方式都不一样(实际上我打赌它们中的一些是完全不同的)。如何使用动态数量的项目本地化句子,以某种方式加入?
如果它有帮助,我正在为Android工作,所以你将能够使用它提供的任何库(或者一个用于Java的库)。
答案 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)
遗憾的是,这几乎是不可能的。这是因为一方面的结合和另一方面的不同形式。英语没有这种区别,但很多(大多数?)其他语言都有。更糟糕的是,动词形式可能取决于以下名词(性别依赖形式和结合)。
我们倾向于使用事物列表,而不是这些好的句子,例如:
我想吃的东西清单:
苹果
梨
橘子
我担心这是唯一合理的事情(变量,可修改列表)。