当前位置: 首页 > 面试题库 >

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

宇文迪
2023-03-14
问题内容

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

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”(希伯来语)。

所以我现在的问题是,您知道更好的方法吗?目前,我倾向于仅使用Wikipedia列表,​​即使用更好的语言列表来完善java.awt.ComponentOrientation方法。


问题答案:

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

不过,根据Wikipedia的介绍,ComponentOrientation方法显然不是最新的,因为它缺少以下语言:

yi(意第绪语加上旧式ji),dv(马尔代夫语),ps(普什图语)和ha(hausa)

因此,我改进了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());
}


 类似资料:
  • 问题内容: 我在指定语言代码的应用程序中读取了一个文件: 必须采用以下格式:例如 en_UK,en_US等。是否可以在继续之前验证语言环境字符串是否有效? 问题答案: 现在我要做: 效果很好。

  • 在我的应用程序中,用户应该能够切换区域设置(用于在页面上呈现文本的语言)。大量教程使用FacesContext.get货币实例()。getViewRoot()。setLocale()。例如:http://www.mkyong.com/jsf2/jsf-2-internationalization-example/.但是,这在JSF 2.0中根本不起作用(它在1.2中确实起作用)。这种语言从不切换。

  • 问题内容: 我用来将货币从BigDecimal格式化为字符串。按预期工作,问题在于我们的主要目标是荷兰市场,而默认的荷兰格式很奇怪。 让我解释一下,当格式化-125时,荷兰语将得到“€125-”(预期为“-€125”)。英国按预期方式提供“-£125.50”。 我可以检查语言环境是否为荷兰语,然后在每次我要设置小数格式时都提供一个模式。但是我更喜欢一个解决方案,它可以覆盖荷兰的格式设置。我在考虑以

  • 问题内容: 我在Java语言环境中发现了许多缺少的国家/地区-如果我打印出可用语言环境的列表, 我缺少许多国家,包括尼日利亚,伊朗,吉尔吉斯斯坦和巴基斯坦。任何人都可以对此进行说明,或者是否有更好(更全面)的方法来获取Java国家列表? 1.6.0_16-b01 问题答案: 世界上的国家和地区之间没有一对一的映射。语言环境指定区域。它们旨在标记诸如语言多样性之类的东西。只是一个明确的例子:印度,斯

  • 问题内容: 我想使用欧洲格式显示日期,但使用DatePipe shortDate 格式仅使用美国日期样式显示。 我假设多数民众赞成在默认语言环境是en_US。也许我在文档中丢失了,但是如何更改Angular2应用程序中的默认语言环境设置?也许有某种方法可以将自定义格式传递给DatePipe? 问题答案: 从Angular2 RC6开始,您可以通过添加提供程序在应用程序模块中设置默认语言环境: 货币

  • 我正在尝试将一个棱角分明的应用程序从gulp转换为WebPack。在gulp中,我使用gulp-preprocess替换html页面中的一些变量(例如,数据库名称),这取决于node_env。用webpack实现类似结果的最佳方法是什么?