Alex Adamyanがこのブログで見つけたコードを使用して、ローカライズされた MVC Web サイトを作成しました。
既存の文化を使用する場合、これはうまく機能しています。ただし、タガログ語 (tl または tl-PH) にローカライズしようとしています。Windows にはこのカルチャが組み込まれていないため、次のコードに従って作成しました (tl と tl-PH の両方を試しました)。
public static void CreateCustomCultures()
{
var cultureBuilder = new CultureAndRegionInfoBuilder(
"tl", CultureAndRegionModifiers.Neutral);
cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US"));
cultureBuilder.IsMetric = true;
cultureBuilder.CultureEnglishName = "Tagalog";
cultureBuilder.CultureNativeName = "Tagalog";
cultureBuilder.RegionEnglishName = "Tagalog";
cultureBuilder.RegionNativeName = "Tagalog";
cultureBuilder.TwoLetterISOLanguageName = "tl";
cultureBuilder.ThreeLetterISORegionName = "PH";
cultureBuilder.Register();
var cultureBuilder2 = new CultureAndRegionInfoBuilder(
"tl-PH", CultureAndRegionModifiers.None);
cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo("US"));
cultureBuilder2.IsMetric = true;
cultureBuilder2.CultureEnglishName = "Tagalog";
cultureBuilder2.CultureNativeName = "Tagalog";
cultureBuilder2.RegionEnglishName = "Tagalog";
cultureBuilder2.RegionNativeName = "Tagalog";
cultureBuilder2.TwoLetterISOLanguageName = "tl";
cultureBuilder2.ThreeLetterISORegionName = "PH";
cultureBuilder2.Register();
}
また、テスト サイトの ~/Views/Home/Resources に 4 つのリソース ファイルがあります。
- ホーム.aspx.resx;
- Home.aspx.tl.resx
- Home.aspx.tl-PH.resx
- Home.aspx.de.resx
ビルドすると、bin ディレクトリの下に適切な名前の 3 つのディレクトリが作成され、それぞれに適切な名前の dll があります。
したがって、Web サイトのホームページhttp://localhost:1907 にアクセスすると、デフォルト (英語) の言語文字列が表示されます。
ドイツ語 (de) のホームページhttp://localhost:1907/deにアクセスすると、ドイツ語版のサイトが表示されます。
タガログ語版http://localhost:1907/tlまたはhttp://localhost:1907/tl-PHにアクセスすると、タガログ語版ではなく英語版が表示されます。
リソース フェッチ コードにブレークポイントを配置し、現在のスレッドのカルチャと UI カルチャがタガログ カルチャに正しく設定されていること、およびタガログが resourceManager.GetString(key, culture) に渡されるカルチャであることを確認しました。
何かご意見は?文化を正しく作成していませんか?