- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要在 Java 中从 fr_FR
这样的字符串进行转换, en_GB
, ja_JP
(意思是法语、英语和日语)到他们的 ISO 639-2 表示:fre/fra
, eng
, jpn
.
你知道符号样式fr_FR
吗?符合某个标准?我在这方面还没有发现任何东西。
您知道如何将此表示法转换为 ISO 639-2(3 字母)语言代码吗?
非常感谢!
更新:我知道 getISO3Language() 方法。而且我也知道我可以通过迭代可用的语言环境来构造像 fr_FR
这样的字符串然后使用 ISO 639-2 3 字母代码进行映射 - 因此,每当我搜索 3 字母代码时,我都可以在我构建的 map 中找到。问题是我会更适合直接解决方案。抱歉,我没有从一开始就解释这一点。
最佳答案
在java.util.ResourceBundle.getBundle(String, Locale, ClassLoader)的javadoc中可以看到符号样式{language}_{country}
,所以使用记法风格也不会太糟糕。另一方面,还应注意语言标签具有{language}-{country}
样式(不是下划线'_'而是连字符'-')。详细说明可以在java.util.Locale的javadoc中找到.
将 {language}_{country}
转换为 ISO 639-2(3 字母)代码的简单方法是 new Locale(str.substring(0,2))。 getISO3Language()
,但您似乎正在寻找另一种方式,如下所示:
String locale = "fr_FR";
try
{
// LanguageAlpha3Code is a Java enum that represents ISO 639-2 codes.
LanguageAlpha3Code alpha3;
// LocaleCode.getByCode(String) [static method] accepts a string
// whose format is {language}, {language}_{country}, or
// {language}-{country} where {language} is IS0 639-1 (2-letter)
// and {country} is ISO 3166-1 alpha2 code (2-letter) and returns
// a LocaleCode enum. LocaleCode.getLanguage() [instance method]
// returns a LanguageCode enum. Finally, LanguageCode.getAlpha3()
// returns a LanguageAlpha3Code enum.
alpha3 = LocaleCode.getByCode(locale).getLanguage().getAlpha3();
// French has two ISO 639-2 codes. One is "terminology" code
// (ISO 639-2/T) and the other is "bibliographic" code
// (ISO 639-2/B). 2 lines below prints "fra" for ISO 639-2/T
// and "fre" for ISO 639-2/B.
System.out.println("ISO 639-2/T: " + alpha3.getAlpha3T());
System.out.println("ISO 639-2/B: " + alpha3.getAlpha3B());
}
catch (NullPointerException e)
{
System.out.println("Unknown locale: " + locale);
}
上面的例子可以用nv-i18n 国际化包运行。如果您使用的是 Maven,请尝试将下面的依赖项添加到您的 pom.xml,
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-i18n</artifactId>
<version>1.1</version>
</dependency>
或从 Maven Central Repository 下载 nv-i18n 的 jar直接。
nv-i18n 源代码和 javadoc 托管在 GitHub 上。
来源:https://github.com/TakahikoKawasaki/nv-i18n
Javadoc:http://takahikokawasaki.github.com/nv-i18n/
关于java - 从 'fr_FR' 类型语言代码转换为 ISO 639-2 语言代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5155988/
我需要在 Java 中从 fr_FR 这样的字符串进行转换, en_GB , ja_JP (意思是法语、英语和日语)到他们的 ISO 639-2 表示:fre/fra , eng , jpn . 你知
这里的代码在 Python 中,但在使用语言环境的 C/C++ 中的行为应该是相同的。 >>> import locale >>> locale.setlocale(locale.LC_ALL, "f
我是一名优秀的程序员,十分优秀!