RTL无法在牛轧糖及更高版本中正常工作

时间:2018-12-24 12:57:04

标签: java android localization

我在阿拉伯语本地资源中有以下字符串资源

<string name="status_created_seen_closed_text">"%3$s التعليمات في %2$s قام %1$s"</string>

我正在使用BidiFormatter处理RTL和LTL混合文本:

text = String.format( context.getString(R.string.status_created_seen_closed_text),
                            bidiFormatter.unicodeWrap(statusTimeline.getEmpName()),
                            bidiFormatter.unicodeWrap(TextUtils.getTranslatedStatus(context, StandardUtil.StatusType.valueOf(statusTimeline.getStatus().toLowerCase()))),
                            bidiFormatter.unicodeWrap(dateStr));

但是我得到的结果如下:

‏‪17 Dec,2018 06:22 PM‬‏ التعليمات في بانشاء قام ‏‪Khaled

如果单独考虑,似乎每个插入的文本都朝着正确的方向发展,但总的来说,阿拉伯文本似乎正朝英语方向插入。我的预期结果如下

17 Dec,2018 06:22 PM قام بانشاءالتعليمات في ‬‏ ‏‪‬‏Khaled

已编辑

它可以在Android M及更低版本上正常工作

1 个答案:

答案 0 :(得分:0)

使用以下代码格式化字符串:

String.format("%s %s %s %s", 
       statusTimeline.getEmpName(), 
       context.getString(R.string.status_created_seen_closed_text),
       dateStr,
       TextUtils.getTranslatedStatus(context, StandardUtil.StatusType.valueOf(statusTimeline.getStatus().toLowerCase()))
 );

并将您的字符串资源值更改为:

<string name="status_created_seen_closed_text"> قام بانشاءالتعليمات في</string>

我想它将解决问题。