首页 文章

Android kotlin字符串格式不同

提问于
浏览
0

我有一些本地化的字符串格式,格式参数的顺序不同 . 例如,我有一个短语 synced 12 files on 6/29/2018 ,它将显示给用户 . 126/29/2018 只是占位符 . 所以我资源中的字符串看起来像

<string name="n_synced_on_date" formatted="false">"%d files synced on %s"</string>

麻烦是一些翻译人员想写的

<string name="n_synced_on_date" formatted="false">"bla %s bla bla bla %d bla"</string>

所以,当我运行我的代码

text = String.format(getString(R.string.n_synced_on_date), numberOfFiles, dateString)

对于任何反转格式参数的语言,它都会崩溃 .

我希望我可以使用Kotlin字符串模板,因此我的资源可以定义为

<string name="n_synced_on_date" formatted="false">"$NUMBER files synced on $DATESTRING"</string>

这将允许翻译人员以任何顺序输入单词,但根据此链接How to apply template to a string returned from a function这是不可能的 .

我当前糟糕的方法是捕获数字格式异常并尝试反转参数的字符串格式 . 我希望找到一个很好的清洁解决方案 .

1 回答

  • 2

    正如this answer解释的那样,您可以像这样继续给出参数的索引:

    <string name="n_synced_on_date" formatted="false">"%1$d files synced on %2$s"</string>
    <string name="n_synced_on_date" formatted="false">"bla %2$s bla bla bla %1$d bla"</string>
    

    然后你可以运行你已经在做的代码:

    String.format(getString(R.string.n_synced_on_date), numberOfFiles, dateString)
    

相关问题