13

Android で複数リソースを利用しようとしましたが、うまくいきませんでした。

私の複数形のリソースファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
        <plurals name="meters">
            <item quantity="one">1 meter</item>
            <item quantity="other">
                <xliff:g id="count">%d</xliff:g>
                meters
            </item>
        </plurals>
        <plurals name="degrees">
            <item quantity="one">1 degree</item>
            <item quantity="other">
                <xliff:g id="count">%d</xliff:g>
                degrees
            </item>
        </plurals>
    </resources>

...そして、リソースから数量文字列を抽出しようとするときに使用しているコードは次のとおりです。

Resources res = this.getResources();
tTemp.setText(res.getQuantityString(R.plurals.degrees, this.mObject.temp_c.intValue()));

...しかし、TextView のテキストは%d degreesandのままです%d meters

誰が何が起こっているのか知っていますか?コードをデバッグしましたが、 res.getQuantityString(...) 呼び出しは、値が%d degreesまたはである文字列を返しています%d meters。ただし、数量がたまたま 1 の場合は、1 degreeまたはに正しく評価され1 meterます。

助けてくれてありがとう!

よろしく、セレスチャロブ。

4

3 に答える 3

41

カウントを 2 回指定する必要があるようです。1 回目は使用する文字列を決定するために使用され、2 回目は文字列に置き換えられます。例えば

Resources res = this.getResources();
int tv = this.mObject.temp_c.intValue();
tTemp.setText(res.getQuantityString(R.plurals.degrees, tv, tv));

少なくともこれまでのテストxliff:gでは、リソース内の要素は必要ありません。

于 2010-11-18T17:18:45.180 に答える
9

Android は、実質的に文書化されていない R.plurals を使用して、複数形の使用を「サポート」します。ソースコードに飛び込むと、次の可能なバージョンの文字列を使用できるはずであることがわかります。

  • "ゼロ"
  • "1"
  • "少数" (正確に 2)
  • 「その他」(3以上)

ただし、実際に機能するのは「1つ」と「その他」だけであることがわかりました(Androidソースで他のものが使用されているにもかかわらず!)。

複数形を使用するには、通常の文字列リソースと同様の方法で複数形化可能な文字列を宣言します。

<resources>
  <plurals name="match">
    <!-- Case of one match -->
    <item quantity="one">1 match</item>
    <!-- Case of several matches -->
    <item quantity="other">%d matches</item>
  </plurals>
</resources>

次に、実際にコードでそれらを使用するには、上記の superfell の提案に似たコードを使用します。

String text = getResources().getQuantityString(R.plurals.match, myIntValue, myIntValue);
myTextView.setText(text);
于 2010-12-10T22:28:40.787 に答える
4

ここでも同じ問題です!私はそれがドキュメントの単なる欠陥だと思います。「純粋」getQuantitiyString(int, int)メソッドは、フォーマットなしでテキストリソースを取得するだけです。superfellが述べたように、getQuantityString(int, int, Object...)メソッドを使用して整数値を2回渡すだけです。

これがあなたと同じように機能することを望みましたが、それは単にそうではありません!!

PS:たぶん正しい答えとして答えをチェックしますか?;-)

于 2011-03-20T11:05:40.933 に答える