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%.