web-dev-qa-db-ja.com

strings.xmlのパラメーターは可能ですか?

Androidアプリでは、国際化対応の文字列を実装します。文法と文が異なる言語で作成される方法に問題があります。

例えば:

「5分前」-英語

「vor 5 Minuten」-ドイツ語

Strings.xmlで次のようなことができますか?

<string name="timeFormat">{0} minutes ago</string>

そして、いくつかの魔法のような

getString(R.id.timeFormat, dynamicTimeValue)

この動作は、異なるWord順序での他の問題も解決します。

256
dhesse

はい、標準のString.format()方法で文字列をフォーマットします。

メソッド Context.getString(int, Object...) および Android または JavaFormatterのドキュメントを参照してください。

あなたの場合、文字列の定義は次のようになります。

<string name="timeFormat">%1$d minutes ago</string>
328
Christopher Orr

XMLに2つの変数が必要な場合は、次を使用できます。

%1$d text... %2$dまたは文字列変数の場合は%1$s text... %2$s

例:

strings.xml

<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>

activity.Java

String site = "mywebsite";
String days = "11";

//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();
261
Pedro Lobito

String.format(String、Object ...)を使用して文字列をフォーマットする必要がある場合は、文字列リソースにフォーマット引数を配置することでそれを行うことができます。たとえば、次のリソースの場合:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

この例では、書式文字列には2つの引数があります。%1 $ sは文字列で、%2 $ dは10進数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

詳細をご覧になりたい場合: http://developer.Android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling

20
Gabriel Lucas

この特定のアプリケーションには、標準ライブラリ関数Android.text.format.DateUtils.getRelativeTimeSpanString()があることに注意してください。

12
Divide

それを使用するには多くの方法がありますが、文字列形式に関するこのドキュメントを参照することをお勧めします。

http://developer.Android.com/intl/pt-br/reference/Java/util/Formatter.html

ただし、必要な変数が1つだけの場合は、%[type]を使用する必要があります([type]は任意フラグ(上記のサイト内のフラグタイプを参照)。 (つまり、「私の名前は%s」または「名前を大文字に設定するには、この「私の名前は)」を使用しますS ")

<string name="welcome_messages">Hello, %1$S! You have %2$d new message(s) and your quote is %3$.2f%%.</string>

Hello, Android! You have 1 new message(s) and your quote is 80,50%.
10
Gorio