.NET Core和.NET Framework之间的 CultureInfo 似乎存在一些差异。这有什么理由吗?
例子:
var italian = CultureInfo.GetCultureInfo("it").TextInfo.CultureName;
Run Code Online (Sandbox Code Playgroud)
在.NET Core上解析为:
it
Run Code Online (Sandbox Code Playgroud)
虽然它之前在.NET Framework上解析为:
it-IT
Run Code Online (Sandbox Code Playgroud)
这会破坏一些单元测试。在两个干净的控制台项目中运行它会产生不同的结果。尝试从 Nuget 添加 System.Globalization,结果没有任何差异。
是否需要一些配置才能使其相同,或者它们是否完全破坏了 CultureInfo?
你能看一下我的样品吗?
该结果由以下示例产生:
var str = @"VIENNA IS A VERY BEAUTIFUL CAPITAL CITY.";
var title = new CultureInfo("en-US", false).TextInfo.ToTitleCase(str.ToLower());
MessageBox.Show(title);
Run Code Online (Sandbox Code Playgroud)
因为该程序的语言是土耳其语。我想提请您注意虚线字母 I。但我们都知道正确的方法应该是这样的:
维也纳是一个非常美丽的首都。
我怎样才能得到真实的结果?
我目前正在开发一个 ASP.NET 4.8 MVC 单页应用程序,预计支持多种语言。从各种资源中,我发现实现此目的的一种方法是使用App_GlobalResources每种受支持语言的资源文件。
我在页面中添加了一些导航链接,用于更新线程的当前文化信息,从而将这些语言资源拉入我的应用程序中。
var cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures)
.FirstOrDefault(x => x.ThreeLetterISOLanguageName == language);
if (cultureInfo == null)
cultureInfo = CultureInfo.GetCultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Run Code Online (Sandbox Code Playgroud)
这对于有文化支持的语言来说似乎效果很好。(IE:“eng”拉回en-us并找到Content.en.resx文件,“spa”检索Content.es.resx等)但是我遇到了困难,语言出现在 ISO639-2 列表中(苗族、凯伦族)但没有关联的 CultureInfo跟他们。
我尝试过使用这些来分离文化CultureAndRegionInfoBuilder,但根据我的理解,这只能在我的计算机上运行,而不能在网络上运行。我也无法“破解”现有文化 - 即采用越南语并替换其ThreeLetterISOLanguageName和其他属性 - 因为这些属性是只读的。
当 CultureInfo 不可用时,是否有明确的方法告诉我的代码引用特定的内容文件?还是我以完全错误的方式处理这个问题?
我注意到我们可以通过使用来设置表单的语言Xml:lang="en-US".我想看到其他语言的名称,但不确定从C#访问它们的位置.
请帮忙.
编辑 我更喜欢知道列出值集的枚举类型.有可用吗?或者我们必须自己创造?
因为它似乎没有可用的枚举类型,所以这是我自己创建的.
我正在使用Visual Studio 2008和ASP.NET来构建Web应用程序.我的大多数网页都基于一个母版页.该母版页包含三个用作语言切换的按钮链接; 该Click事件处理程序是这样的:
protected void lbuLangEN_Click(object sender, EventArgs e)
{
this.SwitchLanguage(string.Empty);
}
protected void lbuLangES_Click(object sender, EventArgs e)
{
this.SwitchLanguage("es");
}
Run Code Online (Sandbox Code Playgroud)
然后我有我的私人方法SwitchLanguage:
private void SwitchLanguage(string culture)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该足以使基于我的母版页的页面表现出本地化的行为,即resx根据文化从适当的本地文件中获取资源.但是,它不起作用.它们总是以西班牙语出现,这是我浏览器的默认语言.我在入口和出口处设置了一些跟踪消息SwitchLanguage,显然当前线程没有改变它的文化信息:每次SwitchLanguage调用时,当前线程的文化都是"es-ES",无论我的代码刚刚设置了什么.
我的代码或我采用的方法有问题吗?谢谢.
有没有办法保持文化特定的日期时间格式,但强制12/24小时渲染?我知道我可以用实际的日期/时间格式字符串做很多事情HH:mm:ss ,hh:mm:ss但我想尊重当前的用户文化格式(即mm/dd/yyyy或yyyy/mm/dd等),只需强制12/24小时的时间渲染.
我正在使用ac#application.如果我访问
Thread.CurrentThread.CurrentCulture
Run Code Online (Sandbox Code Playgroud)
对象,从检查中我发现它的文化设置为en-GB,我该如何访问GB值?我看着这个物体,并没有明显存放的地方.
我正在culture根据所选货币更改应用程序。
例如。
_culture = new CultureInfo("en-US");
_culture = new CultureInfo("fr-FR");
Run Code Online (Sandbox Code Playgroud)
在什么地方可以得到所有与工作有关的文化信息的名称.net?
我找到了大多数,但错过了像这样的几个国家
斐济元(FJD),瑞典克朗(SEK),冰岛克朗(ISK),斯里兰卡卢比(LKR)和巴西雷亚尔(BRL)
如果有人知道我能找到这些货币的任何参考文献,那将是很好的。
谢谢
这是我的代码.
double value = double.Parse(Utility.GetParamValueOrDefault(omRecord.paramList[i].value, "0"),CultureInfo.CurrentCulture);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误 FormatException:输入字符串格式不正确
我已经阅读了StackOverFlow的一些线程,说我需要将以下代码添加到我的WPF应用程序的main()中.
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误,我的CurrentCulture仍然不是en-US.
我使用以下代码行将a转换decimal为a string:
decimal a = 0;
a.ToString();
Run Code Online (Sandbox Code Playgroud)
和Resharper给了我以下警告:" 指定字符串文化表达 ".我想这是有道理的,因为有些文化可能会使用"." (点)或","(逗号)作为小数点.
但是,以下代码行:
decimal? a = 0; //a is now nullable
a.ToString();
Run Code Online (Sandbox Code Playgroud)
不要出现相同的警告.我想知道这是否是Resharper中的一个错误,或者是否有关于可空的特殊内容decimal?
cultureinfo ×10
c# ×9
wpf ×3
multilingual ×2
.net ×1
.net-4.8 ×1
.net-core ×1
asp.net ×1
asp.net-mvc ×1
currency ×1
datetime ×1
locale ×1
localization ×1
master-pages ×1
resharper ×1
string ×1
title-case ×1
winforms ×1