Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使俄语数量字符串正常工作?_Android - Fatal编程技术网

Android 如何使俄语数量字符串正常工作?

Android 如何使俄语数量字符串正常工作?,android,Android,我遇到了数量字符串(复数)的问题 ,我可以提供特定于每个本地化的数量字符串,并且有几种常见情况:“零”、“一”、“二”、“少”、“多”和“其他”。我不知道是否涵盖了世界上所有语言的所有可能案例;不管怎么说,对于俄语来说,我正在尝试进行本地化就足够了 在俄语中,从2到4的数字应该被视为“很少”(规则实际上更复杂,但我只需要10以下的数字) 但是,当我为2请求数量字符串时,系统将采用“其他”字符串。它既不需要“两个”字符串,也不需要“几个”字符串(我在参考资料中提供了它们)。如果删除了“other”

我遇到了数量字符串(复数)的问题

,我可以提供特定于每个本地化的数量字符串,并且有几种常见情况:“零”、“一”、“二”、“少”、“多”和“其他”。我不知道是否涵盖了世界上所有语言的所有可能案例;不管怎么说,对于俄语来说,我正在尝试进行本地化就足够了

在俄语中,从2到4的数字应该被视为“很少”(规则实际上更复杂,但我只需要10以下的数字)

但是,当我为2请求数量字符串时,系统将采用“其他”字符串。它既不需要“两个”字符串,也不需要“几个”字符串(我在参考资料中提供了它们)。如果删除了“other”字符串,则会出现异常:

android.content.res.Resources$NotFoundException: 
    Plural resource ID #0x7f080000 quantity=2 item=other

我在emulator(Android2.1)和真实设备(Android2.3)上都试过,在这两种情况下,行为都是相同的错误。显然,在某些地方,系统无法识别我的语言的特定于语言环境的数量,这是一个错误。可能是安卓系统有一些缺陷吗?

我相信安卓系统目前已经打破了这一缺陷

具体而言,PluralRules.java中的以下代码表明,大多数语言仅使用
一个
其他
字符串,但捷克语将使用
少数
字符串:

static final PluralRules ruleForLocale(Locale locale) {
    String lang = locale.getLanguage();
    if ("cs".equals(lang)) {
        if (cs == null) cs = new cs();
        return cs;
    }
    else {
        if (en == null) en = new en();
        return en;
    }
}

private static PluralRules cs;
private static class cs extends PluralRules {
    int quantityForNumber(int n) {
        if (n == 1) {
            return QUANTITY_ONE;
        }
        else if (n >= 2 && n <= 4) {
            return QUANTITY_FEW;
        }
        else {
            return QUANTITY_OTHER;
        }
    }
}

private static PluralRules en;
private static class en extends PluralRules {
    int quantityForNumber(int n) {
        if (n == 1) {
            return QUANTITY_ONE;
        }
        else {
            return QUANTITY_OTHER;
        }
    }
}
语言环境的静态最终多规则规则规则(语言环境){
字符串lang=locale.getLanguage();
如果(“cs”。等于(lang)){
如果(cs==null)cs=new cs();
返回cs;
}
否则{
如果(en==null)en=new en();
返回en;
}
}
私有静态多规则;
私有静态类cs扩展了多个规则{
整数数量FORNUMBER(整数n){
如果(n==1){
退货数量为1;
}
else if(n>=2&&n感谢who指出了问题的解释位置;该解释最初提出了更多的问题,但现在似乎已经解决了。事实上,数量字符串不能正常工作(至少在API 11之前,即Android 3.x),因此您必须使用替代方法

中提到了版本11之前的API解决方案,该解决方案包含指向的链接。该项目是一个只执行系统应执行的操作的程序。它可以轻松转换为库,因此您只需将其添加到项目中,导入类并继续

  • values ru/strings.xml中定义复数字符串,而不是在values/strings.xml
  • 将移动设备语言设置为俄语(从设置->语言和输入->语言->选择俄语)
  • 如果您的语言不是俄语,它将从values/strings.xml中获取复数字符串