はじめての親子ハイキングに挑戦!! >>

GetLocaleInfoでロケール情報が取れますが、
ここから、言語とコードページを識別したいのですが
たとえば、中国語(繁体字)、中国語(簡体字)、韓国語、
タイ語、英語といった単位で識別したいのですが
LOCALE_SLANGUAGEなどで、言語を取ろうとすると、
同じ中国語(繁体字)でも台湾と香港が別言語として
識別されたりして、細かすぎて使えず
かといって、ANSIコードページで識別しようとすると
西欧言語がすべて1251となって英語とフランス語などの識別が
できません。
自分で、ロケールID<->自分で作った言語識別コードの
変換テーブルを作成すればできる気もしますが
すでに世の中に出回っているロジックがあれば
それを使いたいと思います。

なにか、よい方法をご存知ないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> LOCALE_SLANGUAGEなどで、言語を取ろうとすると、


> 同じ中国語(繁体字)でも台湾と香港が別言語として
> 識別されたりして、細かすぎて使えず

言語 ID (LOCALE_ILANGUAGE) を丸ごと使おうとするからそうなります.
PRIMARYLANGID() マクロを使って言語 ID から primary language ID だけを
取り出せば同じ中国語 (LANG_CHINESE) として認識できます.

なお言語 ID は Windows 独自のものだと思うので (未確認),
Windows 以外のシステムとの互換性が必要ならば,言語 ID じゃなくて
ISO639 言語コード (LOCALE_SISO639LANGNAME) の方がいいかも.

ISO 639 (Wikipedia)
http://ja.wikipedia.org/wiki/ISO_639


> ANSIコードページで識別しようとすると西欧言語がすべて
> 1251となって英語とフランス語などの識別ができません。

そりゃ Windows-1252 (1251 はキリル文字ね) は複数西欧言語対応の
符号化文字集合ですから….

Code Pages Supported by Windows (Microsoft)
http://www.microsoft.com/globaldev/reference/Win …

コードページ (Wikipedia)
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC% …



以下,2年ほど前に作った全ロケール情報取得テストプログラム
(GetLocaleInfoW() 使用) の出力から,言語とコードページに
関する部分だけ抜粋.
(元々 Unicode テキストなので一部文字化けしています.)

[4] Locale ID: 0x00000404
LOCALE_SSORTNAME: "画数" (2)
LOCALE_ILANGUAGE: 0x0404 (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
LOCALE_IDEFAULTLANGUAGE: 0x0404 (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
LOCALE_SLANGUAGE: "中国語 (台湾)" (8)
LOCALE_SABBREVLANGNAME: "CHT" (3)
LOCALE_SNATIVELANGNAME: "中文(繁體)" (6)
LOCALE_SENGLANGUAGE: "Chinese" (7)
LOCALE_SISO639LANGNAME: "zh" (2)
LOCALE_ICOUNTRY: 886 (CTRY_TAIWAN)
LOCALE_IDEFAULTCOUNTRY: 886 (CTRY_TAIWAN)
LOCALE_SCOUNTRY: "台湾" (2)
LOCALE_SABBREVCTRYNAME: "TWN" (3)
LOCALE_SNATIVECTRYNAME: "台灣" (2)
LOCALE_SENGCOUNTRY: "Taiwan" (6)
LOCALE_SISO3166CTRYNAME: "TW" (2)
LOCALE_IDEFAULTCODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))
LOCALE_IDEFAULTANSICODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))
LOCALE_IDEFAULTEBCDICCODEPAGE: 500 (IBM EBCDIC - International)
LOCALE_IDEFAULTMACCODEPAGE: 10002 (MAC - Traditional Chinese (Big5))

[68] Locale ID: 0x00000804
LOCALE_SSORTNAME: "発音" (2)
LOCALE_ILANGUAGE: 0x0804 (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
LOCALE_IDEFAULTLANGUAGE: 0x0804 (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
LOCALE_SLANGUAGE: "中国語 (中国)" (8)
LOCALE_SABBREVLANGNAME: "CHS" (3)
LOCALE_SNATIVELANGNAME: "中文(简体)" (6)
LOCALE_SENGLANGUAGE: "Chinese" (7)
LOCALE_SISO639LANGNAME: "zh" (2)
LOCALE_ICOUNTRY: 86 (CTRY_PRCHINA)
LOCALE_IDEFAULTCOUNTRY: 86 (CTRY_PRCHINA)
LOCALE_SCOUNTRY: "中華人民共和国" (7)
LOCALE_SABBREVCTRYNAME: "CHN" (3)
LOCALE_SNATIVECTRYNAME: "中华人民共和国" (7)
LOCALE_SENGCOUNTRY: "People's Republic of China" (26)
LOCALE_SISO3166CTRYNAME: "CN" (2)
LOCALE_IDEFAULTCODEPAGE: 936 (ANSI/OEM - Simplified Chinese (GBK))
LOCALE_IDEFAULTANSICODEPAGE: 936 (ANSI/OEM - Simplified Chinese (GBK))
LOCALE_IDEFAULTEBCDICCODEPAGE: 500 (IBM EBCDIC - International)
LOCALE_IDEFAULTMACCODEPAGE: 10008 (MAC - Simplified Chinese (GB2312))

[83] Locale ID: 0x00000C04
LOCALE_SSORTNAME: "画数" (2)
LOCALE_ILANGUAGE: 0x0C04 (LANG_CHINESE, SUBLANG_CHINESE_HONGKONG)
LOCALE_IDEFAULTLANGUAGE: 0x0C04 (LANG_CHINESE, SUBLANG_CHINESE_HONGKONG)
LOCALE_SLANGUAGE: "中国語 (香港)" (8)
LOCALE_SABBREVLANGNAME: "ZHH" (3)
LOCALE_SNATIVELANGNAME: "中文(繁體)" (6)
LOCALE_SENGLANGUAGE: "Chinese" (7)
LOCALE_SISO639LANGNAME: "zh" (2)
LOCALE_ICOUNTRY: 852 (CTRY_HONG_KONG)
LOCALE_IDEFAULTCOUNTRY: 852 (CTRY_HONG_KONG)
LOCALE_SCOUNTRY: "中華人民共和国香港特別行政区" (14)
LOCALE_SABBREVCTRYNAME: "HKG" (3)
LOCALE_SNATIVECTRYNAME: "香港特别行政区" (7)
LOCALE_SENGCOUNTRY: "Hong Kong S.A.R." (16)
LOCALE_SISO3166CTRYNAME: "HK" (2)
LOCALE_IDEFAULTCODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))
LOCALE_IDEFAULTANSICODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))
LOCALE_IDEFAULTEBCDICCODEPAGE: 500 (IBM EBCDIC - International)
LOCALE_IDEFAULTMACCODEPAGE: 10002 (MAC - Traditional Chinese (Big5))

[90] Locale ID: 0x00001004
LOCALE_SSORTNAME: "発音" (2)
LOCALE_ILANGUAGE: 0x1004 (LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE)
LOCALE_IDEFAULTLANGUAGE: 0x1004 (LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE)
LOCALE_SLANGUAGE: "中国語 (シンガポール)" (12)
LOCALE_SABBREVLANGNAME: "ZHI" (3)
LOCALE_SNATIVELANGNAME: "中文(简体)" (6)
LOCALE_SENGLANGUAGE: "Chinese" (7)
LOCALE_SISO639LANGNAME: "zh" (2)
LOCALE_ICOUNTRY: 65 (CTRY_SINGAPORE)
LOCALE_IDEFAULTCOUNTRY: 65 (CTRY_SINGAPORE)
LOCALE_SCOUNTRY: "シンガポール" (6)
LOCALE_SABBREVCTRYNAME: "SGP" (3)
LOCALE_SNATIVECTRYNAME: "新加坡" (3)
LOCALE_SENGCOUNTRY: "Singapore" (9)
LOCALE_SISO3166CTRYNAME: "SG" (2)
LOCALE_IDEFAULTCODEPAGE: 936 (ANSI/OEM - Simplified Chinese (GBK))
LOCALE_IDEFAULTANSICODEPAGE: 936 (ANSI/OEM - Simplified Chinese (GBK))
LOCALE_IDEFAULTEBCDICCODEPAGE: 500 (IBM EBCDIC - International)
LOCALE_IDEFAULTMACCODEPAGE: 10008 (MAC - Simplified Chinese (GB2312))

[18] Locale ID: 0x00000412
LOCALE_SSORTNAME: "Dictionary" (10)
LOCALE_ILANGUAGE: 0x0412 (LANG_KOREAN, SUBLANG_KOREAN)
LOCALE_IDEFAULTLANGUAGE: 0x0412 (LANG_KOREAN, SUBLANG_KOREAN)
LOCALE_SLANGUAGE: "韓国語" (3)
LOCALE_SABBREVLANGNAME: "KOR" (3)
LOCALE_SNATIVELANGNAME: "한국어" (3)
LOCALE_SENGLANGUAGE: "Korean" (6)
LOCALE_SISO639LANGNAME: "ko" (2)
LOCALE_ICOUNTRY: 82 (CTRY_SOUTH_KOREA)
LOCALE_IDEFAULTCOUNTRY: 82 (CTRY_SOUTH_KOREA)
LOCALE_SCOUNTRY: "韓国" (2)
LOCALE_SABBREVCTRYNAME: "KOR" (3)
LOCALE_SNATIVECTRYNAME: "대한민국" (4)
LOCALE_SENGCOUNTRY: "Korea" (5)
LOCALE_SISO3166CTRYNAME: "KR" (2)
LOCALE_IDEFAULTCODEPAGE: 949 (ANSI/OEM - Korean (Unified Hangeul Code))
LOCALE_IDEFAULTANSICODEPAGE: 949 (ANSI/OEM - Korean (Unified Hangeul Code))
LOCALE_IDEFAULTEBCDICCODEPAGE: 20833 (IBM EBCDIC - Korean Extended)
LOCALE_IDEFAULTMACCODEPAGE: 10003 (MAC - Korean)

[29] Locale ID: 0x0000041E
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x041E (LANG_THAI)
LOCALE_IDEFAULTLANGUAGE: 0x041E (LANG_THAI)
LOCALE_SLANGUAGE: "タイ語" (3)
LOCALE_SABBREVLANGNAME: "THA" (3)
LOCALE_SNATIVELANGNAME: "ไทย" (3)
LOCALE_SENGLANGUAGE: "Thai" (4)
LOCALE_SISO639LANGNAME: "th" (2)
LOCALE_ICOUNTRY: 66 (CTRY_THAILAND)
LOCALE_IDEFAULTCOUNTRY: 66 (CTRY_THAILAND)
LOCALE_SCOUNTRY: "タイ" (2)
LOCALE_SABBREVCTRYNAME: "THA" (3)
LOCALE_SNATIVECTRYNAME: "ไทย" (3)
LOCALE_SENGCOUNTRY: "Thailand" (8)
LOCALE_SISO3166CTRYNAME: "TH" (2)
LOCALE_IDEFAULTCODEPAGE: 874 (ANSI/OEM - Thai (same as 28605, ISO 8859-15))
LOCALE_IDEFAULTANSICODEPAGE: 874 (ANSI/OEM - Thai (same as 28605, ISO 8859-15))
LOCALE_IDEFAULTEBCDICCODEPAGE: 20838 (IBM EBCDIC - Thai)
LOCALE_IDEFAULTMACCODEPAGE: 10021 (MAC - Thai)

[9] Locale ID: 0x00000409
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x0409 (LANG_ENGLISH, SUBLANG_ENGLISH_US)
LOCALE_IDEFAULTLANGUAGE: 0x0409 (LANG_ENGLISH, SUBLANG_ENGLISH_US)
LOCALE_SLANGUAGE: "英語 (米国)" (7)
LOCALE_SABBREVLANGNAME: "ENU" (3)
LOCALE_SNATIVELANGNAME: "English" (7)
LOCALE_SENGLANGUAGE: "English" (7)
LOCALE_SISO639LANGNAME: "en" (2)
LOCALE_ICOUNTRY: 1 (CTRY_UNITED_STATES)
LOCALE_IDEFAULTCOUNTRY: 1 (CTRY_UNITED_STATES)
LOCALE_SCOUNTRY: "米国" (2)
LOCALE_SABBREVCTRYNAME: "USA" (3)
LOCALE_SNATIVECTRYNAME: "United States" (13)
LOCALE_SENGCOUNTRY: "United States" (13)
LOCALE_SISO3166CTRYNAME: "US" (2)
LOCALE_IDEFAULTCODEPAGE: 437 (OEM - U.S.)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 37 (IBM EBCDIC - U.S./Canada)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

[70] Locale ID: 0x00000809
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x0809 (LANG_ENGLISH, SUBLANG_ENGLISH_UK)
LOCALE_IDEFAULTLANGUAGE: 0x0809 (LANG_ENGLISH, SUBLANG_ENGLISH_UK)
LOCALE_SLANGUAGE: "英語 (英国)" (7)
LOCALE_SABBREVLANGNAME: "ENG" (3)
LOCALE_SNATIVELANGNAME: "English" (7)
LOCALE_SENGLANGUAGE: "English" (7)
LOCALE_SISO639LANGNAME: "en" (2)
LOCALE_ICOUNTRY: 44 (CTRY_UNITED_KINGDOM)
LOCALE_IDEFAULTCOUNTRY: 44 (CTRY_UNITED_KINGDOM)
LOCALE_SCOUNTRY: "英国" (2)
LOCALE_SABBREVCTRYNAME: "GBR" (3)
LOCALE_SNATIVECTRYNAME: "United Kingdom" (14)
LOCALE_SENGCOUNTRY: "United Kingdom" (14)
LOCALE_SISO3166CTRYNAME: "GB" (2)
LOCALE_IDEFAULTCODEPAGE: 850 (OEM - Multilingual Latin I)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 20285 (IBM EBCDIC - United Kingdom)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

[85] Locale ID: 0x00000C09
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x0C09 (LANG_ENGLISH, SUBLANG_ENGLISH_AUS)
LOCALE_IDEFAULTLANGUAGE: 0x0C09 (LANG_ENGLISH, SUBLANG_ENGLISH_AUS)
LOCALE_SLANGUAGE: "英語 (オーストラリア)" (12)
LOCALE_SABBREVLANGNAME: "ENA" (3)
LOCALE_SNATIVELANGNAME: "English" (7)
LOCALE_SENGLANGUAGE: "English" (7)
LOCALE_SISO639LANGNAME: "en" (2)
LOCALE_ICOUNTRY: 61 (CTRY_AUSTRALIA)
LOCALE_IDEFAULTCOUNTRY: 61 (CTRY_AUSTRALIA)
LOCALE_SCOUNTRY: "オーストラリア" (7)
LOCALE_SABBREVCTRYNAME: "AUS" (3)
LOCALE_SNATIVECTRYNAME: "Australia" (9)
LOCALE_SENGCOUNTRY: "Australia" (9)
LOCALE_SISO3166CTRYNAME: "AU" (2)
LOCALE_IDEFAULTCODEPAGE: 850 (OEM - Multilingual Latin I)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 500 (IBM EBCDIC - International)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

[12] Locale ID: 0x0000040C
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x040C (LANG_FRENCH, SUBLANG_FRENCH)
LOCALE_IDEFAULTLANGUAGE: 0x040C (LANG_FRENCH, SUBLANG_FRENCH)
LOCALE_SLANGUAGE: "フランス語 (フランス)" (12)
LOCALE_SABBREVLANGNAME: "FRA" (3)
LOCALE_SNATIVELANGNAME: "français" (8)
LOCALE_SENGLANGUAGE: "French" (6)
LOCALE_SISO639LANGNAME: "fr" (2)
LOCALE_ICOUNTRY: 33 (CTRY_FRANCE)
LOCALE_IDEFAULTCOUNTRY: 33 (CTRY_FRANCE)
LOCALE_SCOUNTRY: "フランス" (4)
LOCALE_SABBREVCTRYNAME: "FRA" (3)
LOCALE_SNATIVECTRYNAME: "France" (6)
LOCALE_SENGCOUNTRY: "France" (6)
LOCALE_SISO3166CTRYNAME: "FR" (2)
LOCALE_IDEFAULTCODEPAGE: 850 (OEM - Multilingual Latin I)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 20297 (IBM EBCDIC - France)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

[72] Locale ID: 0x0000080C
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x080C (LANG_FRENCH, SUBLANG_FRENCH_BELGIAN)
LOCALE_IDEFAULTLANGUAGE: 0x080C (LANG_FRENCH, SUBLANG_FRENCH_BELGIAN)
LOCALE_SLANGUAGE: "フランス語 (ベルギー)" (12)
LOCALE_SABBREVLANGNAME: "FRB" (3)
LOCALE_SNATIVELANGNAME: "français" (8)
LOCALE_SENGLANGUAGE: "French" (6)
LOCALE_SISO639LANGNAME: "fr" (2)
LOCALE_ICOUNTRY: 32 (CTRY_BELGIUM)
LOCALE_IDEFAULTCOUNTRY: 32 (CTRY_BELGIUM)
LOCALE_SCOUNTRY: "ベルギー" (4)
LOCALE_SABBREVCTRYNAME: "BEL" (3)
LOCALE_SNATIVECTRYNAME: "Belgique" (8)
LOCALE_SENGCOUNTRY: "Belgium" (7)
LOCALE_SISO3166CTRYNAME: "BE" (2)
LOCALE_IDEFAULTCODEPAGE: 850 (OEM - Multilingual Latin I)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 20297 (IBM EBCDIC - France)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

[87] Locale ID: 0x00000C0C
LOCALE_SSORTNAME: "既定値" (3)
LOCALE_ILANGUAGE: 0x0C0C (LANG_FRENCH, SUBLANG_FRENCH_CANADIAN)
LOCALE_IDEFAULTLANGUAGE: 0x0C0C (LANG_FRENCH, SUBLANG_FRENCH_CANADIAN)
LOCALE_SLANGUAGE: "フランス語 (カナダ)" (11)
LOCALE_SABBREVLANGNAME: "FRC" (3)
LOCALE_SNATIVELANGNAME: "français" (8)
LOCALE_SENGLANGUAGE: "French" (6)
LOCALE_SISO639LANGNAME: "fr" (2)
LOCALE_ICOUNTRY: 2 (CTRY_CANADA)
LOCALE_IDEFAULTCOUNTRY: 2 (CTRY_CANADA)
LOCALE_SCOUNTRY: "カナダ" (3)
LOCALE_SABBREVCTRYNAME: "CAN" (3)
LOCALE_SNATIVECTRYNAME: "Canada" (6)
LOCALE_SENGCOUNTRY: "Canada" (6)
LOCALE_SISO3166CTRYNAME: "CA" (2)
LOCALE_IDEFAULTCODEPAGE: 850 (OEM - Multilingual Latin I)
LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)
LOCALE_IDEFAULTEBCDICCODEPAGE: 20297 (IBM EBCDIC - France)
LOCALE_IDEFAULTMACCODEPAGE: 10000 (MAC - Roman)

この回答への補足

回答ありがとうございます。
PRIMARYLANGIDマクロをつかってみました。
この場合、中国語の簡体字と繁体字や
アゼルバイジャン語 (キリル)
アゼルバイジャン語 (ラテン)
などの言葉は同じだが、システム上、違う文字表示を
使っている場合は、システム的には、別の言語としてみなしたい場合に
(リソースファイルを作成する単位として、システム的な
 言語を定義したい)
不都合があるので、
LOCALE_SNATIVELANGNAMEを使うのが、一番かなと思ったのですが
これは名称文字列をもってきますが、文字列そのものの比較は
なにか違和感を感じます、コードはもってないでしょうか?

補足日時:2007/10/29 17:04
    • good
    • 0

> LOCALE_SLANGUAGEなどで、言語を取ろうとすると、


> 同じ中国語(繁体字)でも台湾と香港が別言語として
> 識別されたりして、細かすぎて使えず

> 中国語の簡体字と繁体字 (中略) などの言葉は同じだが、
> システム上、違う文字表示を使っている場合は、
> システム的には、別の言語としてみなしたい

一瞬,当初の要求と正反対のような気がして混乱しましたが,
元の質問をよく読むと確かに

> 中国語(繁体字)、中国語(簡体字)
> (中略) といった単位で識別したい

となってますね.(^^;

言語と文字集合を一緒くたに扱おうとするからややこしくなるんだと思います.
言語は言語 ID (または primary language ID) で,
文字集合はコードページ (LOCALE_IDEFAULTANSICODEPAGE) で
識別すればいいんじゃないでしょうか.


●中国語の場合
 LOCALE_SLANGUAGE: "中国語 (中国)" (8)
 LOCALE_ILANGUAGE: 0x0804 (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
 LOCALE_IDEFAULTANSICODEPAGE: 936 (ANSI/OEM - Simplified Chinese (GBK))

 LOCALE_SLANGUAGE: "中国語 (台湾)" (8)
 LOCALE_ILANGUAGE: 0x0404 (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
 LOCALE_IDEFAULTANSICODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))

 LOCALE_SLANGUAGE: "中国語 (香港)" (8)
 LOCALE_ILANGUAGE: 0x0C04 (LANG_CHINESE, SUBLANG_CHINESE_HONGKONG)
 LOCALE_IDEFAULTANSICODEPAGE: 950 (ANSI/OEM - Traditional Chinese (Big5))

●アゼルバイジャン語の場合
 LOCALE_SLANGUAGE: "アゼルバイジャン語 (ラテン)" (15)
 LOCALE_ILANGUAGE: 0x042C (LANG_AZERI, SUBLANG_AZERI_LATIN)
 LOCALE_IDEFAULTANSICODEPAGE: 1254 (ANSI - Turkish)

 LOCALE_SLANGUAGE: "アゼルバイジャン語 (キリル)" (15)
 LOCALE_ILANGUAGE: 0x082C (LANG_AZERI, SUBLANG_AZERI_CYRILLIC)
 LOCALE_IDEFAULTANSICODEPAGE: 1251 (ANSI - Cyrillic)

なおアゼルバイジャン語の場合は,SUBLANG_* が使用する文字集合を
表していますが,香港の場合はそうではないので,SUBLANG_* で
文字集合を識別するという手は一般には使えません.



> LOCALE_SNATIVELANGNAMEを使うのが、一番かなと思ったのですが
> これは名称文字列をもってきますが、文字列そのものの比較は
> なにか違和感を感じます、

LOCALE_SNATIVELANGNAME から言語と文字集合を識別しようとする
ならば,結局自分で対応表を用意するしかないと思います.

#1 の出力例だけから判断すると,文字集合ぐらいは識別できそうに
思えるかもしれませんが,次のような場合もあります.

 LOCALE_SLANGUAGE: "フィンランド語" (7)
 LOCALE_SNATIVELANGNAME: "suomi" (5)
 LOCALE_ILANGUAGE: 0x040B (LANG_FINNISH)
 LOCALE_IDEFAULTANSICODEPAGE: 1252 (ANSI - Latin I)

LOCALE_SNATIVELANGNAME に出現している個別の文字から文字集合を
識別すると,フィンランド語に必要な Windows-1252 や ISO-8859-1 ではなく,
ASCII で十分と誤判定してしまうでしょう.


> コードはもってないでしょうか?

ないはずです.LOCALE_"I"NATIVELANGNAME というマクロは
定義されていませんし,検索してもヒットしません.
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり、ご指摘の通り、
主言語とコードページを見るのが一番よさそうですね。

お礼日時:2007/11/06 10:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qロケールに対応するストリングテーブルの参照について

こんにちは。初歩的な質問かもしれませんが、お分かりの方は是非ご教授願います。以前にもロケールとストリングテーブルについてのQAがNo.445463でされていますが、こちらで出された回答と現象が違うかもしれませんので、書いてみました。
<現象>
開発環境上(VisualBasic6.0Enterprise)でストリングテーブルを日本語と英語(U.S.)の2つ設定し、同環境上でロケールを日本語⇔英語切替を行いながらデバッグ実行をしました。その際はロケールに対応したストリングが呼び出され、該当した言語で表現されました。
しかし、実際作成したexeにて同様の実行を行ったところ、必ず日本語のストリングが呼び出されてしまい。英語ロケール時に英語テーブルが呼ばれません。
<OS環境>
コンパイル・実行ともにWindows2000professional(日本語版・ロケールも日本語)です。

No.445463の方の例を忠実に手直ししようと思いましたが、多言語テーブルの場合とちょっと違う気がします。この現象を解決するにはどうすればよろしいのでしょうか?あと、自分の解釈ではロケールとは"地域のオプション"の"全般"タブにあるコンボのことだと思うのですが、他にも設定が必要なんでしょうか?
ご回答、よろしくお願いします。

こんにちは。初歩的な質問かもしれませんが、お分かりの方は是非ご教授願います。以前にもロケールとストリングテーブルについてのQAがNo.445463でされていますが、こちらで出された回答と現象が違うかもしれませんので、書いてみました。
<現象>
開発環境上(VisualBasic6.0Enterprise)でストリングテーブルを日本語と英語(U.S.)の2つ設定し、同環境上でロケールを日本語⇔英語切替を行いながらデバッグ実行をしました。その際はロケールに対応したストリングが呼び出され、該当した言語で表現されました。
し...続きを読む

Aベストアンサー

文字化けについて、、、

日本OSでリソースから読み取った日本語文字が化けるというのですか?
もしそうなら、、、
リソースから読まずに、固定で画面に文字列をセットしても化けるのですか?
画面でなくて、メッセージボックスで表示しても化けますか?

固定で決めうちした文字列で化けて、メッセージボックスでは化けない場合は、
フォームロード時に、最初にフォームのフォント、次にフォームのコントロール類のフォントを変更してあげたら対応できると思います。
おすすめはMSUゴシック

そうでなければ、化ける場合をパターン別に細かく書いてもらわないと答えようがありません。。。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング