Android:I18n带参数

时间:2012-01-25 15:06:40

标签: android internationalization

我知道Android在18n应用程序中有支持,但是我可以为这样的字符串提供参数吗?在Rails中,我可以这样做:

en:
  hello: "Hello %{name}! You've got %{count} messages."

t("hello", name: "Klaus", count: 5)

Android中是否有类似内容,或者我自己必须这样做?

3 个答案:

答案 0 :(得分:12)

详细说明Heiko的答案,并展示您的具体示例,如果您想要多个字符串,则需要对其进行编号:

<string name="hello">Hello %1$s! You've got %2$d messages.</string>

这样您就可以在每次翻译中切换字符串的顺序。使用它将是:

String hello = getString(R.strings.hello, "Klaus", 5);

答案 1 :(得分:4)

你可以做同样的事情

在strings.xml中,您可以输入

<string name="xyz">Do you really want to report [%s] as spammer?</string>

然后在您的代码中添加

String foo = getString(R.strings.xyz,"Joe Doe");

请参阅Context.getString()

答案 2 :(得分:0)

Phrase似乎完全可以满足您的需求。 Here's a article关于它的实现。下面是本文的示例。

<string name="greeting"> Hello {name}, today\'s cook yielded {yield} {unit}.</string>

然后...

// Call put(...) in any order
CharSequence greeting = Phrase.from(context, R.string.greeting)
    .put("unit", unit)
    .put("name", name)
    .put("yield", yield)
    .format();