やりたいこと

英語版のAndroidアプリを作る際に、単語の単数形・複数形の振り分け処理を行いたい。

やり方

strings.xmlに「plurals」タグを設定し、Resources#getQuantityString()を使う。

「XX個のファイルが見つかりました。」という日本語を英語にする場合、
1個のファイルが見つかりました。→1 file found.
5個のファイルが見つかりました。→5 files found.

res/values/strings.xml

plurals name:コード内で使用する時のR.plurals.XXXのXXX部分。
item quantity:「one」の方に単数形の場合の文字列。「other」の方に複数形の場合の文字列。数値を置換する場合は「%d」とかでフォーマットする。「one」「other」部分は固定。

res/values-ja/strings.xml

日本語用のstrings.xmlには「item quantity=”other”」だけ設定すればいいっぽい。

サンプルコード

注意

「getQuantityString(int id, int quantity)」は文字列のフォーマット(String#format()みたいな処理)を行わない。
フォーマットしたい場合は「getQuantityString(int id, int quantity, Object… formatArgs)」を使う。

上の「コード」を↓のように書き換えてみる。

この場合、複数形の「textPlural」では「%d」が置換されずそのまま表示されてしまう。

getQuantityString(int id, int quantity)

「quantity」で単数か複数かを判定し、strings.xmlのpluralsで設定されている文字列をそのまま返す。

getQuantityString(int id, int quantity, Object… formatArgs)

「quantity」で単数か複数かを判定し、strings.xmlのpluralsで設定されている文字列を「formatArgs」で置換して返す。

引数2つの方のgetQuantityString()にはString.format()が入っていない。

Androidで英語の複数形の文字列を扱う方法
このエントリーを Google ブックマーク に追加
LinkedIn にシェア
[`evernote` not found]
Pocket


Post navigation