Microsoft .NET Framework 4 (Beta 1): グローバリゼーションの更新情報
Mohamed Elgazzar 著
更新日: 2009 年 7 月 6 日
一見したところ、.NET Framework 4 のグローバリゼーション機能は、.NET Framework 3.5 のときと同じに思えるかもしれません。実はまったく異なると言ったら、驚かれることでしょう。Globalization 名前空間のクラスにおけるインターフェイスや列挙の変更の多くは、目に見えるようなものではないため、驚かれても不思議ではありません。それでは、グローバリゼーションの更新情報についてご説明いたしましょう。
1. グローバリゼーション情報の更新
現実世界では、グローバリゼーションの情報は、常に変化しています。その理由として、世界各地の市場で起こる文化的な発展や、変化する文化に応じて規定しなおされる新しい標準などが挙げられます。マイクロソフトがさまざまな市場に関するより正確な情報を発見したり、市場のさらなる拡大とも関係しています。前のリリースでは、少なくとも 203 のカルチャがサポートされていましたが、Microsoft .NET Framework 4 では、少なくとも 354 のカルチャがサポートされています。これらのカルチャの多くは、ルートのニュートラル カルチャに対する親へのつながりを完全なものにするために追加されたニュートラル カルチャです。たとえば、次の表に示すように、既に存在しているカルチャであるイヌクティトット語 (カナダ音節文字、カナダ) およびイヌクティトット語 (ラテン、カナダ) に、3 種類のニュートラルなイヌクティトット語のカルチャが追加されました。
| カルチャの表示名 | カルチャ名 | LCID |
| イヌクティトット語 | iu | 0x005d |
| イヌクティトット語 (カナダ音節文字) | iu-Cans | 0x785D |
| イヌクティトット語 (カナダ音節文字、カナダ) | iu-Cans-CA | 0x045D |
| イヌクティトット語 (ラテン) | iu-Latn | 0x7C5D |
| イヌクティトット語 (ラテン、カナダ) | iu-Latn-CA | 0x085D |
表 – さまざまな新しいニュートラル カルチャの例
新しいセルビア語カルチャなど、新しい特定カルチャも導入されました (次の表を参照)。表示名の重複を避けるため、以前のセルビア語カルチャの名前が、セルビア語 (キリル、セルビアおよびモンテネグロ (旧)) と、セルビア語 (ラテン、セルビアおよびモンテネグロ (旧)) に変更されました。これらのカルチャは、.NET Framework 4 に残されており、カルチャ名および LCID などのカルチャ情報も残されています。
| カルチャの表示名 | カルチャ名 | LCID |
| セルビア語 (ラテン、セルビア) | sr-Latn-RS | 0x241A |
| セルビア語 (キリル、セルビア) | sr-Cyrl-RS | 0x281A |
| セルビア語 (ラテン、モンテネグロ) | sr-Latn-ME | 0x2C1A |
| セルビア語 (キリル、モンテネグロ) | sr-Cyrl-ME | 0x301A |
表 – 新しい特定カルチャ
中国語のカルチャでも、言語名 ([スクリプト、] 国や地域名) という命名規則に従うように、表示名がいくつか変更されました。GetCultures() を呼び出したときに、すべてのカルチャを指定すると、中国語カルチャ (以下の表を参照) が列挙されます。このリリースでは、zh-CHS および zh-CHT の表示名には、zh-Hans と zh-Hant と区別できるように "Legacy" という語が付けられています。最近 Windows に導入された zh は、カルチャの表示名が "中国語" となっています。
| 表示名 | カルチャ名 | LCID |
| 中国語 | zh | 0x7804 |
| 簡体字中国語 (Legacy) | zh-CHS | 0x0004 |
| 繁体字中国語 (Legacy) | zh-CHT | 0x7C04 |
| 簡体字中国語 | zh-Hans | 0x0004 |
| 繁体字中国語 | zh-Hant | 0x7C04 |
| 中国語 (簡体字、中国) | zh-CN | 0x0804 |
| 中国語 (繁体字、香港特別行政区) | zh-HK | 0x0C04 |
| 中国語 (繁体字、中華人民共和国マカオ特別行政区) | zh-MO | 0x1404 |
| 中国語 (簡体字、シンガポール) | zh-SG | 0x1004 |
| 中国語 (繁体字、台湾) | zh-TW | ox0404 |
表 – .NET Framework でサポートされる中国語カルチャ
中国語カルチャの親のつながりに、ルートの中国語カルチャが含まれるようになりました。以下に、2 種類の中国語の特定のカルチャに対する完全な親へのつながりの例を 2 つ示します。
- zh-CN → zh-CHS → zh-Hans → zh → Invariant
- zh-TW → zh-CHT → zh-Hant → zh → Invariant
チベット語 (中国)、フランス語 (モナコ)、タマジット語 (ラテン、アルジェリア)、およびスペイン語 (スペイン、インターナショナル ソート) の表示名も更新されています。表示名が変更された場合、通常、その変更は英語名とネイティブ名に反映されます。ただし、変更にはスクリプト、言語、および国の ISO と省略された名前が含まれる場合もあります。
グローバリゼーション プロパティの値に対する更新は、他にも通貨、日時の形式、曜日と月の名前、午前と午後の指定子、数値の書式設定プロパティの一部など、多数あります。ここで、RegionInfo の通貨名に関する更新の例を紹介します。もう 1 つの例は、DateTimeFormatInfo クラスの短い日付形式です。
| カルチャ名 | v3.5 での通貨名 | v4 での通貨名 |
| mt-MT | Lm (マルタ リラ) | € (ユーロ) |
| sk-SK | Sk (スロバキア コルナ) | € (ユーロ) |
| sl-SI | SIT (スロベニア トラル) | € (ユーロ) |
| tr-TR | YTL (イェニ トルコ リラ) | TL (トルコ リラ) |
| カルチャ名 | v3.5 の短い日付形式 | v4 の短い日付形式 |
| ar-SA | dd/MM/yy | dd/MM/yyyy |
| prs-AF | dd/MM/yy | yyyy/M/d |
| ps-AF | dd/MM/yy | yyyy/M/d |
| pt-BR | d/M/yyyy | dd/MM/yyyy |
表 – DateTimeFormatInfo における短い日付形式の更新と、RegionInfo における通貨の更新
アラビア語カルチャの CultureInfo.DateTimeFormat.ShortestDayNames など、多くのカルチャで、曜日と月の名前などのカレンダー データが一部変更されました。prs-AF、ps-AF、ug-CN など、右から左へ読むカルチャの一部では、TextInfo.IsRightToLeft プロパティの値が間違っていましたが、このバージョンで修正されました。
ページのトップへ
2. 最新のグローバリゼーション情報の入手
.NET Framework 4 の主要なグローバリゼーション機能の 1 つに、最新情報が利用可能になると、それが提供される機能があります。このリリースが提供する最も古いグローバリゼーション情報は、出荷の時点で利用可能なデータであり、Windows 7 よりも以前の Windows で実行している場合に限られます。Windows 7 以降のリリースで実行している場合は、グローバリゼーション情報は、オペレーティング システムが直接取得します。つまり、新しい Windows にアップグレードするときに、最新のグローバリゼーション情報を入手できるということです。この機能の役割はそれだけではありません。Windows 7 以降のバージョンで実行している場合は、この機能には別の役割もあります。ユーザーは、ネイティブ (Win32) アプリケーションとマネージ (.NET) アプリケーションの両方について、統一されたグローバリゼーション エクスペリエンスを実現できます。
世界情勢は絶えず変化しているため、グローバリゼーション情報は、随時変化します。開発者の方は、.NET Framework の異なるリリース間だけでなく、同じリリース内でも、グローバリゼーションのプロパティの値が変わる可能性があることに注意する必要があります。これは、.NET Framework ユーザーにとってまったく新しい動作というわけではありません。.NET Framework 2 以降サポートされていた WindowsOnlyCultures のプロパティは、異なるバージョンの Windows で実行するときは異なる値でした。
カルチャ情報の中でも、カルチャ名は最も変更のないプロパティで、将来のリリースでもそのまま残ることが予想されます。その他のプロパティは、標準や国内での変化に応じて、随時変更される可能性があります。ここで挙げられている例の中では、カルチャの表示名が、変更される可能性があるものです。アプリケーションは、表示名のつづりや、その他のテキスト データや数値データに依存しないようにする必要があります。
グローバリゼーション情報の取得メカニズムは、.NET Framework 4 で変更されています。Windows 7 以上で実行している場合、グローバリゼーション情報は、Windows から直接取得されます。Windows 7 より前のリリース (Vista、XP、Server 2003 および 2008 など) で実行している場合、アプリケーションが非常に古いデータを取得することがないようにするため、グローバリゼーション情報は内部データ ストアから取得されます。次のアーキテクチャの図は、グローバリゼーション情報の取得モデルを示したものです。
.jpg)
図 – .NET Framework 4 におけるグローバリゼーション プロパティのアーキテクチャ
この新しい設計では、CultureTypes の一部の定義が変更されます。グローバリゼーション情報は、ホスト オペレーティング システムに応じて異なる場所から取得されるからです。CultureTypes のWindowsOnlyCultures および FrameworkCultures は、古い形式となりました。これらの CultureTypes を使用しようとすると、コンパイラから警告が表示されます。ただし、コンパイルそのものは成功します。WindowsOnlyCultures を使用してもカルチャは返されませんが、FrameworkCultures は .NET Framework 2 と同じ結果を返します。その他の CultureTypes は、以前と同じ定義のままです。
"警告 CS0618: 'System.Globalization.CultureTypes.FrameworkCultures' は旧形式です。'この値は現在推奨されていません。CultureTypes の別の値を使用してください"
訳注: 実際のエラー メッセージは、Beta 1では以下のようなものになります。
"警告 'System.Globalization.CultureTypes.FrameworkCultures' は古い形式です: 'This value has been deprecated. Please use other values in CultureTypes.' "
ページのトップへ
3. 文字列処理に関して
ソート、大文字/小文字の処理、正規化、および Unicode 文字情報の動作は、Microsoft .NET Framework の多くのクラスで現在も存在します。これらの機能の中で最も明らかな実装の一部は、System.Globalization 名前空間における CharUnicodeInfo、CompareInfo、StringInfo、TextInfo、TextElementEnumerator などのクラスにあります。.NET Framework 4 では、これらの機能の動作は、Windows 7 と同期するようにアップグレードされました。これにより、日本語、中国語、韓国語に関する言語的なソートや大文字/小文字の処理がより充実しています。また、他の言語に関して過去数年にわたり顧客から寄せられたさまざまな問題についても修正されています。この領域における最も重要な変更は、Unicode 規格 5.1 への準拠です。この標準の更新により、新しい記号、矢印、分音記号、句読点、算術記号、CJK ストローク、漢字、マラヤラム語、テルグ語の数字など、約 1400 文字のサポートが追加されました。さらに、ラテン語、ミャンマー語、アラビア語、ギリシャ語、モンゴル語、キリル文字、グルムキー文字、オリヤー語、タミール語、テルグ語、およびマラヤラム語の既存のスクリプトにおける文字のソートおよび大文字/小文字の処理も向上しました。また、新しいスクリプトとして、スンダ文字、レプチャ文字、オル チキ文字、ヴァイ文字、サウラーシュトラー文字、カヤーリー文字、ルジャン文字、およびチャム文字のサポートが追加されました。
データベースのインデックス作成など、異なるバージョンの Windows 間での文字列の処理方法の統一が求められるさまざまな状況があるため、.NET Framework 4 では、ホストしている Windows に関係なく、文字列の処理方法における動作の整合性が保証されています。整合性要件については、.NET Framework の将来のリリースで、お客さまのフィードバックに基づき再評価する可能性があります。
一部のアプリケーションは、.NET Framework 2 ~ 3.5 のソートや大文字/小文字の処理動作に依存している可能性がありますが、これは、ソートおよび大文字/小文字の処理の動作変更に関して移行計画があるアプリケーション以外では、通常、推奨されない方法です。このようなアプリケーション シナリオの例としては、データベース インデックスの作成やソート キーの格納などが挙げられます。これらのアプリケーションでデータが失われたり、エラーが発生することで、アプリケーションを損なう危険性を回避するため、.NET Framework 4 では、アプリケーションがこの動作に依存している場合、開発者向けに、.NET Framework 2 ~ 3.5 のソートおよび大文字/小文字の処理動作に対する選択導入のオプションが用意されています。古い動作を選択導入する方法の詳細については、Beta 2 の間に公開される予定です。
一部のカルチャでは、代替のソート順序により複数のソートの動作を提供します。たとえば、ドイツ語 (ドイツ) のカルチャには、既定の動作として、辞書のソート順序があります。ただし、代替のソート順序として、電話帳のソートもサポートされています。もう 1 つ例を挙げると、中国語 (簡体字、中国) カルチャでは、既定の動作としての発音によるソートの他に、代替のソート順序として画数によるソートもサポートされています。代替のソート順序を指定するには、LCID または別のソート順序の名前を使用して CultureInfo オブジェクトを作成します。.NET Framework 4 では、 3つのカルチャにおける、代替のソートが削除されました (これらは Windows 2000 から使用されていないため)。.NET Framework でサポートされていたその他の代替のソート順序は引き続き使用可能です。次の表は、これらの代替のソート順序を示しています。
| カルチャ名 | 言語 - 国/地域 | 既定のソート名と LCID | 代替のソート名と LCID |
| zh-HK | 中国語 - 香港特別行政区 | 既定: 0x00000c04 | zh-HK_stroke: 0x00020c04 |
| ja-JP | 日本語 - 日本 | 既定: 0x00000411 | ja-JP_unicod: 0x00010411 |
| ko-KR | 韓国語 - 韓国 | 既定: 0x00000412 | ko-KR_unicod: 0x00010412 |
表 – 非推奨となった代替のソート順序
アプリケーションが、非推奨となった代替のソート順序の LCID を使用して CultureInfo をコンストラクトしようとすると、そのソート順序はサポート対象ではなくなっているため、"カルチャが見つからない" という例外が発生します。サポートされていないカルチャについても同様の例外が発生します (列挙されたカルチャおよび代替のソート順序)。例外の詳細については、Beta 2 の間に公開される予定です。
グローバリゼーション機能に関してマイクロソフトが長期的に取り組んでいる戦略の 1 つが、LCID の使用を減らすことです。.NET Framework 4 では、CompareInfo.ToString() および TextInfo.ToString() は、クラス名の一部としてカルチャ名と LCID を使用するのではなく、すべてのカルチャに関してカルチャ名のみを使用します。たとえば、.NET Framework 4 は、.NET Framework 2 ~ 3.5 で戻り値として使用されていた "en-US CompareInfo - 1033" ではなく "en-US CompareInfo - en-US" を返します。
ページのトップへ
4. より具体的に
以前のリリースの .NET Framework では、アプリケーションが、CultureInfo.DateTimeFormat.FirstDayOfWeek プロパティなど、ニュートラル カルチャのプロパティの一部にアクセスしようとすると、例外が発生していました。.NET Framework 4 では、どのニュートラル カルチャのプロパティも、そのニュートラル カルチャに対して最も優先度の高い特定カルチャからの値を返します。たとえば、フランス語のニュートラル カルチャは、フランス語 (フランス) からほとんどのプロパティの値を取得します。CultureInfo.DateTimeFormat.FirstDayOfWeek プロパティは、フランス語 (フランス) カルチャの値にマップされている、フランス語の月曜日を返します。
一部のプロパティは、言語名など、優先度の高いカルチャのプロパティと値が異なるため、このルールの例外となります。たとえば、ノルウェー語のニュートラル カルチャの言語名はノルウェー語ですが、特定カルチャであるノルウェー語ブークモール (ノルウェー) の言語名はノルウェー語 (ブークモール) です。
ニュートラル カルチャの一部のプロパティおよびメソッドは、KeyboardLayoutId プロパティや CultureInfo クラスの GetConsoleFallbackUICulture メソッドのように、ニュートラル カルチャの代わりに特定カルチャを返します。
| KeyboardLayoutId |
| カルチャ名 | v3.5 | v4.0 |
| ar | 1 | 1025 |
| es | 10 | 1034 |
| fr | 12 | 1036 |
| zh-CHS | 4 | 2052 |
| GetConsoleFallbackUICulture |
| カルチャ名 | v3.5 | v4.0 |
| af | Af | af-ZA |
| de | De | de-DE |
| en | En | en-US |
| ja | Ja | ja-JP |
表 – ニュートラル カルチャではなく特定カルチャが返される
ページのトップへ
5. カスタム カルチャの変更
カスタム カルチャに対する主な変更の 1 つは、.NET Framework 2 によって作成されたニュートラルの置換カルチャが、.NET Framework 4 を使用してロードされないということです。
CultureAndRegionInfoBuilder クラスを使用して置換カルチャを登録した後、カスタム カルチャによって上書きされた情報は、カスタム カルチャを作成したプロセスですぐに使用できるようにはなりません。ただし、このカスタム カルチャの登録後に起動されたプロセスは、上書きされた情報を読み取れるようになります。
ページのトップへ
6. 変更されていないもの
テキスト情報、エンコーディング、カレンダー機能、IDN 機能など、.NET Framework 4 の一部のグローバリゼーション機能は変更されていません。これらは、以前のリリースと同様に機能します。