我需要翻译 Microsoft locale ID ,例如 1033(美国英语),转换为 ISO 639 language code或直接进入 Java Locale实例。 (编辑:或者甚至简单地进入 Microsoft 表中的“语言 - 国家/地区”。)
这可能吗?最简单的方法是什么?当然,最好只使用 JDK 标准库,但如果那不可能,则使用第 3 方库。
最佳答案
你可以使用 GetLocaleInfo执行此操作(假设您在 Windows (win2k+) 上运行)。
此 C++ 代码演示了如何使用该函数:
#include "windows.h"
int main()
{
HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(INVALID_HANDLE_VALUE == stdout) return 1;
LCID Locale = 0x0c01; //Arabic - Egypt
int nchars = GetLocaleInfoW(Locale, LOCALE_SISO639LANGNAME, NULL, 0);
wchar_t* LanguageCode = new wchar_t[nchars];
GetLocaleInfoW(Locale, LOCALE_SISO639LANGNAME, LanguageCode, nchars);
WriteConsoleW(stdout, LanguageCode, nchars, NULL, NULL);
delete[] LanguageCode;
return 0;
}
将它变成 JNA 并不需要太多工作称呼。 (提示:将常量作为整数发出以查找它们的值。)
示例 JNA 代码:
使用 JNI 有点复杂,但对于相对微不足道的任务来说是易于管理的。
至少,我会考虑使用 native 调用来构建您的转换数据库。我不确定 Windows 是否有办法枚举 LCID,但 .Net 中肯定有一些东西。作为构建级别的东西,这不是一个巨大的负担。我想避免手动维护列表。
关于java - 如何将 Microsoft Locale ID (LCID) 转换为 Java 中的语言代码或 Locale 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1192361/