Androidアプリでは、国際化対応の文字列を実装します。文法と文が異なる言語で作成される方法に問題があります。
例えば:
「5分前」-英語
「vor 5 Minuten」-ドイツ語
Strings.xmlで次のようなことができますか?
<string name="timeFormat">{0} minutes ago</string>
そして、いくつかの魔法のような
getString(R.id.timeFormat, dynamicTimeValue)
この動作は、異なるWord順序での他の問題も解決します。
はい、標準のString.format()
方法で文字列をフォーマットします。
メソッド Context.getString(int, Object...)
および Android または JavaFormatter
のドキュメントを参照してください。
あなたの場合、文字列の定義は次のようになります。
<string name="timeFormat">%1$d minutes ago</string>
XMLに2つの変数が必要な場合は、次を使用できます。
%1$d text... %2$d
または文字列変数の場合は%1$s text... %2$s
。
例:
<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>
String site = "mywebsite";
String days = "11";
//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();
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
この特定のアプリケーションには、標準ライブラリ関数Android.text.format.DateUtils.getRelativeTimeSpanString()
があることに注意してください。
それを使用するには多くの方法がありますが、文字列形式に関するこのドキュメントを参照することをお勧めします。
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%.