10

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) に渡されるカルチャであることを確認しました。

何かご意見は?文化を正しく作成していませんか?

4

1 に答える 1

2

あなたの文化は決して登録されていないと思います.少なくとも1つは登録されていません.

ニュートラル カルチャには地域の値を指定できないため、以下のコードは例外をスローします。ニュートラル カルチャの DateTimeFormatInfo オブジェクトを作成できないのと同じように。

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 cultureBuilder = new CultureAndRegionInfoBuilder(
                        "tl", CultureAndRegionModifiers.Neutral);

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cultureBuilder.CultureEnglishName = "Tagalog";
cultureBuilder.CultureNativeName = "Tagalog";
cultureBuilder.TwoLetterISOLanguageName = "tl";
cultureBuilder.Register();

2 番目の特定の文化は問題ないようです。

于 2010-12-19T21:49:43.033 に答える