gpt4 book ai didi

java - 如何找出 java 中依赖于语言环境的文本方向?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:51 25 4
gpt4 key购买 nike

当我编写格式和解析引擎时,我想知道 - 给定一个 j.u.Locale,如果一般文本方向是从右到左(字母字符)。我看到的是:

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

2.) java.awt.ComponentOrientation#getOrientation(Locale) 这个方法对我来说有两个问题。首先,我不想依赖 awt 或其他 gui 库(预计以后可能对 Java 进行模块化)。其次,也是更重要的一点:OpenJDK 和 Android 中此方法的实现仅使用一种非常简单的方法,即:如果语言是 (ar, fa, iw, ur) 之一,则该方法表示 RIGHT_TO_LEFT。但是看着 Wikipedia-ISO-639似乎有更多的语言具有从右到左的方向,例如 ISO-639 代码“he”(希伯来语)。

所以我现在的问题是,您知道更好的方法吗?目前我倾向于只使用维基百科列表,也就是说,用更好的语言列表来改进 java.awt.ComponentOrientation 方法。

最佳答案

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

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

yi(意第绪语加旧形式 ji)、dv(马尔代夫语)、ps(普什图语)和 ha(豪萨语)

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

private static final Set<String> RTL;

static {
Set<String> lang = new HashSet<String>();
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("sd");
lang.add("ug");
lang.add("ur");
lang.add("yi");
RTL = Collections.unmodifiableSet(lang);
}

public static boolean isTextRTL(Locale locale) {
return RTL.contains(locale.getLanguage());
}

关于java - 如何找出 java 中依赖于语言环境的文本方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com