1. ホーム
  2. android

[解決済み] "ゼロ "のAndroid複数形処理

2023-01-02 16:21:40

質問

strings.xmlに以下のような複数のリソースがある場合、どのようにすればよいでしょうか?

   <plurals name="item_shop">
        <item quantity="zero">No item</item>
        <item quantity="one">One item</item>
        <item quantity="other">%d items</item>
   </plurals>   

を使ってユーザーに結果を表示しています。

textView.setText(getQuantityString(R.plurals.item_shop, quantity, quantity));

1以上ではうまくいっているのですが、数量が0の場合、"0 items"と表示されます。 ドキュメントにあるように、"zero"の値はアラビア語でのみサポートされているのでしょうか? それとも、私は何かを見逃しているのでしょうか?

どのように解決するのですか?

Androidのリソースによる国際化の方法は、かなり限定的です。私は、標準の java.text.MessageFormat .

基本的には、このように標準の文字列リソースを使用すればよいのです。

<resources>
    <string name="item_shop">{0,choice,0#No items|1#One item|1&lt;{0} items}</string>
</resources>

そして、コードからは以下のようにするだけです。

String fmt = getResources().getText(R.string.item_shop).toString();
textView.setText(MessageFormat.format(fmt, amount));

フォーマット文字列の詳細については javadocs for MessageFormat を参照してください。