这真让我抓狂.我在ASP.NET 2.0 WebForm页面中有以下字符串
string s = "0.009";
Run Code Online (Sandbox Code Playgroud)
很简单.现在,如果我的文化是西班牙语 - 这是"es-ES" - 我尝试将字符串转换为Double,我会执行以下操作:
double d = Double.Parse(s, new CultureInfo("es-ES"));
Run Code Online (Sandbox Code Playgroud)
我期待的是0,009.相反,我得到9.我明白.NET认为它是千分隔符,在en-US中是一个逗号,但不应该把我传递给parse方法的文化信息并应用正确的格式转换?
如果我做
double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));
Run Code Online (Sandbox Code Playgroud)
格式化现在是0,009.任何人?
有没有人知道ASP.Net如何在没有国家名称的情况下获得当前文化的语言?我知道这种不变文化没有这个问题,但我不知道如何在不指定明确语言的情况下创建它们.我想显示活动语言,在nl-nl中这是荷兰语(荷兰).
这是我设置currentCulture的方式:
private void Application_BeginRequest(Object source, EventArgs e)
{
string[] languages = HttpContext.Current.Request.UserLanguages;
string language = languages[0].ToLowerInvariant().Trim();
if (!string.IsNullOrEmpty(language))
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
}
}
Run Code Online (Sandbox Code Playgroud)
就我而言,文化是"nl-nl".问题是当使用CurrentCulture.EnglishName时网站上显示的是"荷兰语(荷兰)".我只想看荷兰人!
谢谢!
下面列出的场景的最佳做法是什么?
我们有一个应用程序,我们想支持多种货币.该软件将尊重用户的区域设置和区域设置,以指示正确的数字格式,即$ 10,000.00或10.000,00₴等.
但是,我们希望能够根据货币ID(可能是三个字母的ISO4217代码)格式化不同的数字.我们的想法是使用每种货币在数据库中存储一个表,然后请求用户选择将使用的货币符号.然后,程序将根据区域设置/区域设置格式化所有数字,但将使用我们程序中定义的货币符号.
因此,给出以下数值和货币
10000 AUD
5989.34 USD
450 EUR
该计划将输出
$ 10,000.00
$ 5,989.34
€450.00
或者使用区域设置将数字格式化为#####,## $结果将是;
10000,00 $
5989,34 $
450,00€
尊重区域设置/区域编号格式但显示不同的货币,最佳做法是什么?
我希望这是有道理的.
使用的技术是c#.NET 2.0.
我使用下面的代码来获取文化类型列表,是他们如何获得国家名称的方式?
谢谢
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
sb.Append(ci.DisplayName);
sb.AppendLine();
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
样本输出:
西班牙语(波多黎各)
西班牙语(美国)
我的客户端想要为我的字符串资源的子集指定他们自己的本地化内容版本.
为简单起见,这里是基本的例子:
假设我有2个本地化字符串(显示英文内容)
PageTitle ="Hello World"
PageDescription ="这是一个更加冗长的Hello World版本!"
我想本地化这些,所以我有资源文件.
理想情况下,"Strings.fr-ca-clientX"只能指定他们想要"覆盖"的字符串.换句话说,他们可能只想更改PageTitle并继续使用"fr-ca"资源文件中的PageDescription.
那么我该如何在.NET中解决这个问题呢?理想情况下,我只是创建resx文件并在我的"Web.config"中指定文化,它应该工作...
<globalization uiCulture="fr-ca-clientX" culture="fr-ca-clientX" />
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用."标签包含'culture'属性的无效值"是我的第一个obsticle.
谢谢,
贾斯汀
我的代码中有这个:
var date1 = DateTime.ParseExact(date, "dd.MM.yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
当我现在的文化是荷兰语(nl-NL而不是5月1日)时,我得到1月5日.
我认为错误在第二个参数中dd.MM.yyyy HH:mm:ss.
有没有办法解决这个问题CultureInfo?
我有一个具有不同国籍的人的电子邮件地址列表(对于我拥有iso代码的每个人)
当我向所有这些人发送电子邮件时,在邮件文本中我需要将datetime字段转换为在其特定文化中格式化的字符串.
为此,我正在做
CultureInfo ci = new CultureInfo(ISO);
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);
Run Code Online (Sandbox Code Playgroud)
并且工作完美,但是如果我使用LongDatePattern而不是短,用于显示日期,如"2010年6月13日星期一",它的工作正常,除了日期和月份的语言.
如果人的文化是它 - 我需要显示"Martedi"和"Giugno"而不是"星期一"和"六月"
如何在不改变当前UI文化的情况下做到这一点?
我想我理解CultureInfo的用法.
如果我做的很简单:
const int a = 5;
string b = a.ToString();
Run Code Online (Sandbox Code Playgroud)
它等于:
const int a = 5;
string b = a.ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
换句话说,ToString()默认使用InvariantCulture或CurrentCulture吗?
我使用此标准代码填充国家/地区列表:
static void Main(string[] args)
{
List cultureList = new List();
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
foreach (CultureInfo culture in cultures)
{
try
{
RegionInfo region = new RegionInfo(culture.LCID);
if (!(cultureList.Contains(region.EnglishName)))
{
cultureList.Add(region.EnglishName);
Console.WriteLine(region.EnglishName);
}
}
catch (ArgumentException ex)
{
// just ignore this
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看到一些国家被遗漏了.只是想知道这种情况的原因是什么?
是否可以从CultureInfo类或System.Globalization命名空间中的任何其他类获取距离单位.
例如"en-GB"将是"mile","en-FR"将是"km"