【问题标题】:Locale format for various operating systems各种操作系统的语言环境格式
【发布时间】:2012-07-12 18:06:04
【问题描述】:
char *currentLocale = setlocale(LC_ALL,"");

在 Windows 中 setlocale 返回“English_United States”,但在 linux 中返回“en_US”。有没有一种通用的方法来识别英语语言环境?或者我必须检查所有可用的语言环境值? ("English_United States" || "en_US" || 等)

【问题讨论】:

  • 编写一个检测你的操作系统并返回相同值的函数:)

标签: c++ c locale


【解决方案1】:

您可能需要检查:

http://en.wikipedia.org/wiki/Locale

http://en.wikipedia.org/wiki/ISO_639

理论上,Windows、Linux、MAC 和其他操作系统。可能有支持“语言下划线国家”格式的函数库,即使它们有其内部标准:

http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

【讨论】:

    【解决方案2】:

    在这种情况下,Windows 似乎是唯一的异常值 - 大多数操作系统使用(更明智的)“en_US”格式。您可以使用 #ifdef 之类的东西向 Windows 编译器提供自定义代码:

    #ifdef __unix__
    setlocale(LC_ALL, "en_US");
    #elif defined _WIN32
    setlocale(LC_ALL, "English");
    #else
    #error "Can't figure out how to set locale to English. Stop.";
    #endif
    

    它不是很漂亮,但它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多