基于资源文件在ASP.NET MVC 4中改变语言

7
我有两个资源文件: Resources.resx (包含一些罗马尼亚语的字符串) 和 Resources.en-US.resx (包含相同的英文字符串)。
我只想改变使用哪一个资源文件(在下拉列表、列表框等中)。它可以被放置在_Layout.cshtml中。我不需要检测用户的区域设置。
问:如何从页面中选择一个资源文件?
编辑:是否可以在不更改默认MapRoute的情况下完成?
2个回答

6
你可以通过让下拉菜单重定向到特定语言的URL上来实现这个功能(这很好,因为你可以发送特定语言的链接),然后在控制器的基类中设置线程的区域设置。这篇博客文章更详细地介绍了我所说的内容: ASP.NET MVC中的本地化-3天调查,1天工作

1
这个示例有 .aspx 页面,不是 Razor .cshtml。而且能否在不更改默认的 MapRoute 的情况下完成? - Misi
它使用aspx,但cshtml剃刀页面以相同的方式工作,只是稍微不同的语法(我在应用程序中使用剃刀片做得很好)。您也无需更改默认的MapRoute(因此非本地化URL也将起作用),只需要添加额外的路由即可。 - kmp
你(或任何人)能否写下代码,让我从文件夹_App_GlobalResources_中选择Resources.en-US.resx而不是Resources.resx - Misi
由于当前线程的区域设置为en-US或您从下拉列表中选择的任何其他选项,因此您只需在cshtml页面(或控制器)中使用´@Resources.Welcome´(或您想要字符串的任何属性)。负责设置线程区域设置的部分位于基本控制器的ExecuteCore方法中(在博客文章底部附近)。 - kmp

4
请查看此博客,而无需更改默认的MapRoute。
_Layout.cshtml页面:
@using Resources;
<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div>
            <form method="post">
                @TestResource.SelectLanguage
                <select name="lang">
                    <option></option>
                    <option value="en-GB" @(Culture == "en-GB" ? "selected=\"selected\"" : "")>English</option>
                    <option value="fr-FR" @(Culture == "fr-FR" ? "selected=\"selected\"" : "")>French</option>
                    <option value="de-DE" @(Culture == "de-DE" ? "selected=\"selected\"" : "")>German</option>
                </select>
                <input type="submit" value="@TestResource.Submit" />
            </form>
        </div>
        @RenderBody()
    </body>
</html>

该文化设置在_PageStart.cshtml文件中:
@{
    Layout = "~/_Layout.cshtml";
    if(!Request["lang"].IsEmpty()){
        Culture = UICulture = Request["lang"];
    }
}

最后一页是默认页面本身:
@using Resources;
<h1>@TestResource.Welcome</h1>
<p><img src="images/@TestResource.FlagImage" /></p>

http://www.mikesdotnetting.com/Article/183/Globalization-And-Localization-With-Razor-Web-Pages


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接