使用操作系统的文化,但不使用语言

时间:2013-01-28 15:16:12

标签: c# .net cultureinfo culture

我在开发的应用程序中遇到过几次相同的问题:

我们希望允许用户以其格式(日期,货币......)编辑/显示数据,但我们希望仅以英文显示应用程序(出于多种原因,它是专业的,国际应用程序,在我们主要用英语沟通的领域。)

当我们管理整个应用程序时没有问题,但我使用的大多数第三方专业版框架(Telerik,DevExpress)都使用CurrentCulture以正确的格式显示我的数据和相应的语言。

因此,即使我的计算机使用英语,我的区域设置也设置为fr-CH,我将使用法语设置所有第三方用户控件。

我无法将CurrentCulture设置为特定的文化,并将我的用户控件的格式设置为其他内容(我会丢失我的默认格式)并且我不能让CurrentCulture成为默认一个,因为我会用另一种语言使用我的第三方组件。

我试图建立自己的文化(CultureAndRegionInfoBuilder),但没有成功。当我更改语言时,我仍然使用用户特定语言创建应用程序。

具体问题

我正在使用日期编辑器(基本的,它有一个文本输入,可以弹出日历)。我希望在我的操作系统区域设置中显示日期(ch-FR,因此2013年1月15日将是“15.01.2013”​​),但是当我显示日历月/日名称时,我不希望以法语显示。< / p>

这有什么正确的方法?

2 个答案:

答案 0 :(得分:0)

存储原始CultureInfo以用于您的目的,并尝试修改CurrentCultureCurrentUICulture属性的CurrentThreadSystem.Threading.Thread属性,这可能会解决您的问题

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

答案 1 :(得分: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;
}