0

私は非常に奇妙な問題を抱えています。プロジェクトにローカリゼーションを実装していますが、Windows が実行している現在のロケールを取得しようとすると、国情報が見つかりません。サンプルコードは次のとおりです。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}

最も一般的な言語 (En-US、FR-fr) で実行すると、正しく返されます。ただし、たとえば、ベルギーのフランス語を選択すると、言語設定オプションからフランスのフランス語を削除しても、FR-be ではなく FR-fr が取得されます。

自分のソフトウェアがどの国にあるとしても、どうすれば常に正しく選択した国を取得できるのでしょうか。

ps: CurrentCulture を使用することは、私が探している答えではありません。日付/時刻/数値の形式ではなく、UI で使用している表示言語に一致させたいからです (それらはまったく異なる可能性があります)。

4

1 に答える 1

1

ヘッダーでの使用が間違っていると思います。

MS は system.globalization ではなく system.thread を使用し ます https://msdn.microsoft.com/it-it/library/system.globalization.cultureinfo.currentuiculture(v=vs.110).aspx これらのいくつかでは、コンパイル エラーがあります.

正しいコンパイル コードは次のとおりです。

(CultureInfo.CurrentCulture は読み取り専用であることに注意してください。代わりに、セッターにアクセスできる System.Threading.Thread.CurrentThread.CurrentCulture を使用しました)

public static void Main(string[] args)
{
    // Display the name of the current thread culture.
    Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

    // Change the current culture to th-TH.
    System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("th-TH", false);
    Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

    // Display the name of the current UI culture.
    Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

    // Change the current UI culture to ja-JP.
    System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP", false);
    Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);

}
于 2016-03-03T21:57:25.727 に答える