首页 文章

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

提问于
浏览
1

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

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

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

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

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

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

Concrete problem

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

这有什么正确的方法?

2 回答

  • 0

    存储原始 CultureInfo 用于您的目的,并尝试在 System.Threading.Thread 中编辑 CurrentThread 属性的 CurrentCultureCurrentUICulture 属性,这可能会解决您的问题 .

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
    
  • 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;
    }
    

相关问题