我在开发的应用程序中遇到过几次相同的问题:
我们希望允许用户以其格式(日期,货币......)编辑/显示数据,但我们希望仅以英文显示应用程序(出于多种原因,它是专业的,国际应用程序,在我们主要用英语沟通的领域。)
当我们管理整个应用程序时没有问题,但我使用的大多数第三方专业版框架(Telerik,DevExpress)都使用CurrentCulture
以正确的格式显示我的数据和相应的语言。
因此,即使我的计算机使用英语,我的区域设置也设置为fr-CH
,我将使用法语设置所有第三方用户控件。
我无法将CurrentCulture
设置为特定的文化,并将我的用户控件的格式设置为其他内容(我会丢失我的默认格式)并且我不能让CurrentCulture
成为默认一个,因为我会用另一种语言使用我的第三方组件。
我试图建立自己的文化(CultureAndRegionInfoBuilder
),但没有成功。当我更改语言时,我仍然使用用户特定语言创建应用程序。
具体问题
我正在使用日期编辑器(基本的,它有一个文本输入,可以弹出日历)。我希望在我的操作系统区域设置中显示日期(ch-FR,因此2013年1月15日将是“15.01.2013”),但是当我显示日历月/日名称时,我不希望以法语显示。< / p>
这有什么正确的方法?
答案 0 :(得分:0)
存储原始CultureInfo
以用于您的目的,并尝试修改CurrentCulture
中CurrentUICulture
属性的CurrentThread
和System.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;
}