我有一个基类,它继承页面并根据数据库中设置的预定值更改区域性。我需要文化来改变货币符号而不是别的。如果db中的值表示en-GB,我需要将页面上的所有货币值更改为英镑,如果它是sa-en en US显示美元符号。我需要文化变量只影响货币而没有别的,所有日期等都应该在默认文化中(en-US)
有什么想法吗?
答案 0 :(得分:2)
基本上,在将数字格式化为货币时,您需要使用格式提供程序。看看下面的例子:
public static string CulturedCurrency(decimal number,string culture = "en-US")
{
NumberFormatInfo numberInfo = CultureInfo.CreateSpecificCulture(culture).NumberFormat;
return number.ToString("c",numberInfo);
}
参考:http://geekswithblogs.net/dtotzke/articles/24573.aspx
如果你想在数据绑定上内联它,请看一下这里的代码:Format string by CultureInfo
答案 1 :(得分:2)
我找到了我正在寻找的解决方案。通过并更改货币的每个元素以使用指定的文化并不容易,所以我开始玩其他选项,我发现如果我在基类中使用了culture函数,我可以执行以下操作:
System.Globalization.CultureInfo ci;
if (culture == "")
{
ci = new System.Globalization.CultureInfo("en-US");
}
else
{
ci = new System.Globalization.CultureInfo(culture);
}
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
ci.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
ci.DateTimeFormat.LongDatePattern = "dddd, MMMM dd, yyyy";
ci.DateTimeFormat.DateSeparator = "/";
这会将文化设置为我想要的,然后将文化的日期(无论文化是什么)设置为日期时间的美国格式。谢谢你的帮助!
答案 2 :(得分:0)
大多数ToString方法都采用格式提供程序; Culture Info是一种格式提供者。您将不得不将当前文化保留为en-US,并使用ToString()方法手动设置货币值的格式。
http://msdn.microsoft.com/en-us/library/3ebe5aks.aspx
HTH。
答案 3 :(得分:0)
using System.Globalization;
...
value.ToString(CultureInfo.CreateSpecificCulture("en-US"));
答案 4 :(得分:0)
稍微补充一下Rob的答案,如果你的URL中有本地化属性,并因此在每个请求上设置文化,你可能只想这样做:
//get language attribute from url. (requires special routing in MVC)
string lang = (string)filterContext.RouteData.Values["lang"] ?? _DefaultLanguage;
switch (lang)
{
case "nl":
lang = "nl-NL";
break;
case "en":
lang = "en-GB";
break;
case "en-US":
lang = "en-US";
break;
default:
lang = _DefaultLanguage;//nl-NL
break;
}
NumberFormatInfo numberInfo = CultureInfo.CreateSpecificCulture("nl-NL").NumberFormat; //always use euros as currency
CultureInfo info = new CultureInfo(lang);
info.NumberFormat = numberInfo;