Tag: currentculture

特定于文化的DateTime字符串在平台之间不一致

我有一个测试应用程序,允许用户从ComboBox中选择文化,并在多行TextBox中显示特定于文化的日期。 代码如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); comboBox1.Items.AddRange( CultureInfo.GetCultures(CultureTypes.SpecificCultures)); } private void comboBox1_SelectedValueChanged(object sender, EventArgs e) { CultureInfo selectedCulture = comboBox1.SelectedItem as CultureInfo; DateTime currentDate = DateTime.Now; textBox1.Text = “My Date : ” + currentDate.ToString() + Environment.NewLine + “Culture Specific Date: ” + currentDate.ToString(selectedCulture); } } 我注意到如果选择“ar-SA”,阿拉伯语(沙特阿拉伯),那么当我在不同的机器上运行应用程序时,我会看到不同的结果。 在Windows 7计算机上,文本框显示: […]

为什么设置CurrentCulture时时区不会改变?

根据我的研究,不可能改变线程的时区。 所以我的问题是你为什么不能? 我本以为将你的应用程序的文化切换到一个特定的国家也会切换这个,看起来像预期的行为IMO。 编辑 在修改后,我可以看到为什么它可能不应该默认情况下以1:1映射。 但是,我仍然认为能够更改每个线程的时区是一个很好的function。

C#双打显示逗号而不是句号

我几乎和这个post中的人有同样的问题: 转换具有句点而不是逗号的浮点数? 这样我的 double x = 234.4; string y = x.ToString(); 我得到y == “234,4” ; 更糟糕的是…… Double.Parse(“234.4”)抛出一个exception。 在我被要求使用句号而不是逗号之前,我已经写了很多代码,所以我更愿意在某种程度上改变我在全球范围内的CultureInfo 。 我可以做的项目中有一些设置吗? 我试过了: Application.CurrentCulture = CultureInfo.CreateSpecificCulture(“en-US”); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(“en-US”); Thread.CurrentThread.CurrentUICulture = new CultureInfo(“en-US”); 他们有点工作。 它们适用于应用程序的大部分内容,但驻留在TabControl选项卡中的所有控件仍然希望使用我的计算机Localized CultureInfo 。 关于如何解决这个问题的任何想法?

我应该何时指定CurrentCulture或InvariantCulture以及何时不指定?

指定CurrentCulture或InvariantCulture而不指定文化的最佳做法是什么? 例如,根据我的阅读,如果您正在进行序列化,则需要使用InvariantCulture作为指定数据值的规范表示的方法。 这是基于文化的字符串操作的相对较小的百分比。 我发现它很长,很冗长,而且大多数时候都是丑陋的,每次我都说出来,比如说: var greeting = string.Format(CultureInfo.CurrentCulture, “Hello “, userName); 然而,我的团队最近开启了FxCop,现在总是在每个地方都使用CultureInfo。 结合简洁性,可读性和function性的最佳技术是什么? 一些好的阅读材料: 使用InvariantCulture属性 CultureInfo类

更改线程池线程的文化是否会在返回池时影响它?

如果我设置线程池线程的CurrentCulture ,当线程完成执行并返回到线程池时会发生什么? 它是否将其CurrentCulture重置为默认值(无论可能意味着什么),还是会保留我在其上设置的文化? 我希望框架将线程重置为默认状态以防止这种情况,但是找不到任何这种效果的文档。 我找到的最接近的是来自ThreadPool的MSDN文档: 当线程池重用线程时,它不会清除线程本地存储中或使用ThreadStaticAttribute属性标记的字段中的数据。 因此,通过一个方法放置在线程本地存储中的数据可以暴露给由同一线程池线程执行的任何其他方法。 这似乎表明线程在返回时没有重置。 我已经尝试了一些示例代码来尝试对此进行测试,看起来确实重置了文化,但我不相信我正在测试这种行为,因为我认为我只使用了ThreadPool的一小部分线程,并且所以不能确定我正在测试一个已经拥有它的文化集的线程。

在WinForms中以可本地化的forms在运行时更改CurrentUICulture

我一直在搜索如何更改Localizable属性设置为true的Form的语言。 https://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture(v=vs.110).aspx 这是设置表单的语言,但这需要在我们实例化表单之前设置。 此事件后无法调用此方法。 搜索信息,我看到了以下问题: https : //stackoverflow.com/a/11738932/3286975但是,正如评论所说,我在TabControl和MenuStrip中有控件,因此它们不受影响。 我试图通过获取表单的所有控件而没有运气来修改它。 在此菜单中,我调用以下回调: private void englishToolStripMenuItem_Click_1(object sender, EventArgs e) { string lang = (string) ((ToolStripMenuItem) sender).Tag; base.Culture = CultureInfo.CreateSpecificCulture(lang); } private void spanishToolStripMenuItem_Click(object sender, EventArgs e) { string lang = (string) ((ToolStripMenuItem) sender).Tag; base.Culture = CultureInfo.CreateSpecificCulture(lang); } 我通过使用标签来改变文化。 当我点击它没有任何反应。 另外,我从上述答案中修改了一点ApplyResources方法。 private void ApplyResources(Control parent, CultureInfo culture) { this.resManager.ApplyResources(parent, […]

WinRT应用程序和区域设置。 根据用户的区域设置格式化日期和数字的正确方法?

关于用户的区域设置,我在Windows 8 Metro应用程序(XAML和C#)中遇到了一些问题。 似乎应用程序不会尊重用户的区域设置 ,因此即使您的Windows 8设置为以芬兰语格式显示日期和时间,应用程序仍将使用美国格式显示它们。 但这是一个很大的问题,必须有一些我缺少的东西? 为了测试这一点,我开始创建一个WPF应用程序 。 应用程序只打印出CurrentCulture和格式化的DateTime.Now: private void Culture_Loaded_1(object sender, RoutedEventArgs e) { this.Culture.Text = System.Globalization.CultureInfo.CurrentCulture.DisplayName; } private void Date_Loaded_1(object sender, RoutedEventArgs e) { this.Date.Text = DateTime.Now.ToString(); } 这是我的默认区域设置: 运行时,应用程序以芬兰语格式显示日期: 然后我将区域设置更改为美国: 当应用程序再次运行时,文化和格式发生了变化: 这就像我期望一切正常工作,这也是我期望WinRT应用程序的工作方式。 因此,作为下一步,我使用相同的代码创建了一个WinRT(XAML&C#)应用程序,并将区域设置恢复为芬兰语。 问题: 即使我通过区域设置定义格式应为“芬兰语”,WinRT应用程序也会以美国格式显示日期时间。 然后我修改了应用程序的项目文件,并使fi-FI成为默认语言 : 此更改还修改了应用程序的文化: 奇怪。 我将默认语言更改回其默认值,格式化已恢复为美国。 然后我在项目中创建了文件夹“Strings-fi-FI”,并在项目中添加了一个空的“Resources.resw” 。 这个空文件似乎已经足够了,因为我现在正在使用芬兰格式: 只要删除空资源文件,格式就会恢复为US: 很奇怪。 这导致几个问题,但我认为主要的问题是:WinRT应用程序是否故意不遵循用户的区域设置,如WPF应用程序?