Roger Luo

超越梦想一起飞
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NLS编程

Posted on 2013-01-05 17:07  Roger Luo  阅读(272)  评论(0编辑  收藏  举报

NLS(National Language Support)

Background(背景)

Each language has a language name and a language identifierthat indicate the particular code page (ANSI, DOS, Macintosh) used to represent the geographical location for the language on the operating system. 

Data Type(数据类型)

typedef WORD LANGID;
typedef DWORD LCID;
typedef DWORD LCTYPE;


Usage(使用)

Each locale has a unique identifier, a 32-bit value that consists of a language identifier and a sort order identifier. The locale identifier is a standard international numeric abbreviation and has the components necessary to uniquely identify one of the installed operating system-defined locales. 

The following illustration shows the format of the bits in a locale identifier.
+-------------+---------+-------------------------+
|   Reserved  | Sort ID |      Language ID        |
+-------------+---------+-------------------------+
31         20 19     16 15                      0   bit

The following illustration shows the format of the bits in a language identifier. 
+-------------------------+-------------------------+
|     SubLanguage ID      |   Primary Language ID   |
+-------------------------+-------------------------+
15                    10  9                         0   bit

Get LCID(locale indentifier)

LCID GetThreadLocale(void);


Modify customed LCID for thread
BOOL SetThreadLocale ( LCID Locale );

Compose LCID
DWORD MAKELCID(
	  WORD wLanguageID,  
	  WORD wSortID
	);
for sort order identifier, please refer to link.

Compose LANGID
WORD MAKELANGID(
	  USHORT usPrimaryLanguage,  
	  USHORT usSubLanguage       
	);

for languange identifier constants and strings, please refer to  link


Example:
SetThreadLocale(MAKELCID(MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), SORT_GERMAN_PHONE_BOOK));

Extract Sort Identifier
WORD SORTIDFROMLCID(
	  LCID lcid  
	);

Extract Language Identifer
	WORD LANGIDFROMLCID(
	  LCID lcid  
	);

Extract Primary language identfier
	WORD PRIMARYLANGID(
	  WORD lgid  
	);

Extract a sublanguage identifier
	WORD SUBLANGID(
	  WORD lgid  
	);