2

クラス ライブラリ プロジェクトを作成し、http://msdn.microsoft.com/en-us/library/ms172469(v=vs.90).aspx に基づいてカスタム カルチャを追加しました

クラス ライブラリ プロジェクトは、単純な asp.net Web プロジェクトによって参照されます。ここでは、現在のカルチャに基づいて文字列メッセージを表示するだけです。

messages.es-ES.resx の他にリソース ファイル 'messages.x-en-US-sample.resx' を追加しました。UI カルチャとカルチャ (currentThread) を x-en-US-sample に設定すると、メッセージを自動的に取得する es-ES カルチャなどを使用する場合と同様に、リソース文字列がこのファイルに自動的にマップされません。 ES.resx。

ここで何が欠けていますか?

4

2 に答える 2

2

以下は、私がまとめた簡単なテストです。リソース ファイルに表示されている拡張子が付いている限り、これは機能します。

   // Resource file names:
    // XXX.resx (default)
    // XXX.de-DE.resx (German)
    // XXX.en-Hobbit.resx (custom) 

    static void Main()
    {
        BuildAndRegisterHobbitCulture();

        const string goodDay = "GoodDay";

        // Default.
        Console.WriteLine("{0}: {1}", Thread.CurrentThread.CurrentCulture.Name, 
            Resources.ResourceManager.GetString(goodDay));

        // German.
        SetCulture("de-DE");
        Console.WriteLine("{0}: {1}", Thread.CurrentThread.CurrentCulture.Name, 
            Resources.ResourceManager.GetString(goodDay));

        // Custom - Hobbit.
        SetCulture("en-Hobbit");
        Console.WriteLine("{0}: {1}", Thread.CurrentThread.CurrentCulture.Name, 
            Resources.ResourceManager.GetString(goodDay));

        Console.ReadLine();
    }

    private static void SetCulture(string culture)
    {
        var cultureInfo = CultureInfo.GetCultureInfo(culture);
        Thread.CurrentThread.CurrentCulture = cultureInfo;
        Thread.CurrentThread.CurrentUICulture = cultureInfo;
    }

    private static void BuildAndRegisterHobbitCulture()
    {
        if (CultureInfo.GetCultures(CultureTypes.AllCultures).Any(ci => ci.Name == "en-Hobbit"))
            return;

        var cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder("en-Hobbit", CultureAndRegionModifiers.None);
        cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(CultureInfo.CreateSpecificCulture("en-GB"));
        cultureAndRegionInfoBuilder.LoadDataFromRegionInfo(new RegionInfo("en-GB"));
        cultureAndRegionInfoBuilder.Register();
    }
于 2014-03-20T12:15:40.213 に答える
0

なぜx-en-US文化を設定するのですか?

セットは次のとおりです。

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");

リソースファイルを使用:

MyResourceManager.yourcountry-en-US.resx

x-en-US有効な CultureInfo コードではないと思います。en-US

カスタム カルチャを登録して割り当てることができる Microsoft の例を次に示します。

public static void Main()
   {
      // Create a custom culture for ru-US.
      CultureAndRegionInfoBuilder car1 = new CultureAndRegionInfoBuilder("ru-US", 
                                             CultureAndRegionModifiers.None);
      car1.LoadDataFromCultureInfo(CultureInfo.CreateSpecificCulture("ru-RU"));
      car1.LoadDataFromRegionInfo(new RegionInfo("en-US"));

      car1.CultureEnglishName = "Russian (United States)";
      car1.CultureNativeName = "русский (США)";
      car1.CurrencyNativeName = "Доллар (США)";
      car1.RegionNativeName = "США";

      // Register the culture. 
      try {
         car1.Register();
      }    
      catch (InvalidOperationException) {
         // Swallow the exception: the culture already is registered.
      }

      // Use the custom culture.
      CultureInfo ci = CultureInfo.CreateSpecificCulture("ru-US");
      Thread.CurrentThread.CurrentCulture = ci;
      Console.WriteLine("Current Culture: {0}", 
                        Thread.CurrentThread.CurrentCulture.Name);
      Console.WriteLine("Writing System: {0}", 
                        Thread.CurrentThread.CurrentCulture.TextInfo);
   }
于 2013-10-24T13:37:01.710 に答える