1

私たちが開発したアプリケーションで同じ問題に何度か遭遇しました。

ユーザーが自分の形式 (日付、通貨など) でデータを編集/表示できるようにしたいのですが、アプリケーションを英語でのみ表示したい (いくつかの理由から、ドメイン内のプロの国際アプリケーションです)。そこでは主に英語でコミュニケーションをとります)。

アプリケーション全体を管理する場合は問題ありませんが、私が使用したサードパーティのプロ フレームワーク (Telerik、DevExpress) のほとんどはCurrentCulture、データを正しい形式と対応する言語で表示するために を使用しています。

そのため、コンピューターが英語版であっても、地域設定を に設定するとfr-CH、サード パーティのユーザー コントロールはすべてフランス語になります。

を特定のカルチャに設定したり、ユーザー コントロールの形式を別のものに設定したりすることはできません (既定の形式が失われます)。また、別の言語でサード パーティのコンポーネントを使用するためCurrentCulture、 を既定の形式にすることもできません。CurrentCulture.

私は独自の文化 ( CultureAndRegionInfoBuilder) を構築しようとしましたが、成功しませんでした。言語を変更しても、アプリケーションはユーザー固有の言語のままです。

具体的な問題

私は日付エディタを使用しています(基本、テキスト入力が1つあり、カレンダーをポップアップできます)。OSロケールで日付を表示したい(ch-FR、2013年1月15日は「15.01.2013」になります)が、カレンダーの月/日の名前をフランス語で表示したくない。

これで正しいアプローチは何ですか?

4

2 に答える 2

0

CultureInfo目的に合わせてオリジナルを保存し、 でプロパティの編集CurrentCultureCurrentUICultureプロパティを試してみてください。これで問題が解決する可能CurrentThread性があります。System.Threading.Thread

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
于 2013-01-28T15:22:30.570 に答える
0

カスタムカルチャ情報を用意することで問題を解決しました:

private static void UpdateCultureInfoWithoutLangage()
{
    //We initialize a en-US cultureInfo and change all formats + number infor related
    CultureInfo cultureInfoEn = new CultureInfo("en-US");
    CultureInfo cultureInfoEnClone = (CultureInfo)cultureInfoEn.Clone();

    //Setting DateTimeFormat(Without changing translations)
    cultureInfoEnClone.DateTimeFormat.FirstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
    cultureInfoEnClone.DateTimeFormat.FullDateTimePattern = CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern;
    cultureInfoEnClone.DateTimeFormat.LongDatePattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern;
    cultureInfoEnClone.DateTimeFormat.LongTimePattern = CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern;
    cultureInfoEnClone.DateTimeFormat.MonthDayPattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern;
    cultureInfoEnClone.DateTimeFormat.ShortDatePattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
    cultureInfoEnClone.DateTimeFormat.ShortTimePattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern;
    cultureInfoEnClone.DateTimeFormat.TimeSeparator = CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator;
    cultureInfoEnClone.DateTimeFormat.YearMonthPattern = CultureInfo.CurrentCulture.DateTimeFormat.YearMonthPattern;
    cultureInfoEnClone.NumberFormat = CultureInfo.CurrentCulture.NumberFormat;
    Thread.CurrentThread.CurrentCulture = cultureInfoEnClone;
    Thread.CurrentThread.CurrentUICulture = cultureInfoEnClone;
    Application.CurrentCulture = cultureInfoEnClone;
}
于 2013-01-30T08:21:34.983 に答える