319

在我的 Android 应用程序中,我将通过国际化来实现我的字符串。我对语法和句子以不同语言构建的方式有疑问。

例如:

“5 分钟前” - 英语

“vor 5 Minuten”——德语

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

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

然后像一些魔法

getString(R.id.timeFormat, dynamicTimeValue)

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

4

5 回答 5

391

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

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

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

<string name="timeFormat">%1$d minutes ago</string>
于 2010-03-07T19:46:22.763 回答
349

如果你需要两个变量XML,你可以使用:

%1$d text... %2$d%1$s text... %2$s用于字符串变量。

例子 :

字符串.xml

<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>

活动.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();
于 2012-04-13T15:48:25.097 回答
33

如果您需要使用 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

于 2015-10-24T23:59:41.867 回答
13

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

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

但是,如果您只需要一个变量,则需要使用 % [type]其中[type]可以是任何标志(请参阅上面站点内的标志类型)。(即“我的名字是%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%.
于 2016-02-25T12:13:04.907 回答
12

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

于 2010-07-25T04:18:15.080 回答