【问题标题】:Android string placeholder different languagesAndroid字符串占位符不同的语言
【发布时间】:2015-12-22 05:07:03
【问题描述】:

我有一个带有两个占位符的字符串,带有 XML:

<string name="message">%1$s informs that %2$s is not feeling well today.</string>

因为%2$s要么是"he" 要么是"she",所以翻译成葡萄牙语时,我们应该只有第一个占位符,即a的名字人:

<string name="message">%1$s informa que não se sente muito bem hoje.</string>

代码编译并运行良好,但 Lint 抱怨 String.format 字符串与 XML 格式字符串不匹配

处理这种情况的最佳方法是什么?

【问题讨论】:

  • 作为一个快速技巧,在葡萄牙语字符串资源的末尾添加第二个占位符,然后将其设置为空,如下所示:%1$s informa que não se sente muito bem hoje.%2$s ;-)
  • 您可以使用两个占位符和内部代码保持相同的格式,您可以使用哪种语言来处理,并为葡萄牙语的第二个占位符添加空字符串。
  • @leRobot 解决了警告,但 %2$s 被附加到翻译后的字符串中。我需要创建另一个,而不是用葡萄牙语翻译它,只是为了那个特定的情况......丑陋。
  • @RajenRaiyarela 不是最优雅的解决方案,但如果没有更好的解决方案,它会这样做。
  • @tato.rodrigo 这不仅仅是一个“空字符串资源”,它是一个仅在葡萄牙语中为空的字符串。我们的应用程序在 3rd 方平台上由不同的人翻译成 11 种语言。所以是的。我更喜欢在 xml 中保持简单,如果需要,可以在代码中创建一个条件。

标签: android string placeholder lint multiple-languages


【解决方案1】:
<string name="message">%1$s informa que não %2$s sente muito bem hoje.</string>

%2$s 成为“se”和...“se”:)

【讨论】:

  • %2$s 来自“他”/“她”。以不同的方式翻译它是没有意义的。我们从第三方平台获得翻译,所以我不想这样做。感谢您的意见!
  • @RicardoBelchior 一种语言的占位符应该在所有语言中都有,这就是它的工作原理。所以有时不得不破例。
【解决方案2】:

Lint 在寻找第二个参数时会报错。 您可以将占位符放在代表他和她的单词的位置,并保持两者含义相同。或者,如果这种语言中没有他和她的词,只需将占位符保留在那里并用空白字符串替换它。

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 2019-02-05
    • 2015-07-20
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多