java - 如何将 Microsoft Locale ID (LCID) 转换为 Java 中的语言代码或 Locale 对象

标签 java windows locale lcid

我需要翻译 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/

相关文章:

windows - XCOPY:在 BATCH 中无提示地覆盖所有

java - 使用 Java 循环 List 以获取键和值对

java - Java 中读取/解析控制台输入、Scanner 或 BufferedReader 哪个更快?

java - 如何使用 JPA 2 和 HBN maven 插件创建 hibernate 友好的 MySQL 数据库字段?

windows - Qt交叉编译

c++ - <regex> 无法处理西里尔字母字符

java - 将 json 输出作为参数传递给 java 中的 linux 程序

c++ - 使用 mingw64 c++ "declaration of ' __RPC__range' 无类型编译 imapi2 应用程序时 imapi2.h 中的错误”

android - 如何更改另一个应用程序的语言环境?

c++ - 在进程范围上设置ThreadLocale