6

数量文字列(複数形)で問題が発生しました。

マニュアルには、ローカリゼーションごとに固有の数量文字列を提供する場合があり、「ゼロ」、「1」、「2」、「少数」、「多数」、「その他」の一般的なケースがいくつかあります。世界のすべての言語で考えられるすべてのケースがカバーされているかどうかはわかりません。とにかく、私がローカライズしようとしているのはロシア語にとって十分すぎるほどです。

ロシア語では、2から4までの数字は「少数」のように扱う必要があります(ルールは実際にはもっと複雑ですが、必要なのは10未満の数字だけです)。

ただし、2の数量文字列を要求すると、システムは「その他」の文字列を受け取ります。「2つの」文字列も「少数の」文字列も必要ありません(リソースで提供しています)。「other」文字列を削除すると、例外が発生します。

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

エミュレーター(Android 2.1)と実際のデバイス(Android 2.3)の両方でこれを試しましたが、どちらの場合も動作は同じです。明らかに、どこかに間違いがあります。システムは私の言語のロケール固有の数量を認識しません。Androidにバグがあるのでしょうか?

4

3 に答える 3

3

これは現在Androidでは壊れていると思います。

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

具体的には、PluralRules.javaの次のコードは、ほとんどの言語がoneまたはother文字列のみを使用することを示していますが、チェコ語はfew文字列を使用します。

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;
        }
    }
}
于 2012-10-05T18:03:33.453 に答える
2

問題が説明されている問題を指摘してくれたBrighamに感謝します。その説明は最初により多くの質問を提起しました、しかし今それらは解決されたようです。実際、数量文字列は正しく機能しないため(少なくとも、Android3.xであるAPI11より前は)、別の方法を使用する必要があります。

バージョン11より前のAPIのソリューションは、数量文字列の代替処理のためのプロジェクトへのリンクを含むコメント15に記載されています。そのプロジェクトは、システムが実行するはずだったことを単純に実行するプログラムです。ライブラリに簡単に変換できるので、プロジェクトに追加し、クラスをインポートして実行するだけです。

于 2012-10-06T07:05:10.030 に答える
0
  1. 複数形の文字列をvalues / strings.xmlではなくvalues-ru/strings.xmlで定義します
  2. モバイルデバイスの言語をロシア語に設定します([設定]->[言語と入力]->[言語]->[ロシア語を選択]から)

あなたの言語がロシア語でない場合は、values/strings.xmlから複数形の文字列を取得します

于 2015-08-25T13:10:40.893 に答える