阿拉伯语App本地化:阿曼货币符号调用后反转问题求助
解决阿曼货币符号NSLocalizedString调用后顺序颠倒的问题
我之前碰到过完全一样的RTL语言字符串排版坑!这个问题几乎可以肯定是**Unicode双向文本算法(BiDi)**在自动调整字符顺序导致的——毕竟阿拉伯语是从右到左(RTL)的语言,而点号属于中性字符,和RTL字符组合时,系统的文本渲染引擎会自动调整它们的显示顺序,就把开头的点号弄到结尾去了。
给你几个亲测有效的解决方法:
用Unicode双向控制字符强制固定顺序(最推荐,只需要改strings文件)
在strings文件里的阿曼货币符号字符串前加上\u200F(从右到左标记,RLM),比如:"oman" = "\u200F.ر.ع";这个控制字符会告诉系统强制按照RTL方向渲染整个字符串,不让BiDi算法乱调整顺序。我当时就是用这个方法解决的,一次就生效。
检查strings文件的编码格式
确保你的strings文件是UTF-8编码(Xcode里可以通过File > Info查看并修改编码),有时候编码异常会导致字符解析时出现顺序错乱的情况,尤其是RTL语言的字符。用NSAttributedString强制设置文本方向
如果上面的方法没效果,可以在代码里用富文本强制指定书写方向:let rawSymbol = NSLocalizedString("oman", comment: "") let fixedSymbol = NSAttributedString( string: rawSymbol, attributes: [.writingDirection: [NSWritingDirection.rightToLeft.rawValue]] )这样渲染的时候会严格按照RTL方向解析字符串,不会出现顺序颠倒。
验证strings文件的原始内容
右键strings文件选择Open As > Source Code,直接查看原始字符串是不是确实是.ر.ع,有时候Xcode的可视化字符串编辑器可能会自动转义或修改字符,或者你复制粘贴时带了隐藏的控制字符,这时候直接编辑源码就能发现问题。
内容的提问来源于stack exchange,提问作者Sushil Sharma
相关产品推荐
相关产品推荐

