Tag: cultureinfo

特定于文化的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计算机上,文本框显示: […]

创建正确路径从左到右连接从右到左部分的问题

我已经在很大程度上简化了问题,这里是示例代码: string outputString = string.Empty; string joinOutputString = string.Empty; string pathOutputString = string.Empty; string[] myStrings = new string[4]; myStrings[0] = “First entry”; myStrings[1] = “اول”; myStrings[2] = “دوم”; myStrings[3] = “Last entry”; StringBuilder sb = new StringBuilder(); for (int i = 0; i < myStrings.Length; i++) { joinOutputString = string.Join(@"\", joinOutputString, myStrings[i]); outputString = string.Format(@"{0}{1}\", […]

如何在WPF UserControl中显示动态文化格式化的数字

我想动态设置Number文本块的文化格式,其中包含传递给MyUserControl的文化和数字值。 MyCulture和Number值将传递给MyCustomControl,其格式为“en-GB”,“en-US”等。 我在asp.NET MVC中使用扩展方法做了类似的事情,但需要帮助如何在WPF中将它拼凑在一起。 示例MVC扩展方法 public static MvcHtmlString CulturedAmount(this decimal value, string format, string locale) { if (string.IsNullOrEmpty(locale)) locale = HttpContext.Current.Request.UserLanguages[0]; return MvcHtmlString.Create(value.ToString(format, CultureInfo.CreateSpecificCulture(locale))); } 窗口 //MyMoney is a decimal, MyCulture is a string (eg “en-US”) MyCustomControl //display this with specific culture

为什么Parallel.ForEach改变了它的线程文化?

今天我遇到了一个我无法解释的奇怪现象。 在gridview中有一个包含多个行的网页,需要将其逐个保存到数据库和XML文件中。 我最终使用了Parallel.ForEach ,因为行之间没有关系,所以它们可以独立执行。 代码基本上是这样的: Parallel.ForEach(gvWithData.Rows.Cast(), row => { if (row.RowType == DataControlRowType.DataRow) { // do some logic and stuff… var type = new Object { … }; // save to the database type.Save(); // retrieve the saved item from the database again // since we need some autoincrement values from the db var typeAfterSave […]

CultureInfo(来自同一文化)的实例基于OS的变化

我有一个写下这样日期的网站: CultureInfo cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures).FirstOrDefault(c => string.Equals(c.TwoLetterISOLanguageName, MvcApplication.Language)); return string.Concat(date.Day, “.”, cultureInfo.DateTimeFormat.GetAbbreviatedMonthName(date.Month)); 在我的PC(Windows 7,Service Pack 1,西class牙文化)和服务器(Windows Server 2012,英语文化)中, MvcApplication.Language就是这样,我从列表中得到的文化是: es-ES 。 我希望他们都写相同的字符串(他们有不同的文化,但我没有使用CurrentCulture )。 然而,我的PC和Abr.的结果非常好Abr. 在服务器中。 我已经尝试使用LinqPAD从MvcApplication.Language隔离出来,但它仍然不同。 我打印了AbbreviatedDayNames和AbbreviatedMonthNames的数组,它们在每台计算机上都不同。 我做错了什么或这是预期的行为? 如何使其完全独立于Windows /用户文化?

Thread.CurrentThread.CurrentCulture不在线程池内的线程中工作

我有一个方法将在一个线程内调用,这些线程由线程池管理。 该方法调用DLL的方法,遗憾的是,该方法需要特定的语言环境才能正确执行。 在通过threadpool运行此方法之前,我已经在应用程序的主线程中运行时进行了测试,同时我手动管理线程并且工作正常,但是当我将其放入线程池内工作时,语言环境不会应用,因此该方法行为不正确。 以下是应该受区域设置更改影响的方法部分(但行为不正常): CultureInfo before = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo(“fa-IR”); int result = tsms.SendSMS(smsTask.MobileNumber.MobileNumberInString, smsTask.Message); Thread.CurrentThread.CurrentUICulture = before; 这是线程池创建结构: foreach (SMSTask smsTask in tasksList) { if (this.threadsCount < this.threadPoolSize) { this.threadsCount++; ThreadPool.QueueUserWorkItem(new WaitCallback(SendMessage), (object)smsTask); } } 我也尝试将locale设置为如下所示的线程对象,但它没有解决问题:(第2行和第3行): threadObject = new Thread(new ThreadStart(TaskProcessingThreadFunction)); threadObject.CurrentCulture = new CultureInfo(“fa-IR”); threadObject.CurrentUICulture = new CultureInfo(“fa-IR”); threadObject.Start(); 请指导我在线程池中运行此方法时应该如何获得正确的结果。 更新后的版本: […]

文化不受支持

我正在使用Visual Studio 2012 Ultimate版本。 我有这个错误,我不知道如何解决它。 文化不受支持。 参数名称:name en-UK是无效的区域性标识符。 描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 exception详细信息:System.Globalization.CultureNotFoundException:不支持Culture。 参数名称:name en-UK是无效的区域性标识符。 请帮我

为什么英语(加勒比海)的文化名称为“en-029”?

为什么英语(加勒比海)的文化名称为“en-029”? 我知道“en-CA”用于英语(加拿大),但为什么029? 它意味着什么? 为什么选择它?

货币文化格式不适用于DataGridView列

我有2个DataGridViews(DGV),并且我都有我要格式化的货币列。 我写的代码似乎在一个中工作,但在另一个中则不起作用。 两个DGV都以这种方式设置:数据首先加载到DataTable中。 然后BindingSource链接到此DataTable。 最后,DGV将这个BindingSource对象用于他们的数据。 我在表单的Load事件中使用以下代码来自定义两个DGV的货币列: dataGridView.Columns[columnIndexHere].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo(“de-DE”); dataGridView.Columns[columnIndexHere].DefaultCellStyle.Format = String.Format(“c”) 似乎将一个DGV中的列格式化为另一个DGV。 此外,它的NOT工作的DGV在其父窗体中甚至没有那么多的function代码..我检查了代码和DGV的属性,看看我是否在其他地方更改格式,但是我什么都没发现.. 两个DGV加载数据的方式之间的唯一微小区别是,对于第一个DGV的DataTable(其中格式化工作),数据通过SELECT语句(通过我自己的函数)加载…在第二个DGV的DataTable(用于哪个格式化不起作用),我不从DB加载任何数据,而只是手动定义列(在DataTable中),因为在这种情况下用户需要输入数据.. 任何线索为什么格式化不能在第二个DGV上工作? 编辑:添加更多信息: 为了演示这个问题,我创建了一个新的C#winforms项目,在其上只添加了一个DataGridView,并将以下代码添加到Load事件中。 即使对于此代码,也没有进行货币格式化: DataTable dataTable = new DataTable(); dataTable.Columns.Add(“ColA”); dataTable.Columns.Add(“ColB”); dataTable.Columns.Add(“ColC”); dataTable.Rows.Add(“John”, 832.293, “London”); dataTable.Rows.Add(“Alice”, 32972978.20489, “Atlanta”); dataTable.Rows.Add(“Mark”, 9184793284739, “Tokyo”); BindingSource bindingSource = new BindingSource(); bindingSource.DataSource = dataTable; dataGridView1.DataSource = bindingSource; var format = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); format.CurrencySymbol = “Mn. “; […]

国家/地区名称为ISO 3166-2代码

我知道如何使用RegionInfo将ISO 3166-2代码转换为完整的英文名称,例如“US”到“United States”。 但是,我怎么能做相反的事情,即拿“美国”并返回“美国”?