ローカリゼーション:文化情報をスクリプト名またはUnicode文字範囲にマッピングする方法は?

StackOverflow https://stackoverflow.com/questions/252662

質問

ローカライズに関する情報が必要です。ローカリゼーション関連の問題のほとんどを処理するC#2.0で.net 2.0を使用しています。ただし、現在のカルチャに対応するアルファベットを特定の画面の画面に手動で描画する必要があります。

これは、Microsoft Outlookの[連絡先]画面([連絡先]の[アドレスカード]ビューまたは[詳細なアドレスカード]ビュー)に似ているため、右端にアルファベットごとにボタンの列が必要です。

それをエミュレートしようとしていますが、ユーザーにスクリプトの選択を求めたくありません。現在の文化が中国語の場合、中国語のアルファベットを描きたいです。ユーザーがカルチャ情報を英語に変更したとき(およびアプリケーションを再起動したとき)、代わりに英語のアルファベットを描画します。このクエリを使用して私が行く場所を理解してほしい

現在のユーザーのカルチャを判別できます(Application.CurrentCultureまたはSystem.Globalization.CultureInfo.CurrentCultureはカルチャ関連情報を提供します)。また、アルファベットをレンダリングするすべてのスクリプトがあります。ただし、問題は、カルチャ情報をスクリプトの名前にマップする方法がわからないことです。

言い換えれば、文化に対応するスクリプト名を決定する方法はありますか?または、文化に対応するUnicode文字値の範囲を決定することは可能ですか?どちらを使用しても、ボタンのアルファベットを適切にレンダリングできます。

これに関する提案やガイダンスは本当にありがたいです。私のアプローチ(または私が達成しようとしているもの)に根本的な問題がある場合は、それも指摘してください。御時間ありがとうございます。

PS:最も簡単な解決策は、ユーザー設定の一部としてスクリプト名を構成するか、ユーザーが選択できる言語のリストを表示することです(Outlook 2007の連絡先)。しかし、ユーザーが何もしなくても、カルチャに対応するアルファベットをレンダリングできるかどうかを確認しようとしています。

役に立ちましたか?

解決

ネイティブコードには、GetLocaleInfoEx()のLOCALE_SSCRIPTS(上記のVista&)があり、ロケールに対してどのスクリプトが予想されるかを示します。現時点では、.Netに同様の概念はありません。

他のヒント

中国語には数千の文字があるため、文字セット内のすべての文字を表示することは現実的ではありません。中国語には「アルファベット」という固有の概念はありません。また、中国語に日本語のような音節文字があるとは思いません。

ピンイン(ローマ字で書かれた中国語)は、漢字を表すために使用できます。これは、漢字の索引付けに役立ちます。これはあなたの質問に答えないことは知っていますが、役に立つことを願っています。

mikiemacmanに完全に同意します。また、特定の言語では、必ずしもスクリプトのすべての文字が使用されるわけではありません。

とにかく、私が考えることができる最も近いものはCultureInfo.TextInfo.ANSICodePageです->ほんの一握りの ANSIコードページ。 ANSIコードページごとにスクリプトをリストするテーブル(またはswitch()ステートメントなど)を作成することもできます。

プロト、待って!より正確なソリューションがあります。 P / Invokeが必要になる場合がありますが、管理されていません。

GetLocaleInfoW(MAKELCID(wLangId, SORT_DEFAULT), LOCALE_FONTSIGNATURE, wcBuf, MAXWCBUF);

これにより、 LOCALESIGNATURE 構造が提供されます。 。答えはlsUsbフィールドにあります:Unicodeサブセットビットフィールド。ねずみ!この構造のMSページは空です。ただし、MSDNコピーで調べてください。そこに完全に文書化されています:どのスクリプトがサポートされているかを記述するフラグのセット全体。はい、タミル語のフラグがあります;-)

HTH。

編集:エラーショーンの答えを見なかった。うわー!社内の専門家からの回答! ;-)とにかく、あなたはまだPre-Vista互換の答えに興味があるかもしれません。

魅力的なトピック。質問には答えられないかもしれませんが、 Omniglot は優れたリソースです。

正解は複雑である可能性が高く、解決しようとしている正確な問題に依存します。特定の言語で使用されている文字のみを表示して電話帳セクションを分離することを目標とすると(Outlookの場合)、問題はほとんどありません。

  • 複数のスクリプト/言語にまたがる連絡先名を持つ人々。
  • 2-グリフ文字(例:セルビア語の「Lj」)。これは1つの音素であり、2つのUnicodeシンボルがありますが、常に1つの文字として扱われます。 「電話帳に独自のセクションがあります(「L」とは別です)。
  • リストするグリフが多すぎます(例:中国語)
  • 非正統的な順序付け(例:タイ語-母音を無視して、電話帳は子音のみで区切られます)
  • 大文字と小文字の区別(おそらく、それをサポートする言語に対して1つのケースだけが必要です。これは、マイナーな方法でトルコ語の「i」に分類されます)。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top