在我的Android应用程序中,我将使用国际化来实现我的字符串。我的语法和句子以不同语言构建的方式存在问题。
例如:
“5分钟前” - 英文
“vor 5 Minuten” - 德语
我可以在strings.xml中执行以下操作吗?
<string name="timeFormat">{0} minutes ago</string>
然后是一些神奇的
getString(R.id.timeFormat, dynamicTimeValue)
此行为也可以解决不同单词顺序的其他问题。
答案 0 :(得分:328)
是的,只需按标准String.format()
方式格式化字符串。
请参阅方法Context.getString(int, Object...)
和Android或Java Formatter
文档。
在您的情况下,字符串定义将是:
<string name="timeFormat">%1$d minutes ago</string>
答案 1 :(得分:261)
如果你需要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>
String site = "mywebsite";
String days = "11";
//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();
答案 2 :(得分:20)
如果需要使用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
答案 3 :(得分:12)
答案 4 :(得分:9)
有很多种方法可以使用它,我建议您查看有关字符串格式的文档。
http://developer.android.com/intl/pt-br/reference/java/util/Formatter.html
但是,如果您只需要一个变量,则需要使用% [type] ,其中 [type] 可以是任何标记(请参阅标记类型在上面的网站)。 (即&#34;我的名字是%s &#34;或者将我的名字设置为大写,使用此&#34;我的名字是%S &#34 ;)
<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%.