【移动开发】plurals

本文详细介绍了Android中数量字符的用法,包括单数和复数的区别、语法要求及如何通过getQuantityString()方法选择合适的资源。此外,文章还讨论了不同语言对数量的语法规定,并提供了关于避免使用数量字符的建议。
不同的语言对数量的语法规定有不同的规则。在英语里面,例如,1是特例。我们会直接写1book,而针对一个以上的我们会在book后加复数形式。这种区别对单数和复数来说是很普遍的,但是其他的语言做了更好的区分。对Android来说,它支持zero,one,two,few,many,和other。

 

    对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适的资源。

    尽管历史上称为“数量字符”(在API里面还是这样称呼),数量字符应该仅仅用于plurals.如果把它用来解释当有未读邮件时,Gmail的Inbox为Inbox(12)这样的事情是不正确的。看起来,使用数量字符比使用if语句更方便,但是需要看到有些语言(例如中文)根本没有语法区别,所以你会一直得到other字符。[不懂]

    选择使用哪个字符,唯一的取决于语法的要求。在英语里面,对零的字符将会被忽略,尽管数字是0,因为0从语法上来说跟2没有什么区别,其他数字也是一样,除了1("zero books","one book","two books",等等)

    不要误认为,two sounds应该针对数字2:一种语言或许要求2,12,102等等都是一样的,但是跟别数字又不一样。取决于你的翻译者知道他们语言的真正区别。

    It's often possible to avoid quantity strings by using quantity-neutral formulations such as "Books: 1". 如果你在你的应用里面保持这样的风格,这样将让你和你的翻译者的生活更简单。

Note:一个plural集合是一个简单的资源,它可以通过name的属性来访问(不是xml文件的name)。这样,你可以把plural资源和其他的简单资源一样放在同一个xml 文件里面,在同一个<resoures>节点下。 

    文件位置:

          res/values/filename.xml

          filename 是任意的。<plurals>节点的name将被作为resource ID.

    资源访问:

          在java里面:R.plurals.plural_name

     语法:

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <plurals  
  4.         name="plural_name">  
  5.         <item  
  6.             quantity=["zero" | "one" | "two" | "few" | "many" | "other"]  
  7.             >text_string</item>  
  8.     </plurals>  
  9. </resources>  


      节点:

         <resources>

               必须的节点。必须为根节点。

               没有属性。

<plurals>
   字符串的集合,提供取决于某类事物个数的字符串。包含一个或者多个<item>节点

      属性: 

      name 字符串. A name for the pair of strings.这个name将被作为resource ID。

<item>

      一个复数或者单数字符串。它的值可以是对其他字符串资源的一个引用。必须是<plurals> 的子节点。必须知道不要撇号和引号。可以参考下面的例子。

      属性:

      quantity

          关键字.这个值反应了什么时候这个字符该被使用。正确的值,在括号里面有不详尽的例子:
ValueDescription
zero当语言需要特别对待0时(就想阿拉伯)
one当语言需要特别对待1(就像英语里和其他语言里的1;在russian,任何以1结尾但是不是以11结尾的也使用这种情况)
two当语言需要特别对待1(例如Welsh的2,或者Slovenian的102)
few当语言需要特别对待small(例如Czech的2,3,4;或者以2,3,4结尾但是不是12,13,14的Polisth)
many当语言需要特别对待large(例如Maltese的11-99)
other当语言没有要求对特定资源进行特殊对待(例如中国的所有数字,或者英语的42
          例子:                  xml文件保存在res/values/strings.xml

           

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



在 Android 数据绑定(Data Binding)框架中,`@plurals` 注解用于处理复数形式的资源绑定,这在多语言支持中非常常见。通过 `@plurals`,开发者可以在布局文件中直接引用 `res/values/` 目录下的 `plurals.xml` 文件中定义的复数资源,并根据传入的数值动态选择合适的复数形式。 ### 使用方式 在 XML 布局文件中,可以通过如下方式使用 `@plurals`: ```xml <TextView android:text="@{@plurals/banana(bananaCount)}" ... /> ``` 在该示例中,`banana` 是定义在 `plurals.xml` 文件中的一个复数资源名称,而 `bananaCount` 是一个变量,用于决定使用哪个复数形式。数据绑定框架会根据 `bananaCount` 的值自动选择合适的复数形式[^2]。 ### 定义复数资源 在 `res/values/` 目录下的 `plurals.xml` 文件中定义复数资源,例如: ```xml <plurals name="banana"> <item quantity="one">1 banana</item> <item quantity="other">%d bananas</item> </plurals> ``` 对于不同的语言和复数规则,可以在其他 `res/values-xx/` 目录中定义相应的 `plurals.xml` 文件。例如,在法语中,复数规则与英语不同,因此可能需要为法语环境定义不同的 `plurals.xml` 文件。 ### 在 Java/Kotlin 代码中绑定变量 在代码中,需要为布局绑定设置变量值。例如,在 Activity 或 Fragment 中: ```java MyLayoutBinding binding = DataBindingUtil.setContentView(this, R.layout.my_layout); binding.setBananaCount(5); ``` 在该示例中,`setBananaCount` 方法是根据布局文件中定义的变量名自动生成的 setter 方法。 ### 支持不同语言环境 Android 会根据设备的语言和区域设置自动选择合适的复数资源。例如,在英语环境中,当 `bananaCount` 为 1 时,会显示 `"1 banana"`;当 `bananaCount` 为 2 或更大时,会显示 `"%d bananas"`。而在其他语言环境中,Android 会根据该语言的复数规则选择合适的条目[^3]。 ### 注意事项 - 确保 `plurals.xml` 文件中定义的复数资源名称与布局文件中使用的名称一致。 - 在布局文件中引用 `@plurals` 时,必须传递一个整数类型的变量作为参数。 - 如果需要支持多种语言,应为每种语言提供对应的 `plurals.xml` 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值