我将我的应用程序移植到Linux(从Windows)。
我有这样的代码:
char buffer[32] = {0}; if ( GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_ICOUNTRY, buffer, _countof(buffer)) ) { std::string newPrefix(buffer); if ( !newPrefix.empty() && ( newPrefix != "-1" ) ) { countryPrefix_ = newPrefix; } }
我需要一个返回“基于国际电话代码的国家/地区代码”的function(例如,美国和加拿大的“1”,澳大利亚的“61”等等)
国家应从操作系统的date/时间设置(在Windows中:控制面板 – 区域和语言选项)。
Unix没有OS宽区域设置。 可以为不覆盖它的用户使用默认值,但大多数用户会覆盖它。 把它作为“C”是很常见的。
没有标准的C或C ++方法来获取你想要的信息。
获取与区域相关信息的posix方法是设置区域设置和使用nl_langinfo()(返回一个char*
)。 虽然没有为国际电话代码定义的POSIX宏,glibc有一个扩展( _NL_TELEPHONE_INT_PREFIX
)。
例:
#include <langinfo.h> ... if (setlocale(LC_ALL, "") == NULL) { fprintf(stderr, "Unable to set locale.\n"); abort(); } printf("Telephone international prefix: %s\n", nl_langinfo(_NL_TELEPHONE_INT_PREFIX));