在计算机编程中,语言环境是指用于口语和书面交流的一系列属性。每种语言都有一个语言名称和一个语言标识符,后者指示用于在操作系统上表示语言的特定代码页(如ANSI、DOS、Macintosh)。例如,英语的中立语言名称为"en",而更具有地理特定性的语言可以通过包含地区和国家/地区信息的名称来表示,如美国英语的"en-US"。希伯来语则使用"He-HE"。有些用户可能需要在日常工作中切换两种或更多安装的语言。例如,使用阿拉伯语或希伯来语的用户肯定也需要使用拉丁字符,因此,在这些情况下,按下左Shift + Alt / 右Shift + Alt可以实现这种切换。
在用户界面方面,目标是检测当前活动屏幕上使用的语言,因此小程序应该是被动的,即在后台运行,但同时出现在最前面(这样就可以看到它提供的指示)。这样,无论当前激活的应用程序是什么,都可以查看当前状态(在例子中,当前活动的语言)。例如,当前激活的窗口是记事本,当前使用的语言是希伯来语。
为了检测当前选定的语言,调用了GetLocaleInfoW()函数。还有一个更新的版本GetLocaleInfoEx(),如果目标是Windows Vista及更高版本,建议使用这个函数。在示例中,使用了GetLocaleInfoW()。示例集中在一个方面:文本的方向可以是从左到右,也可以是从右到左。使用相同的API,可以获取语言名称、默认当前语言以及更多信息。
// C++代码示例
auto layout = GetKeyboardLayout(GetWindowThreadProcessId(win->
GetSafeHwnd(), NULL));
auto lcid = MAKELCID(LOWORD(layout), SORT_DEFAULT);
LOCALESIGNATURE localesig;
if (GetLocaleInfoW(lcid, LOCALE_FONTSIGNATURE,
(LPWSTR)&localesig,
sizeof(localesig) / sizeof(WCHAR)) != 0)
ret = (localesig.lsUsb[3] & 0x08000000) != 0;
结果,"ret"将持有TRUE,如果默认文本方向是从右到左,或者FALSE,如果默认文本方向是从左到右。
语言标识符列表包含了可用和支持的语言。每个语言标识符由一个主要语言标识符组成,表示语言,以及一个次要语言标识符,表示国家/地区。语言标识符对应于特定的地区设置,例如,美国英语,表示为"en-US"。语言标识符用作地区标识符的一部分。
使用MFC来创建界面,但所有的API调用都是纯Win32。使用MFC可以快速创建应用程序,特别是当需要用户界面时。在案例中,通过调用SetTimer(TIMER_EVENT_SHOWLANG, 1000, NULL)创建了一个计时器,然后可以将代码放置在:
// C++代码示例
void CDisplayLocaleDlg::OnTimer(UINT_PTR nIDEvent)