Android允许翻译人员定义Plurals 以下示例适用于我的语言环境'en':

<plurals name="numberOfSongsAvailable">
    <item quantity="one">One song found.</item>
    <item quantity="other">%d songs found.</item>
</plurals>

但是为two添加特殊值不起作用,仍然采用other版本。 two用法是否依赖于语言环境? 因此,没有安卓只能坐two版本,如果语言环境明确指定,应该有一个two版本?

SO问题Android复数处理“零”在使用英语zero也发现同样的错误,这也是不支持的。 除了避免我想要避免的Android复数之外,这个问题没有解决方案。

===============>>#1 票数:10 已采纳

Android正在使用CLDR复数系统,这不是它的工作原理(所以不要指望这会改变)。

该系统在这里描述:

http://cldr.unicode.org/index/cldr-spec/plural-rules

简而言之,理解“一个”并不意味着数字1是很重要的。相反,这些关键字是类别,属于每个类别的特定数字n由CLDR数据库中的规则定义:

http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html

虽然似乎没有语言对0以外的任何东西使用“零”,但有些语言将0分配给“1”。 肯定有很多情况下“两个”包含其他数字而不仅仅是2。

如果Android允许您执行您的预期操作,则无法将您的应用程序正确地翻译成具有更复杂复数规则的任意数量的语言。

===============>>#2 票数:3

那是一个 老bug PluralRules类相关代码部分中只有一些缺少if子句。

\n

正如您在链接问题中的答案所述,使用 MessageFormat或其他方法会更好。 该错误已于2010年5月报告,我不希望在不久的将来修复该问题 (在这种情况下,旧版设备上仍然存在故障版本)

完全错误,请参阅评论。

===============>>#3 票数:2

是的,使用2是特定于区域设置。 仅仅因为你给它2号并不意味着它将使用quantity =“two”。 它仅对具有2号特殊情况的语言使用该数量

来自http://developer.android.com/guide/topics/resources/string-resource.html#Plurals

请注意,选择是基于语法上的必要性。 即使数量为0,也会忽略英语为零的字符串,因为0在语法上与2不同,或者除1以外的任何其他数字(“零书”,“一本书”,“两本书”等等)上)。 不要因为两个声音只能应用于数量2这一事实而被误导:一种语言可能要求2,12,102(等等)都被视为彼此相似但与其他不同数量。 依靠你的翻译来了解他们的语言实际上坚持的区别。

  ask by theomega translate from so

未解决问题?本站智能推荐:

2回复

具有多个参数的Android Plural字符串

在Android中的字符串,可以定义复数处理取决于供给所描述字符串的实际数量的翻译在这里 。 字符串还允许指定多个位置参数,类似于sprintf在许多语言中的作用。 但是,请考虑以下字符串: 它包含两个数字,我如何在Android中将其转换为复数? 所有示例始终仅使用单个参数。
1回复

如何使PoEdit从Symfony Translator组件中识别复数字符串

我有一个非Symfony PHP项目,在该项目中我想将Symfony Translate组件与MoFileLoader一起使用。 我已经安装了PoEdit,因此在解析文件以寻找翻译时,它可以识别trans(“ string”)函数。 这部分代码<?php echo $translato
1回复

JavaScript中的Symfony 2的多元化逻辑

Symfony与翻译包有很好的复数逻辑。 但是,我想将这个逻辑带到JavaScript,因为我正在从Ajax调用更新字符串。 是否有这样的“图书馆”可以做这样的事情?
1回复

如何在swift ios中将常规字符串占位符添加到已翻译的复数.stringdict中

我想在swift for iOS中使用plurar stringdict翻译这个字符串 住在%1 $ @ 住在%1 $ @ 使用一个没有占位符的简单复数,这要归功于这个问题但是当我添加一个字符串占位符时,我在访问时遇到了崩溃。 常规复数使用以下xml工作:
2回复

Symfony2具有特定规则的复数翻译(当数字以特定数字结尾时)

我正在尝试将结果计数转换为立陶宛语,并且有一些特定规则。 我将尽力解释它们: 所有计数均以零(0、10、20 ... 1050、1060 ...)和12至19(含12和19)(12 ... 19)结尾 所有计数以1结尾,但以11结尾(1、21、31 ... 1221、1231
1回复

如何在Android中表示复数资源中的负数

我想知道是否有任何简单的方法可以在Android中使用复数资源机制基于负数,零和正数来格式化整数? 我想要的答案是 如果getRemaining()<-1,则“ | getRemaining()|天前” 如果getRemaining()== -1,则“ | getR
1回复

如何使用Android数量字符串(复数)?

我试图在参考资料中使用getQuantityString方法来检索基于android开发人员指南的数量字符串(Plurals)数量字符串(Plurals) 我得到的错误是 当我设置复数如下 并尝试阅读如下 一种解决方法是将字符串分解为仅对字符串的最后部分使用复数并连
3回复

零数量忽略多个定义

我使用复数来编译Android应用程序的数量字符串。 我完全按照教程中的内容进行操作: res.getQuantityString( R.plurals.number_of_comments, commentsCount, commentsCount); 这是复数的定义: &
3回复

在法语中,复数系统将0视为“其他”而不是“一”

在res/values/strings.xml ,我有 在res/values-fr/strings.xml ,我有 使用英语语言环境res.getQuantityString(R.plurals.days_amount, 0, 0)返回: “0天” 这符合英
1回复

getQuantityString在实际设备上不起作用

我有一个奇怪的问题。 getQuantityString()方法适用于android studio模拟器,但不适用于实际设备。 这是我在strings.xml代码: 我的片段中的代码: 当我在模拟器上运行项目时,它可以工作。 但是如果在真实设备上运行,即使crimeSi