char *currentLocale = setlocale(LC_ALL,"");
在 Windows 中 setlocale 返回“English_United States”,但在 linux 中返回“en_US”。有没有一种通用的方法来识别英语语言环境?或者我必须检查所有可用的语言环境值?(“English_United States” || “en_US” || 等)
您可能需要检查:
http://en.wikipedia.org/wiki/Locale
http://en.wikipedia.org/wiki/ISO_639
理论上,Windows、Linux、MAc等操作系统可能有支持“语言下划线国家”格式的函数库,即使它们有自己的内部标准:
在这种情况下,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
它不是很漂亮,但它应该可以工作。