【问题标题】:Use the Culture of the OS, but not the language使用操作系统的文化,而不是语言
【发布时间】:2013-01-28 15:16:12
【问题描述】:

我在我们开发的应用程序中多次遇到同样的问题:

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

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

所以,即使我的电脑是英文的,我的区域设置设置为fr-CH,我也会有法语的所有第三方用户控件。

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

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

具体问题

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

这样做的正确方法是什么?

【问题讨论】:

    标签: c# .net cultureinfo culture


    【解决方案1】:

    为您的目的存储原始CultureInfo 并尝试编辑System.Threading.ThreadCurrentThread 属性的CurrentCultureCurrentUICulture 属性,也许这会解决您的问题。

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

    【讨论】:

    • 不起作用,要么我的 userControl 是法语,要么它的默认格式是英语
    • 我不太确定我是否理解您的问题。您是否希望输入在一种文化中,而页面在另一种文化中?!?
    • @Sandman 我添加了一个具体的问题,它可能有助于理解。但是希望我的 DateTime 以正确的格式显示,但是 GUI 工具中有一些与我的输入相关的文本(日历,...)以英语显示
    【解决方案2】:

    我通过自定义文化信息解决了我的问题:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 2017-04-10
      • 2021-10-28
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多