如何使用非阿拉伯字符在 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>
我有一个带有 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>