精华内容
下载资源
问答
  • Android plurals

    2014-03-31 18:36:18
    http://stackoverflow.com/questions/5651902/android-plurals-treatment-of-zero ... plurals Android中plurals表示单复数,但是对于0是不起作用的,比如 Fr


    http://stackoverflow.com/questions/5651902/android-plurals-treatment-of-zero

    https://code.google.com/p/android/issues/detail?id=8287

    plurals

    Android中plurals表示单复数,但是对于0是不起作用的,比如

      <plurals name="leaderboard_community_hero_free">
        <item quantity="zero">Free</item>
        <item quantity="other">Free(%d)</item>
      </plurals>
    
      getQuantityString(R.plurals.leaderboard_community_hero_free, quantity, quantity)


    对于quantity为0,结果是不正确的。解决方式是:

    <string name="leaderboard_community_hero_free">{0,choice,0#Free|0<Free({0})}</string>
    MessageFormat.format(getSherlockActivity().getString(R.string.leaderboard_community_hero_free), number)


    测试例子:

    String fmt = "{0,choice,0#No items|1#One item|1<{0} items}";
    System.out.println(MessageFormat.format(fmt, 0));
    System.out.println(MessageFormat.format(fmt, 1));
    System.out.println(MessageFormat.format(fmt, 2));
    System.out.println(MessageFormat.format(fmt, 6));
    System.out.println("=============");
    fmt = "{0,choice,0#items|0<item({0})}";
    System.out.println(MessageFormat.format(fmt, 0));
    System.out.println(MessageFormat.format(fmt, 1));
    System.out.println(MessageFormat.format(fmt, 2));
    System.out.println(MessageFormat.format(fmt, 6));
    System.out.println("=============");
    ChoiceFormat form = new ChoiceFormat(
          "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
    System.out.println(form.format(0));
    System.out.println(form.format(1));
    System.out.println(form.format(2));
    System.out.println(form.format(3));
    System.out.println("=============");
    fmt = "0#No items|1< {0} items";
    form = new ChoiceFormat(fmt);
    System.out.println(form.format(0));
    System.out.println(form.format(1));
    System.out.println(form.format(2));

    输出结果:

    No items
    One item
    2 items
    6 items
    =============
    items
    item(1)
    item(2)
    item(6)
    =============
    is zero or fraction 
    is one 
    is two 
    is more than 2.
    =============
    No items
    No items
     {0} items


    文档

    http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html

    http://docs.oracle.com/javase/6/docs/api/java/text/ChoiceFormat.html


    更多的例子

    Here is a more complex example, with a pattern format:

     double[] filelimits = {0,1,2};
     String[] filepart = {"are no files","is one file","are {2} files"};
     ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
     Format[] testFormats = {fileform, null, NumberFormat.getInstance()};
     MessageFormat pattform = new MessageFormat("There {0} on {1}");
     pattform.setFormats(testFormats);
     Object[] testArgs = {null, "ADisk", null};
     for (int i = 0; i < 4; ++i) {
         testArgs[0] = new Integer(i);
         testArgs[2] = testArgs[0];
         System.out.println(pattform.format(testArgs));
     }
     

    Specifying a pattern for ChoiceFormat objects is fairly straightforward. For example:

     ChoiceFormat fmt = new ChoiceFormat(
          "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");
     System.out.println("Formatter Pattern : " + fmt.toPattern());
    
     System.out.println("Format with -INF : " + fmt.format(Double.NEGATIVE_INFINITY));
     System.out.println("Format with -1.0 : " + fmt.format(-1.0));
     System.out.println("Format with 0 : " + fmt.format(0));
     System.out.println("Format with 0.9 : " + fmt.format(0.9));
     System.out.println("Format with 1.0 : " + fmt.format(1));
     System.out.println("Format with 1.5 : " + fmt.format(1.5));
     System.out.println("Format with 2 : " + fmt.format(2));
     System.out.println("Format with 2.1 : " + fmt.format(2.1));
     System.out.println("Format with NaN : " + fmt.format(Double.NaN));
     System.out.println("Format with +INF : " + fmt.format(Double.POSITIVE_INFINITY));
     
    And the output result would be like the following:
    Format with -INF : is negative Format with -1.0 : is negative Format with 0 : is zero or fraction Format with 0.9 : is zero or fraction Format with 1.0 : is one Format with 1.5 : is 1+ Format with 2 : is two Format with 2.1 : is more than 2. Format with NaN : is negative Format with +INF : is more than 2.










    展开全文
  • android-i18n-复数 Maria Seppius 来自 code.google....< plurals xss=removed> < item xss=removed>%d попугай < item xss=removed>%d попугая < item xss=removed>%d попугаев</
  • android plurals用法

    千次阅读 2018-04-09 10:57:09
    android plurals用法 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适的资源。 节点: &lt;resources&gt; 必须...

    参考
    android plurals用法

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

         节点:
    
          <resources>  必须的节点。必须为根节点。
    
          没有属性。
    
    <plurals>
    
    字符串的集合,提供取决于某类事物个数的字符串。包含一个或者多个<item>节点
    
          属性:
    

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


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

    属性:

    quantity:

    关键字.这个值反应了什么时候这个字符该被使用。正确的值,在括号里面有不详尽的例子:
    Value

    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 当语言没有要求对特定资

    实例:

     <plurals name="orange">
            <item quantity="one"> Have an orange</item>
            <item quantity="other">Have %d oranges</item>
        </plurals>
    TesxtView tv= (TextView) findViewById(R.id.tv);    
    
    String string= getResources().getQuantityString(R.plurals.numberOfItems, 1, 1);  
    
    tv.setText(string);

    getQuantityString()方法的第一个参数是复数资源id,第二个参数选择要使用的字符串。第三个参数值为1时,按原样使用该字符串。当值不为1时,值放在%d所在的位置。如果在附属自愿中使用了一种格式化字符串,必须始终总有至少三个参数。第二个参数可能会令人困惑,这个参数的唯一差别就是值为1和不为1.

    展开全文
  • android-R.plurals

    千次阅读 2016-06-21 14:10:52
    R.plurals public static final class R.plurals  extends Object  java.lang.Object  ↳ android.R.plurals Summary Public constructors R....

    R.plurals

    public static final class R.plurals 
    extends Object 

    java.lang.Object
       ↳ android.R.plurals


    Summary


    Public constructors

    R.plurals()

    Inherited methods

    From class java.lang.Object



    不同的语言对数量进行描述的语法规则也不同。比如在英语里,数量1是个特殊情况,我们写成“1 book”,但其他任何数量都要写成n books”。这种单复数之间的区别是很普遍的,不过其他语言会有更好的区分方式。Android支持的全集包括zeroone twofewmanyother

    决定选择和使用某种语言和复数的规则是非常复杂的,所以Android提供了诸如getQuantityString()的方法来选择合适的资源。

    注意,要按照语法规则来建立可选项。在英语里,即使数量为0,字符串零(zero)也不需要建立。因为0在英语语法表达上和2没有区别,和其他除1以外的任何数字都没有差别("zero books", "one book", "two books",等等)。 不要被two听起来似乎只能用于数量2” 样的事误导。某语言可能需要212102(等等)和1一样形式表示,而又与其他数的形式都不同。请依靠翻译人员来了解一下实际语言中的差别。

    如果和应用程序的风格一致,常可以用诸如“Books: 1”的模糊数量形式来避免使用数量字符串。这会让你和翻译人员都轻松些。

    注意:复数字符串是简单类型资源,是用名称(name)(而不是XML文件名)来直接引用的。因此,在一个XML文件里,可以把复数字符串资源和其他简单类型资源一起放在一个<resources>元素下。

     

    文件位置

    res/values/filename.xml

    文件名可随意指定。<plurals>元素的名字name将被用作资源ID

     

    资源引用

    Java代码:R.plurals.plural_name

     

    语法

    <?xml version="1.0" encoding="utf-8"?> 

    <resources>

    <plurals

    name="plural_name">

    <item_plurals

    quantity=["zero" | "one" | "two" | "few" | "many" | "other"

    >text_string</item>

    </plurals>

    </resources>

     

    元素

    <resources>

    必填项必须是根元素。

    无属性。

     

    <plurals>

    一个字符串集,每个数量表示提供一个字符串。包含一个或多个<item>元素。

     

    属性:

    name

    String类型。字符串对的名称。此名称将作为资源ID

    <item>

    一个单数或复数形式的字符串。可以是对其他字符串资源的引用。必须作为<plurals>元素的子元素存在。注意须对单引号和双引号进行转义。有关如何正确地样式化及格式化字符串,请参阅下文格式化和样式

     

    属性:

    quantity

    关键字 表示要使用此字符串的数量值。以下是合法的值(括号内列出部分语言要求):

    描述

    zero

    语言需要对数字0进行特殊处理。(比如阿拉伯语)

    one

    语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)

    two

    语言需要对类似2的数字进行特殊处理。(比如威尔士语)

    few

    语言需要对较小数字进行特殊处理(比如捷克语里的234;或者波兰语里以234结尾但不是121314的数。)

    many

    语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)

    other

    语言不需要对数字进行特殊处理。


    例子:

    xml文件在strings.xml文件中

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <plurals name="test_plurals">
            <item quantity="one">There is 1 egg.</item>
            <item quantity="other">There are %s egg.</item>
        </plurals>
    
    </resources>

    <span style="white-space:pre">		</span>// res.getQuantityString(),第一个参数为plurals的ID,第二参数为0,对应quantity的选择,由于有效的只有1和其他,则对应other,因此s1为There
    		// are %d eggs.
    		String s1 = getResources().getQuantityString(R.plurals.test_plurals, 0);
    		Log.i("TAG", "s1:" + s1);
    		// 第二个参数为1,对应one,即为There is 1 egg.
    		s1 = getResources().getQuantityString(R.plurals.test_plurals, 1);
    		Log.i("TAG", "s1:" + s1);
    		s1 = getResources().getQuantityString(R.plurals.test_plurals, 2);
    		Log.i("TAG", "s1:" + s1);
    		// 第二个参数为0,对应other,第三个参数为2,是根据format对%d的填充,即为There are 0 eggs.
    		s1 = getResources().getQuantityString(R.plurals.test_plurals, 0, "3");
    		Log.i("TAG", "s1:" + s1);
    
    		// 第二个参数为1,对应one,由于format没有需要填入,为There is 1 egg.
    		s1 = getResources().getQuantityString(R.plurals.test_plurals, 1, 1);
    		Log.i("TAG", "s1:" + s1);
    		// 第二个参数为2,对应other,由于format有input,为There are 6 eggs.
    		s1 = getResources().getQuantityString(R.plurals.test_plurals, 2, 6);
    		Log.i("TAG", "s1:" + s1);

    运行结果:

    06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
    06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
    06-21 14:04:38.970: I/TAG(12010): s1:There are %s egg.
    06-21 14:04:38.970: I/TAG(12010): s1:There are 3 egg.
    06-21 14:04:38.970: I/TAG(12010): s1:There are 1 egg.
    06-21 14:04:38.970: I/TAG(12010): s1:There are 6 egg.
    

    在这里很奇葩,运行效果跟一般网上帖子不一样。这个是我亲自测。不知道为什么带一个参数的 一直输出是other的内容。
    展开全文
  • const irregularPlurals = require ( 'irregular-plurals' ) ; console . log ( irregularPlurals . get ( 'cactus' ) ) ; //=> 'cacti' console . log ( irregularPlurals ) ; /* Map { [addendu
  • 前端开源库-typographic-apostrophes-for-possessive-plurals为所有格复数排印撇号,确保它们卷曲并向下指向,即使是为所有格复数
  • android plurals用法 Android中的string资源占位符及Plurals string 1、使用 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择...

    0、相关文章

    android plurals用法

    Android中的string资源占位符及Plurals string

    1、使用

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

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

    属性:

    quantity:

    关键字.这个值反应了什么时候这个字符该被使用。正确的值,在括号里面有不详尽的例子:
    Value

    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 当语言没有要求对特定资

    实例:

        <plurals name="book_number" >
            <item quantity="one">%d book</item>
            <item quantity="other">%d books</item>
        </plurals>

    代码:

     String bookNum = getResources().getQuantityString(R.plurals.book_number, 1, 2);
            tv4.setText(bookNum);
    
     String bookNum2 = getResources().getQuantityString(R.plurals.book_number, 2, 4);
            tv5.setText(bookNum2);

    注意:一定要在English语言环境下才起作用,语言为中文不起效。

    当第二个参数为1时,会调用 book,为其他数值时,会调用books。

    为什么只在英文语言环境下才起作用呢?

    2、源码分析

    @NonNull
    public String getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)
            throws NotFoundException {
        //容易看出,先根据quantity决定要使用的字符串
        String raw = getQuantityText(id, quantity).toString();
    
        //再进行占位符的替换工作
        return String.format(mResourcesImpl.getConfiguration().getLocales().get(0), raw,
                formatArgs);
    }
    
    @NonNull
    public CharSequence getQuantityText(@PluralsRes int id, int quantity)
            throws NotFoundException {
        //依赖于ResourceImpl的实现
        return mResourcesImpl.getQuantityText(id, quantity);
    }

    跟进ResourceImpl中的getQuantityText函数:

    CharSequence getQuantityText(@PluralsRes int id, int quantity) throws NotFoundException {
        //得到规则
        PluralRules rule = getPluralRule();
    
        //rule.select根据规则,得到quantity对应的QuanitiyCode,即"zero"、"one"、"other"等
        //之后再根据QuanitiyCode,的到具体的资源文件
        CharSequence res = mAssets.getResourceBagText(id,
                attrForQuantityCode(rule.select(quantity)));
        if (res != null) {
            return res;
        }
    
        //rule没能找到对应的QuanitiyCode时,就用"other"字段的定义
        res = mAssets.getResourceBagText(id, ID_OTHER);
        if (res != null) {
            return res;
        }
    
        //上面寻找资源文件出问题,就抛出异常
        throw new NotFoundException("Plural resource ID #0x" + Integer.toHexString(id)
            + " quantity=" + quantity
            + " item=" + rule.select(quantity));
    }

    这里我们首先看一下getPluralRule函数:

    private PluralRules getPluralRule() {
        synchronized (sSync) {
            if (mPluralRule == null) {
                //单例模式,且和本地化有关,以Locales的第一个配置来初始化规则
                mPluralRule = PluralRules.forLocale(mConfiguration.getLocales().get(0));
            }
            return mPluralRule;
        }
    }
    

    PluralRules的select函数对应的底层实现,在此不作深研究,不同的Locales应该有不同的实现。

    在此看看attrForQuantityCode:

    private static int attrForQuantityCode(String quantityCode) {
        switch (quantityCode) {
            case PluralRules.KEYWORD_ZERO: return 0x01000005;
            case PluralRules.KEYWORD_ONE:  return 0x01000006;
            case PluralRules.KEYWORD_TWO:  return 0x01000007;
            case PluralRules.KEYWORD_FEW:  return 0x01000008;
            case PluralRules.KEYWORD_MANY: return 0x01000009;
            default:                       return ID_OTHER;
        }
    }

    从上面的代码可以看出,PluralRules的select函数的作用,就是将quantity映射成PluralRules定义的Keyword。
    然后attrForQuantityCode将Keyword转化成资源文件能识别的标志。

    现在回到我们之前的问题,为什么终端语言为中文时,Plurals string失效?
    原因是attrForQuantityCode的结果一直是ID_OTHER,即中文对应PluralRules无法有效将Quantity转化为正确的Keyword。

    当然,Google的这种设计并不是Bug,毕竟中文语言环境下,App的显示就应该是中文,本来就没有这种需求。
     

     

    展开全文
  • Android中的string资源占位符及Plurals string
  • Andrid中的plurals

    2012-08-10 19:29:35
    在Android中的字符串资源中,今天留意到一个很特别的东西,叫plurals,其实际的意思就是因为英文中有单,复数之分,所以有的时候,当涉及到数量时,可以在字符串资源中 使用这个玩意来进行动态替换,比如: [code...
  • The bot should be able to understand plurals. And add doc as well. <p><strong>Describe alternatives you've considered</strong></p> <p><strong>Additional context</strong></p>该提问来源于开源项目&#...
  • 转 Android资源之String (四): plurals &lt;div class="article-info-box"&gt; &lt;div class="article-bar-top d-flex"&gt; &lt;span c...
  • android 关于plurals 和xliff 的使用方法

    千次阅读 2014-01-15 15:48:37
    plurals  android对数量(单复数)进行处理 它支持zero,one,two,few,many,和other;可以理解plurals为一个数量集合的简单资源,它可以通过name的属性来访问(不是xml文件的name)。这样,你可以把plural资源和其他...
  • Plurals】android_Quantity Strings

    千次阅读 2014-04-24 14:47:25
    http://developer.android.com/guide/topics/resources/string-resource.html#Plurals  不同的语言对数量的语法规定有不同的规则。在英语里面,例如,1是特例。我们会直接写1book,而针对一个以上的我们会在book...
  • android_Quantity Strings (Plurals)

    千次阅读 2013-03-06 23:35:34
    http://developer.android.com/guide/topics/resources/string-resource.html#Plurals  不同的语言对数量的语法规定有不同的规则。在英语里面,例如,1是特例。我们会直接写1book,而针对一个以上的我们会在book后...
  • 因为项目中出现了知乎的开源框架MatisseActivity,其实就是一个图片选择器,但是有一个问题就是:我点击了9张图片,并设置最多只能选择9张,但是选择第十张时,图片就崩溃了,...原因是因为缺少资源plurals的定义...
  • 因为项目中出现了知乎的开源框架MatisseActivity,其实就是一个图片选择器,但是有一个问题...java.lang.NoClassDefFoundError: Failed resolution of: Lcom/zhihu/matisse/R$plurals 原因是因为缺少资源plurals...
  • android中的Plurals(Quantity Strings)类型 不同的语言对数量的定义有不同的语法规则。例如,在英语中,1个指的是一种特殊情况。其他时候我们说n个。这种单数和复数的情况非常的普通。但其他语言却有明显的...
  • <div><p>Use the <code>pluralize</code> library to improve kind labels. This handles many special cases for us like Endpoints -> Endpoints and Identity -> Identities. <p>/assign </p><p>该提问来源...
  • plurals 和 getQuantityString,以及%d 、%.d 、%1$s 、%1$d
  • zero 当语言需要特别对待0时(就想阿拉伯) one 当语言需要特别对待1(就像英语里和其他语言里的1;在russian,任何以1结尾但是不是以11结尾... String items = res.getQuantityString(R.plurals.numberString, 1, 1);
  • 这是穆罕默德·阿提亚(Mohammed Attia)从一个大型当代语料库中自动提取的阿拉伯语破碎复数列表,同时提供了单数形式和复数形式的形态模式。 它包含2562个破碎的复数形式。
  • Plurals 都是可以定义在 :res/values/strings.xml:  大家对String ,string-array 可能很明白,用的比较的多,因为直接alt+/ 快键方式就有提示,然后你就能看到 这些标签  用起来也很简单,在/strings....
  • <div><p>This includes: <ul><li><code>datetime_get</code></li><li><code>datetime_trunc</code></li> <p><code>duration_get</code> is already works. Maybe other?</p><p>该提问来源于开源项目:...
  • 【移动开发】plurals

    千次阅读 2014-10-13 16:32:22
    尽管历史上称为“数量字符”(在API里面还是这样称呼),数量字符应该仅仅用于plurals.如果把它用来解释当有未读邮件时,Gmail的Inbox为Inbox(12)这样的事情是不正确的。看起来,使用数量字符比使用if语句更方便,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,347
精华内容 538
关键字:

plurals