给定一个CultureInfo
对象,如何获取两个字符的 ISO 3166 国家/地区代码?例如en-US
,来自,我想要US
和来自en-GB
,我想要GB
。我还需要处理文化可能没有国家/地区代码的情况。
我正在使用 dotnetcore 3.1 中的日志记录。当我在记录器中使用日期的复合格式时,我得到的格式与在应用程序代码中将日期转换为字符串时得到的格式不同。
这段代码:
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
_logger = loggerFactory.CreateLogger<Program>();
_logger.LogInformation("TEST date via format string {}", DateTime.Today);
_logger.LogInformation("TEST date with concatentation:" + DateTime.Today);
Run Code Online (Sandbox Code Playgroud)
产生以下输出(注意天和月顺序的变化):
TEST date via format string 08/26/2020 00:00:00
TEST date with concatentation:26/08/2020 00:00:00
Run Code Online (Sandbox Code Playgroud)
我很惊讶记录器没有从应用程序继承文化。我是否遗漏了一些东西,如果没有,我如何控制记录器的文化?
我有一个应用程序在西班牙语服务器中没有任何问题.
当我将应用程序上传到在线服务器(英文窗口)时,我使用Convert.ToDateTime和Convert.ToInt32获得异常(类型为"输入字符串不是有效的Datetime/Int32").是否有任何web.config行可以帮助我解决这个问题?我尝试用西班牙文化添加全球化元素,但没有奏效.
你能帮我个忙吗?
提前致谢.Josema.
使用nUnit测试特定文化的输出(货币格式),但我们得到以下结果.
Fail: Formatting currency amount
String lengths are both 11. Strings differ at index 2.
Expected: "12 765,87 €"
But was: "12 765,87 €"
-------------^
Run Code Online (Sandbox Code Playgroud)
我们看不出字符串之间的区别.我们的预期结果使用"空格"字符.
我们可以将不同的空格字符放入可接受的结果中以使测试通过吗?
顺便说一下,测试的培养物是fr-FR.
编辑:感谢Adam,你发现了unicode角色.我们改变了我们的预期结果,现在每个单元测试通过.
有什么方法可以在不运行应用程序的情况下确定PC的本地文化(例如en-US)?我尝试在“控制面板”中查找| 区域设置(运行WinXP),但是我不知道那里的选择如何映射到PC的文化。
我正在寻找不需要创建.exe的解决方案,例如从命令提示符(不是PowerShell)运行命令,或者运行VbScript或JS文件(只要我们了解的是真正的文化,而不是IE)设置。)
谢谢
这个图表已经在我关注的博客上多次链接,我感觉自己就像一个没有得到它的人.所以,在这里走出困境并询问这个社区.请在这里的博客文章中解释这个网格.
我下载了一个读取文件的程序,然后将双精度值从String解析为Double.但是我得到一个例外,因为这个文件包含带有'.'的数字.分隔符,但在我的文化中有','.如何明确设置文化?
在我正在使用的ASP.Net网站中
String.Format("{0:C}", param)
Run Code Online (Sandbox Code Playgroud)
格式化货币值.在我的本地机器上这很好用,但是当将网站部署到服务器时,输出从€切换到$.
显然服务器有不同的文化设置,是否有一种简单的方法来改变这个应用程序?(无法直接访问服务器设置)
我可以更改web.config条目吗?
我想在我的网站上显示多种语言和UI文化.我启用了IIS 7标志,它自动从浏览器中获取文化,如下所示:
<globalization
enableClientBasedCulture="true"
culture="en-GB"
uiCulture="auto:en"/>
Run Code Online (Sandbox Code Playgroud)
这非常有效,因为加载了正确的Resources文件,并显示正确的文化(GB为0.00; DE为0,00).
然而,这有一个意外的干扰我的外部服务的问题,例如这里是与PayPal接口的代码.
var paymentDetails = new PaymentDetailsType
{
ItemTotal = new BasicAmountType
{
currencyID = currencyCode,
Value = basket.SubTotal.ToString("0.00")
},
...
}
Run Code Online (Sandbox Code Playgroud)
这段代码基本上创建了一个像这样格式化的字符串'50.25'
,但是当PayPal总是需要点小数点时,当选择具有逗号作为小数点(例如DE - 德语)的文化时,ToString("0.00")
生成'50,25'
因此我的代码失败.
什么是纠正这个的最佳方法?我仍然希望将文化设置为用户的文化,但是我想设置我的代码的某些部分以使用我自己的文化.
我知道我可以用特定的文化来养活这种ToString()
方法,但这看起来非常苛刻.更专业的清洁方法?
我遇到了XElement和Culture的问题.
我的当地文化是法国人.浮动值使用逗号而不是点编写.
Console.WriteLine(1.1d);
//1,1
Run Code Online (Sandbox Code Playgroud)
但是,当我在XElement中放入一个double时,它以美国格式存储.
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
Console.WriteLine(myXmlElement.Value);
//1.1
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试解析我的XElement的值时,我得到一个FormatException.
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = double.Parse(myXmlElement.Value);
//Throws a FormatException
Run Code Online (Sandbox Code Playgroud)
我发现这种行为真的很奇怪.当我写一个XDoucment时,它不是写在应用程序或线程的文化中,而是总是在美国文化中.我错过了什么吗?我有一些解决方法来表现我期望的方式,但我发现它们并非"干净".
//This will work
XElement myXmlElement = new XElement("ADoubleElement", 1.1d.ToString());
double myDouble = double.Parse(myXmlElement.Value);
//This will also work but if I write XElement, it will not have the correct Culture
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = (double)myXmlElement;
Run Code Online (Sandbox Code Playgroud) culture ×10
c# ×6
.net ×4
.net-core ×2
asp.net ×2
cultureinfo ×2
localization ×2
asp.net-mvc ×1
currency ×1
data-access ×1
formatting ×1
iso-3166 ×1
logging ×1
nunit ×1
parsing ×1
persistence ×1
string ×1
web-config ×1
xelement ×1