strings.xml中的参数是可能的吗?
在我的Android应用程序中,我将用国际化来实现我的string。 所以,目前我遇到了一个语法问题和用不同语言编写的句子的问题。
例如:
“5分钟前” – 英语
“vor 5 Minuten” – 德语
我可以在strings.xml中做如下的事情吗?
<string name="timeFormat">{0} minutes ago</string>
然后有一些魔法
getString(R.id.timeFormat, dynamicTimeValue)
这种行为也可以解决不同的单词顺序的其他问题。
是的,只要以标准的String.format()
方式格式化你的string。
请参阅方法Context.getString(int, Object...)
和Android或Java Formatter
文档。
在你的情况下,string的定义是:
<string name="timeFormat">%1$d minutes ago</string>
如果您需要XML中的两个variables,您可以使用:
%1$d text... %2$d
或%1$s text... %2$s
用于stringvariables。
例:
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();
PS:朗读Flaxie的评论
如果你需要使用String.format(String,Object …)来格式化你的string,那么你可以通过把你的格式参数放在string资源里。 例如,使用以下资源:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
在这个例子中,格式string有两个参数:%1 $ s是一个string,%2 $ d是一个十进制数字。 你可以使用你的应用程序的参数格式化string,如下所示:
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()
。
有很多方法来使用它,我build议你看到有关string格式的文档。
http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html
但是,如果只需要一个variables,则需要使用% [type] ,其中[type]可以是任何标志(请参阅上面的站点内的标志types)。 (即“我的名字是%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%.