【问题标题】:Change language based on resources files in ASP.NET MVC 4根据 ASP.NET MVC 4 中的资源文件更改语言
【发布时间】:2012-04-10 14:38:13
【问题描述】:

我有 2 个资源文件:Resources.resx(有一些罗马尼亚语字符串)和 Resources.en-US.resx(有相同的英文字符串)。

我只想更改(在下拉列表、列表框、...中)要使用的巫婆资源文件。它可能在 _Layout.cshtml 中。我不需要检测用户的文化。

问:如何从页面中选择资源文件?

编辑:可以在不更改默认 MapRoute 的情况下完成吗?

【问题讨论】:

    标签: asp.net-mvc razor resources asp.net-mvc-4


    【解决方案1】:

    您可以这样做的一种方法是让下拉菜单将页面重定向到特定语言的 URL(这非常好,因为您可以发送特定语言的链接)然后在控制器的基类中设置线程的语言环境。

    这篇博文更详细地介绍了我所说的内容:Localization in ASP.NET MVC – 3 Days Investigation, 1 Day Job

    【讨论】:

    • 这个例子有 .aspx 页面而不是 razor .cshtml。并且可以在不更改默认 MapRoute 的情况下完成吗?
    • 它使用 aspx 但 cshtml razor 页面的工作方式相同,只是语法略有不同(我在应用程序中使用 razor 就可以了)。您也不需要更改默认 MapRoute(因此不支持语言环境的 URL 也可以使用),您只需要添加一个额外的路由。
    • 您(或任何人)能否写下我从文件夹中选择 Resources.en-US.resx 而不是 Resources.resx 的代码App_GlobalResources ?
    • 由于当前线程的语言环境设置为 en-US 或您从下拉列表中选择的任何内容,您只需在 cshtml 中使用“@Resources.Welcome”(或您想要字符串的任何属性)页面(或控制器)。负责设置线程区域设置的部分在基本控制器的 ExecuteCore 方法中(非常靠近博客文章的底部)。
    【解决方案2】:

    检查此Blog。 无需更改默认 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

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多