如何在java中找出与语言环境相关的文本方向?

当我正在编写格式和解析引擎时,我想找出 – 给定一个juLocale,如果一般文本方向是从右到左(字母字符)。 我所看到的是:

1.)Character#getDirectionality(char)这需要了解要解析的具体char,由于可能的填充字符,这并不总是很容易。

2.)java.awt.ComponentOrientation #getOrientation(Locale)这个方法对我来说有两个问题。 首先,我不想依赖于awt或其他gui库(预期Java可能会在以后的模块化)。 第二个也是更重要的:在OpenJDK和Android中实现这个方法只是使用一种非常简单的方法,即:如果语言是(ar,fa,iw,ur)之一,那么方法就是RIGHT_TO_LEFT。 但是看看维基百科-ISO-639 ,似乎有更多的语言有从右到左的方向,例如ISO-639代码’他’(希伯来语)。

所以现在我的问题是,你知道更好的方法吗? 目前我倾向于使用维基百科列表,即使用更好的语言列表来优化java.awt.ComponentOrientation方法。

经过一些进一步的研究后,我发现语言代码’iw’只是’他’的旧forms。 表达式new Locale("he").getLanguage()将提供结果“iw”!

然而,ComponentOrientation方法显然不是最新的,因为它根据维基百科缺少以下语言:

yi(yiddish plus old form ji),dv(maldivian),ps(普什图语)和ha(hausa)

所以我改进了ComponentOrientation的方法并添加了这些缺少的语言。 最终代码如下所示:

 private static final Set RTL; static { Set lang = new HashSet(); lang.add("ar"); lang.add("dv"); lang.add("fa"); lang.add("ha"); lang.add("he"); lang.add("iw"); lang.add("ji"); lang.add("ps"); lang.add("ur"); lang.add("yi"); RTL = Collections.unmodifiableSet(lang); } public static boolean isTextRTL(Locale locale) { return RTL.contains(locale.getLanguage()); }