首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LCID转换为语言字符串

将LCID转换为语言字符串
EN

Stack Overflow用户
提问于 2011-10-13 05:57:25
回答 1查看 7.7K关注 0票数 6

在我的应用程序中,我必须查询系统和用户区域设置,并将它们作为字符串返回(比如en-US而不是语言代码)。我可以从GetSystemDefaultLCID()和GetUserDefaultLCID()函数中获得这些语言的LCID,但是我正在挣扎的是从LCID到语言字符串的转换。

我的应用程序也必须运行在Windows上,所以我不能使用LCIDToLocaleName() Win API。到目前为止,我唯一能够得到的语言环境名称是使用GetLocaleInfo() Win API,将LOCALE_SYSTEM_DEFAULT和LOCALE_USER_DEFAULT作为LCID,LOCALE_SISO639LANGNAME作为LCType。我的代码有点类似于查询系统区域设置

代码语言:javascript
复制
int localeBufferSize = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, NULL, 0);
char *sysLocale = new char[localeBufferSize];
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, sysLocale,localeBufferSize);

但我得到的价值只是语言名称(只有en-US)。要获得完整的区域设置,我必须第二次调用GetLocaleInfo()两次将LOCALE_SISO3166CTRYNAME作为LCType传递,然后追加这两个值。有什么更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2011-10-13 19:36:07

很抱歉这么说,但不是。只有两个(或更多)字母代码是标准化的,它们的连接不是。但!不需要动态缓冲区分配。引用自MSDN:

此字符串允许的最大字符数为9个,包括一个终止空字符。

读到这一点,动态分配所需的缓冲区听起来有点过分,所以如果您真的想保持缓冲区的干净,可以这样做:

代码语言:javascript
复制
char buf[19];
int ccBuf = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, buf, 9);
buf[ccBuf++] = '-';
ccBuf += GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, buf+ccBuf, 9);
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7749999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档