18

Android 文字列では、ここで説明されているように、文字列に指定された実際の数に応じて翻訳を処理する複数形を定義できます。sprintf文字列では、多くの言語と同様に、複数の位置パラメーターを指定することもできます。

ただし、次の文字列を考慮してください。

<resources>
    <string name="remaining">%1$d hours and %2$d minutes remaining.</string>
</resources>

2 つの数字が含まれていますが、これを Android で複数形に変換するにはどうすればよいですか? すべての例は、常に 1 つのパラメーターのみで機能します。これは可能ですか?

4

3 に答える 3

7

前の回答では、i18n の観点からは正しくない文字列連結を使用しています。元の文字列「残り %1$d 時間 %2$d 分」の場合。文字列連結を使用すると、「残り」の翻訳が強制的に最後まで行われ、一部の言語では適切でない場合があります。

私の解決策は次のとおりです。

<resources>
     <string name="remaining">Time remaining: Hours:%1$d Minutes:%2$d.</string>
</resources>

または、見出しとして「残り時間」を使用することもできます。

このソリューションはhttp://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStylingに記載されています

多くの場合、「Books: 1」などの数量に中立な定式化を使用することで、数量文字列を回避できます。

于 2016-05-04T15:49:57.350 に答える
5

getQuantityStringには、文字列 ID、数量、およびvarargs文字列をフォーマットするために使用できるオブジェクトのオーバーロードされたバージョンがあります。複数形を使用することは可能に思えますが、私には時間が奇妙に思えます。DateUtilに含まれるヘルパー メソッドを使用できます。これらは既にローカライズされており、単数形/複数形を処理してから、これらのヘルパー メソッドの結果で文字列を完成させます。例: getRelativeTimeSpanString

<plurals name="number_of_emails">
    <item quantity="one">%d email</item>
    <item quantity="other">%d emails</item>
</plurals>

<plurals name="number_of_messages">
    <item quantity="one">%d message</item>
    <item quantity="other">%d messages</item>
</plurals>

を使用getQuantityStringして 2 つのピースを取得し、1 つに結合できます。

于 2015-12-21T10:26:35.170 に答える