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

7

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

手册上说,我可以为每个本地化提供特定的数量字符串,有几种常见情况:“零”,“一”,“二”,“少量”,“许多”和“其他”。我不知道是否覆盖了世界上所有语言的所有可能情况;无论如何,对于我正在尝试本地化的俄语来说,已经足够了。

在俄语中,2到4的数字应该被视为“少量”(实际规则更为复杂,但我只需要处理小于十的数字)。

然而,当我请求一个数量字符串为2时,系统会选择“其他”字符串。它既不选“两个”字符串也不选“少量”字符串(我已经在我的资源中提供了它们)。如果我删除“其他”字符串,就会出现异常:

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

我在模拟器(Android 2.1)和真实设备(Android 2.3)上都尝试了这个,无论在哪种情况下,结果都是错误的。 显然,在某个地方出现了错误-系统不认识我语言的特定数量词。 这可能是Android在这里有一些bug吗?

3个回答

3
我认为Android目前存在问题。
具体来说,PluralRules.java中的以下代码显示,大多数语言只使用“one”或“other”字符串,但捷克语将使用“few”字符串: http://code.google.com/p/android/issues/detail?id=8287
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;
        }
    }
}

2
感谢 Brigham 指出了这个问题的解释;但解释引发了更多的问题,现在这些问题已经得到解决。实际上,在API 11之前(即Android 3.x),数量字符串无法正常工作,因此您需要使用替代方案。
对于版本11之前的API,解决方案在评论15中提到,其中包含一个链接到替代处理数量字符串的项目。该项目是一个程序,只需执行系统应该执行的操作。它可以轻松转换为库,因此您只需将其添加到项目中,导入类并开始使用。

0
  1. 请在 values-ru/strings.xml 中定义您的复数字符串,而不是在 values/strings.xml 中。
  2. 将您的移动设备语言设置为俄语(从设置->语言和输入法->语言->选择俄语)

如果您的语言不是俄语,则会从 values/strings.xml 中获取复数字符串


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接