ASP.NET更改文化只适用于货币而非日期等

时间:2011-03-24 12:25:25

标签: asp.net cultureinfo

我有一个基类,它继承页面并根据数据库中设置的预定值更改区域性。我需要文化来改变货币符号而不是别的。如果db中的值表示en-GB,我需要将页面上的所有货币值更改为英镑,如果它是sa-en en US显示美元符号。我需要文化变量只影响货币而没有别的,所有日期等都应该在默认文化中(en-US)

有什么想法吗?

5 个答案:

答案 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;