6

ユーザーがUSBデバイスのUSB文字列記述子を構成できるようにするツールをC#で開発しています。文字列記述子の1つは言語IDです。不可解な言語IDの代わりに言語名のリストをUIに表示したい。USB{言語ID-言語名}マップを取得するAPIが見つかりませんでした。

WindowsロケールID(LCID)を見ると、LCIDとUSB言語IDは同じように見えます(比較したいくつかのエントリから推測されます)。

だから、私の質問は

  1. LCIDとUSB言語IDは同じですか?
  2. (1)に「はい」の場合、それを使用する際の落とし穴はありますか?
4

2 に答える 2

3

それらは確かに密接に関連していますが、完全に同じではありません。

Ankurによってリンクされたドキュメントによると:

LanguageIDパラメータは言語IDを指定します(Microsoft Win32値と同じ値が使用されますLANGID)。

LANGID値は、Win32LCID値の一部を形成します。これは、LCIDのドキュメントを調べることで確認できます。

各ロケールには、一意の識別子、言語識別子と並べ替え順序識別子で構成される32ビット値があります。

したがって、2つの値は完全に互換性があるわけではありません。ソート順識別子(LCID値の他の部分)を変更することにより、すべて同じ言語を表す(つまり、同じLANGIDを持つ)複数のLCID値を作成することができます。

2つを同等として扱うことは、ほとんどの場合機能する可能性があります(これは、目視検査の結果を説明します)が、機能しない場合もあります。仮定に頼らず、ドキュメントとの一貫性とコードの堅牢性を確保するために必要な追加の作業を行うことをお勧めします。

Win32 SDKヘッダーは、LCIDとLANGID間の相互変換に役立ついくつかのマクロを提供します。これらをヘッダーで検索して、C#ヘルパー関数に変換できます。ここで興味があるのは次のとおりです。

  • マクロは、言語ID(LANGID)とソート順IDを受け入れ、それらを組み合わせてLCIDを生成します。ソート順識別子は気にしないので、これを使用して、その言語のデフォルトのソート順を示すことができます。MAKELCIDSORT_DEFAULT

  • LCID値から言語識別子(LANGID)を抽出するマクロLANGIDFROMLCID

これらのヘルパー関数の1つを使用すると、LCIDパラメーターを受け入れるNLSAPIの1つを呼び出したときに有効な結果を確実に得ることができます。

于 2013-03-15T08:54:10.597 に答える
1

私はそれらが同じだと思います。このリンクを見てください。

http://msdn.microsoft.com/en-us/library/windows/hardware/ff540156(v=vs.85).aspx

于 2013-03-15T06:04:10.503 に答える