如何使用非阿拉伯字符在 RTL 中键入占位符字符串

How to type placeholder string in RTL with non-Arabic characters

我有一个带有 2 个占位符的简单字符串:

<string name="substring_two_substrings_dash">%1$s - %2$s</string>

我不知道如何将此输入到 Android studio 中,用于阿拉伯语等 RTL 语言,其中“1”应出现在右侧,“2”应出现在左侧。通常,当您在其他阿拉伯字符中键入占位符时,它们会自动反转:

<string name="snackbar_lock_out_period_scheduled">تم جدولة الحبس %1$s لمدة %2$s!</string> [实际上,当我把它粘贴到这里时,它发生了变化,在 Android studio 中看起来像“s$2%”]

但是,对于两个占位符之间只有“-”的简单字符串,它不会自动反转,因为它没有检测到任何阿拉伯字符。如果我也在那里添加一个阿拉伯字符,它就可以了。

如何输入并强制其为 RTL?

如果我手动输入它,它会在运行时崩溃:

<string name="substring_two_substrings_dash">s% - s%</string>

错误 "java.util.DuplicateFormatFlagsException: Flags = ' '

这是文档为字符串资源中的多个 arguments/placeholders 提供的示例:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

因此,参数模板是 %o$x 其中:

  • o:参数在字符串中的顺序
  • x:参数的格式(数字、字符串...)

无论您使用何种语言,此格式 ( %o$x ) 都需要以英语维护

为此,您需要在所需语言和英语之间来回切换以编写整个字符串

例如要写الرقم الأول 21 – الرقم الثاني 14:你需要遵循:

  • 打开阿拉伯语键盘:记下 -> الرقم الأول
  • 开启英文键盘:记下来 -> %1$s
  • 打开阿拉伯语键盘:记下 -> - الرقم الثاني
  • 开启英文键盘:记下来 -> %2$s

要对此进行测试:

<string name="test">الرقم الأول %1$s - الرقم الثاني %2$s</string>

getString(R.string.test, 21.toString(), 52.toString())

<string> 中的数字似乎不可读,因为它在 LTR/RTL

之间变化

更新:

This doesn't answer how to do it for my simple example with no Arabic characters, just a dash in between the placeholders.

同样的方法也适用,只是你不必切换键盘;因此,当您想在字符串中添加 placeholder/argument 时,您只需要使用英文键盘和模式 %o$x

在你的例子中<string name="substring_two_substrings_dash">s% - s%</string>

应该是:<string name="substring_two_substrings_dash">%2$s - %1$s</string>

或者如果您想按顺序执行:<string name="substring_two_substrings_dash">%1$s - %2$s</string>