strings.xml中的参数是否可能?

dhe*_*sse 268 string parameters android dynamic optional

在我的Android应用程序中,我将使用国际化来实现我的字符串.我的语法和句子用不同语言构建的方式有问题.

例如:

"5分钟前" - 英文

"vor 5 Minuten" - 德语

我可以在strings.xml中执行以下操作吗?

<string name="timeFormat">{0} minutes ago</string>
Run Code Online (Sandbox Code Playgroud)

然后有些神奇的

getString(R.id.timeFormat, dynamicTimeValue)
Run Code Online (Sandbox Code Playgroud)

此行为也将解决不同单词顺序的其他问题.

Chr*_*Orr 340

是的,只需以标准String.format()方式格式化字符串即可.

请参阅方法Context.getString(int, Object...)AndroidJava Formatter文档.

在您的情况下,字符串定义将是:

<string name="timeFormat">%1$d minutes ago</string>
Run Code Online (Sandbox Code Playgroud)


Ped*_*ito 272

如果您需要XML中的两个变量,您可以使用:

%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>
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

PS:阅读Flaxie的评论

  • 订单并不像你说的那么重要.字符串中的数字实际上是参数的顺序.根据语言,您可以按不同的顺序排列数字. (6认同)

小智 22

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

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
Run Code Online (Sandbox Code Playgroud)

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

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
Run Code Online (Sandbox Code Playgroud)

如果您希望了解更多信息,请访问:http://developer.android.com/intl/pt-br/guide/topics/resources/string-resource.html#FormattingAndStyling


Div*_*ide 12

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


Gor*_*rio 10

有很多方法可以使用它,我建议你看看有关字符串格式的文档.

http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html

但是,如果您只需要一个变量,则需要使用%[type],其中[type]可以是任何Flag(请参阅上面站点内的Flag类型).(即"我的名字是%s "或将我的名字设置为UPPERCASE,使用此"我的名字是%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%.
Run Code Online (Sandbox Code Playgroud)