我即将为我的MVC3 Web应用程序实现本地化.通过大量的方式搜索我的方式,我不确定实现这个的方式.我发现如何做到这一点:
我找到的第一个选项是使用App_GlobalResources和ViewData以及使用Map Routing进行文化选择.(链接)
其次是在我的项目中创建一个单独的Resources文件夹,并将其构建为Model和View文件夹.然后在这些文件夹中创建资源文件.使用这些资源字符串就像使用Viewbag一样.然后编辑Global.asax以处理文化变化并创建部分视图以允许更改文化.执行此操作的说明非常彻底,因此这可能是最好的选择.(链接)
第三是使用DisplayAttribute和resx文件.这个有点朦胧,我找不到那种信息,这样我才能理解这实际是如何实现的以及它的限制.(链接)
第四是创建一个自定义类来处理资源.这看起来非常花哨,易于实现和使用,但如果它确实有效,则没有找到真正的信息.(链接)
然后我发现了一条警告使用App_GlobalResouces和App_LocalResources的帖子.(链接)
在经历了可能的本地化方式之后.我找不到一种得到普遍认可或接受的方式.这让我思考,其中哪些,或者一些我没有找到,将是在ASP.NET MVC3中实现本地化的最佳方式?
globalization localization internationalization asp.net-mvc-3
我在数据库中有两个nvarchar字段来存储DataType和DefaultValue,我有一个DataType Double,值为65.89875英文格式.
现在我希望用户按照所选的浏览器语言格式查看值(英语中的65.89875应显示为德语中的65,89875).现在,如果用户从德语格式编辑为65,89875(英语为65.89875),而英语浏览器中的其他用户视图则为6589875.
发生这种情况是因为在数据库中它在nvarchar列中存储为65,89875,并且在使用英语文化转换时,它变为6589875,因为它将其视为,分隔符,它是德语的十进制运算符.
如何让这个适用于所有浏览器?
在我的办公室,我们就本地化/全球化以及如何处理它进行了长期的辩论.一方推动内置于ASP.NET的资源(.resx)文件路由,一方面推动数据库驱动的解决方案.第三组相信推出自定义解决方案.
当然,每种方法都有其独特的优点和缺点 - 我们一遍又一遍地讨论它,而没有达成真正的共识.
所以,我向社区提出这个问题:根据您的经验,随着应用程序的增长,哪种方法可以提供以下最佳组合:
除了建议之外,我们还对任何可能有助于简化问题的开源项目感兴趣.谢谢!
我需要通过App.Config文件设置应用程序的文化,以便"pt-BR"自动用于解析日期,而无需为每个操作手动通知文化.
据我所知,有一个globalization部分可以system.web在Web.Config文件的部分内定义,但我正在运行一个控制台应用程序,我无法解决这个问题.
任何的想法?
在显示win32/.net例外消息时,如何让我的应用程序始终使用英语?
我收到了这条消息,看起来有人用babelfish来翻译它(它是瑞典语):"System.ComponentModel.Win32Exception:Programmet kunde inte starta eftersom programmets sida-vid-sidakonfigurationärfelaktig."
非常无益,谷歌有4次点击,没有一个有用.所以我必须猜测原始邮件是什么,并谷歌.(原来是:"应用程序无法启动,因为它的并排配置不正确.")
这一次,找出原始的错误信息是相当简单的,从一开始就用英语留言当然会节省我的时间.
那我该怎么做?
该类CultureInfo提供了两种创建方式:
MSDN文档确实略有不同,提到构造函数的一些"Windows文化".但这真的很重要吗?
我应该更喜欢两个中的一个吗?
注意:如果重要的话,我使用的是.NET 3.5版本,我想这样使用它:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
Run Code Online (Sandbox Code Playgroud)
有没有办法在服务器端进行时区偏移,通过http读取请求中的内容,而不是将所有内容发送到客户端并让它处理它?
我刚刚开始本地化ASP.Net MVC应用程序.大多数字符串将在资源文件中定义,并通过Matt的Localization Helpers检索.其他字符串必须存储在数据库中.
我的问题:
我应该CurrentUICulture在请求管道中尽早设置并在整个应用程序中使用它,还是Request.UserLanguages[0]在需要时直接使用?
现在我想我应该CurrentUICulture在Application_BeginRequest中设置.实现看起来像这样:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var cultureName = HttpContext.Current.Request.UserLanguages[0];
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}
Run Code Online (Sandbox Code Playgroud)
这是最好的地方CurrentUICulture,是Request.UserLanguages[0]获得这些信息的最佳地点吗?
更新:
Ariel的帖子让我意识到这可以在没有代码的情况下定义,使用web.config
<system.web>
<!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
<globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>
Run Code Online (Sandbox Code Playgroud) 将例如a转换为decimala时string,使用CultureInfo.InvariantCulture并将其作为传递给IFormatProvider.但为什么这种超载不在object?
一个很好的实现是:
public virtual string ToString()
{
// yadayada, usual ToString
}
public virtual string ToString(IFormatProvider provider)
{
return ToString();
}
Run Code Online (Sandbox Code Playgroud)
这对object类没有任何伤害或好处,但是从它派生的对象可以改写重载,当你不确定类型时调用它会容易得多.
让我遇到这个的问题是当我创建一个方法来获取类的所有属性并将其写入xml时.因为我不想检查对象的类型,我只是打电话ToString.但这是一个小数,输出将基于CurrentCulture线程,这不是最佳的.我能看到的唯一解决方法是更改CurrentCultureto InvariantCulture然后将其更改回以前的状态.但那只会是丑陋的,因为我必须写一下尝试最后的块等.
我目前的代码是:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
writer.WriteElementString(property.Name,
value.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
但我希望它是:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType))) …Run Code Online (Sandbox Code Playgroud) 我试图在我的MVC 3应用程序中实现全球化/本地化.我不希望每种语言都有不同的视图.请建议我如何继续.任何受支持的链接/ URL都会有很大帮助.
globalization ×10
localization ×5
.net ×4
c# ×4
.net-3.5 ×2
asp.net ×2
app-config ×1
asp.net-mvc ×1
cultureinfo ×1
datetime ×1
exception ×1
object ×1
resx ×1
timezone ×1