36

このクラスCultureInfoは、2つの作成方法を提供します。

MSDNのドキュメントは、コンストラクターの「Windowsカルチャー」に言及しているため、2つでわずかに異なります。しかし、それは本当に重要ですか?

2つのうちの1つを他よりも優先する必要がありますか?

注:それが重要な場合は.NETバージョン3.5を使用しており、次のように使用したいと思います。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

この回答で説明されているように

4

3 に答える 3

32

ファクトリメソッドには、カルチャ情報の作成に失敗した場合のフォールバックがあります。

したがって、「en-XX」などの特定のカルチャを使用する場合、カルチャ情報インスタンスを作成できず、例外がスローされ、ニュートラルカルチャ「en」での再試行が成功します。

ファクトリメソッドのソースの下

public static CultureInfo CreateSpecificCulture(string name)
{
    CultureInfo info;
    try
    {
        info = new CultureInfo(name);
    }
    catch (ArgumentException)
    {
        info = null;
        for (int i = 0; i < name.Length; i++)
        {
            if ('-' == name[i])
            {
                try
                {
                    info = new CultureInfo(name.Substring(0, i));
                    break;
                }
                catch (ArgumentException)
                {
                    throw;
                }
            }
        }
        if (info == null)
        {
            throw;
        }
    }
    if (!info.IsNeutralCulture)
    {
        return info;
    }
    return new CultureInfo(info.m_cultureData.SSPECIFICCULTURE);
}

だから私はファクトリメソッドを好みます。

于 2012-08-30T09:43:29.277 に答える
7

このスレッドはすでに回答済みですが、CreateSpecificCulture APIのユニークな発見に出くわしましたが、それは時々それほど明白ではないかもしれません。したがって、このスレッドは私の調査結果に適した場所であると考えました。私はこれに数日を費やしたので、他の人にも数時間または数日節約できるのであれば、私の経験を共有することを考えました。

ptAPIを使用するときに、 (ポルトガル語の場合)または(ドイツ語の場合)のようなカルチャ名のみを渡すと、deこのAPIは、そのカルチャのデフォルトロケールと呼ばれるロケールに対応する特定のカルチャを返します。今、このロケールは、私が行き詰まった場所に聞こえるので、それほど明白ではないかもしれません。ドイツ語の場合、de-DEドイツ語で話されているドイツ語は明らかです。イタリア語の場合、it-ITイタリア語で話されているイタリア語は明らかです。

同様pt-PTに、ポルトガルで話されているポルトガル語についても明白に見えます。残念ながら、これは当てはまりません。正確な理由(人口、出身国、国語など)がわからないことに基づいて、カルチャIDから特定のカルチャを作成しようとしたときに、特定のカルチャのデフォルトロケールが決定されるグローバル標準化があります。 (ptこの場合)。Microsoftは、次のリンクでリスト全体を文書化しています。

http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx

特定の文化または言語のデフォルトの国ロケールを知りたい場合は、上記のリンクの最後の列(言語名の省略形)コードと一致させてください。

ポルトガル語の場合、不変文化「Portuguese」の言語名の略語は、PTBである「Portuguese(Brazil)」と一致します。ポルトガル語(Portugal)のコードは異なりますPTG。したがって、この場合、ポルトガル語(ブラジル)がポルトガル語のデフォルトロケールです。

アプリケーションロジックまたは要件がこのAPIのこの動作に何らかの形で依存している場合は、注意が必要です。多言語Webサイトのローカライズ版を表示している場合、市場のすべてのブラウザーもこれらのガイドラインに従い、http要求ヘッダーで適切な情報を送信するため、この動作はWebベースのアプリケーションでより重要になります。

私はまだ理由を探していますが、ポルトガル語の場合はそれほど明白に聞こえない文化のデフォルトのロケールとして特定の国を設定する背後にある要因ですどんな情報やコメントでも大歓迎です。

于 2014-10-21T07:28:26.423 に答える
2

ファクトリメソッドとコンストラクターの間には、もう1つの注目すべき違いがあります。コンストラクターは、デフォルトがtrueに設定されている追加のオプションのブール値を提供します。

de-DE> "plain " <cultureinfoが本当に必要な場合は、このブール値をfalseに設定する必要があります。理由は次のとおりです。設定。これは、ユーザーがControl-Panelを介してこのカルチャをどのように変更したかによっては、予期しない設定になる可能性があります。

ファクトリメソッドはこのブール値をサポートしていません!!!

このブール値をいつにするかについての最後の2つの考え:

  • true:UIの出力を生成しています-この出力は、ユーザーがコントロールパネルで選択した特定のカルチャ設定に準拠している必要があります
  • false:データを解析する必要があり(たとえば、XMLから)、特定のXML-culture-settings(たとえば、コンマとしての小数点記号)を知っている。この場合plain de-DE、特別なコントロールパネル設定が干渉しないことを確認するための文化が必要になります。
于 2017-03-28T11:41:47.637 に答える