android strings.xml中是否可以有参数?[duplicate]

ktca8awb  于 2023-03-21  发布在  Android
关注(0)|答案(5)|浏览(101)

此问题在此处已有答案

Is it possible to have placeholders in strings.xml for runtime values?(14个答案)
5年前关闭。
在我的Android应用程序中,我打算实现字符串的国际化,但在语法和不同语言中构建句子的方式上遇到了问题。
例如:
“5分钟前”-英语
“vor 5分钟”-德语
我可以在strings.xml中执行类似下面的操作吗?

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

然后一些魔法

getString(R.id.timeFormat, dynamicTimeValue)

这种行为也可以解决另一个不同语序的问题。

osh3o9ms

osh3o9ms1#

是的,只要按照标准的String.format()方式格式化字符串即可。
请参见方法Context.getString(int, Object...)AndroidJavaFormatter文档。
在您的示例中,字符串定义为:

<string name="timeFormat">%1$d minutes ago</string>
q35jwt9p

q35jwt9p2#

如果XML中需要两个变量,可以用途:
字符串变量为%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>

activity.java

String site = "site.tld";
String days = "11";

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

wwtsj6pe3#

如果需要使用String.format(String,Object...)设置字符串的格式,则可以通过将格式参数放入字符串资源中来实现。例如,使用以下资源:

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

在此示例中,格式字符串有两个参数:%1$s是字符串,%2$d是十进制数。您可以使用应用程序中的参数设置字符串的格式,如下所示:

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

pgpifvop

pgpifvop4#

有很多方法可以使用它,我建议你看看这个关于字符串格式的文档。
http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html
但是,如果您只需要一个变量,则需要使用%[type],其中 [type] 可以是任何标志(请参阅上面站点内的标志类型)。(例如,“My name is**%s**”或将我的名称设置为大写,请使用“My name is**%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%.
b4wnujal

b4wnujal5#

注意,对于这个特定的应用程序,有一个标准库函数android.text.format.DateUtils.getRelativeTimeSpanString()

相关问题