ASP.Net MVC 3 中的全球化
Posted
技术标签:
【中文标题】ASP.Net MVC 3 中的全球化【英文标题】:Globalization in ASP.Net MVC 3 【发布时间】:2011-07-27 11:13:49 【问题描述】:我正在尝试在我的 MVC 3 应用程序中实现全球化/本地化。我不希望每种语言都有不同的视图。请建议我如何继续。任何受支持的链接/URL 都会有很大帮助。
【问题讨论】:
见ASP.NET MVC 5 culture in route and url 【参考方案1】:您可以像任何其他应用程序一样对其进行本地化:
-
创建一个文件夹,命名为 e.g.资源
右键单击文件夹并添加类...选择资源文件。给它起任何你喜欢的名字,例如字符串.resx
在文件属性下,将自定义工具更改为
PublicResXFileCodeGenerator
使用翻译键值对填充资源文件(这将是默认翻译)
以这种格式创建其他具有文化名称的资源:name.de.resx,例如Strings.de.resx
(This is for Razor) 破解打开 Views 文件夹中的 web.config 并将其添加到 /configuration/system.web.webPages.razor/pages/namespaces: (假设资源是您在其中创建资源的文件夹的名称,并且您没有更改资源文件本身的默认命名空间)。
此步骤意味着您不必在每次想要引用翻译时都完全限定视图中的资源类。
在您的视图中使用翻译代替文本,如以下代码:
@Strings.MyString
将根据 CultureInfo.CurrentCulture 在视图中自动翻译字符串,但这不会为您自动设置
您需要更改CurrentCulture
(可能在Application_BeginRequest
)。你如何做到这一点取决于你,它可以是一个设置它的路由值,或者你可以阅读用户的浏览器语言
您可以在HttpContext.Current.Request.UserLanguages
中找到用户首选语言的列表(按顺序)。
【讨论】:
在第 7 步中,我在 web.xml 中执行相同操作。配置为 highligted 但收到错误“找不到类型或命名空间名称 *****'Resource'(您是否缺少 using 指令或程序集引用?)”*****“请详细说明或提供任何示例应用程序。 这是你需要的最低限度的工作mediafire.com/file/5843d7tyqalv451/Globalization.zip 你应该添加 如何在 javascript 中访问资源字符串? 如果您想通过 javascript 访问它们,您需要对返回字符串的服务进行一些 ajax 调用。【参考方案2】:这是一篇关于 MVC 3 全球化/国际化的非常详细的帖子http://afana.me/post/aspnet-mvc-internationalization-part-2.aspx
【讨论】:
这篇文章非常适合涵盖语言、文化和地区之间的差异——但它在调用 Web.config 中不完整的命名空间的方式上与上面的文章犯了同样的错误。 它提到您需要将命名空间添加到您的视图 web.config【参考方案3】:要向Martin Booth's great answer 添加一些详细信息(以防他的 MediaFire 链接可能会消失),我是这样做的:
我使用了两个文件,因为我现在只需要英语和德语(“de”):
对于每个文件的属性,我必须为每个文件手动输入 Custom Tool 以及 Custom Tool Namespace 值:
最后,我在根 Web.Config 文件的 <system.web>
部分下方输入了以下内容:
<globalization uiCulture="auto" culture="auto" />
当然,我还在 Views 文件夹(即不是根目录)下的 Web.Config 文件中添加了命名空间指令,正如 Martin 所描述的:
<add namespace="ViewResources" />
然后我终于可以访问在我的(部分)Razor 视图中强类型化的资源:
<h2>@ViewResources.Test1</h2>
顺便说一句:这也适用于 MVC 4,而不仅仅是 MVC 3。
【讨论】:
【参考方案4】:您需要的下一步是本地化您的 Javascript 库。 看这里:MVC-JavaScript-localization-of-external-js-files
【讨论】:
以上是关于ASP.Net MVC 3 中的全球化的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core MVC 中将自定义查询参数添加到操作 URL
如何使 Asp.NET Core MVC 应用程序在授权重定向上使用外部 url?