设置我的ASP.NET MVC 3项目会自动感知哪个语言正在运行

时间:2013-08-26 01:55:05

标签: javascript asp.net asp.net-mvc-3

我有一个国际化的项目(使用中文或英文),我通过在web.config文件中注释<add key="Localization" value="zh-CN"/>来切换语言环境。

有一个小问题一直困扰着我,在某些页面中有一些“注册”或“保存”按钮,其中imgurl在css文件中定义。但是,我打算通过javascript切换imgurl,因为有两种图像用两种差异语言(img与中文“注册”和“保存”)。

到目前为止,我还没有进入任何人的土地。不要有任何线索。如何自动设置项目以检测正在运行的语言版本? Javascript可以做到吗?

1 个答案:

答案 0 :(得分:1)

我们首先需要为make添加新的路由,例如默认为主要语言

context.MapRoute(
                name: "lang",
                url: "{lang}/{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                constraints : new { lang = @"zh|en" },
                namespaces: new[] { "NamespaceToControllers" }
            );

            context.MapRoute(
                name : "default",
                url : "{controller}/{action}/{id}",
                defaults : new { controller = "Home", action = "Index", id = UrlParameter.Optional, lang = "zh" },
                namespaces : new [] { "NamespaceToControllers" }
            );

第二部分 - 我们必须修改DefaultController来更改cultureInfo并在配置文件BaseController中删除它

public class DefaultController : BaseController
    {
        public string CurrentLangCode { get; protected set; }

        public Language CurrentLang { get; protected set; }

        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            if (requestContext.HttpContext.Request.Url != null)
            {
                HostName = requestContext.HttpContext.Request.Url.Authority;
            }

            if (requestContext.RouteData.Values["lang"] != null && requestContext.RouteData.Values["lang"] as string != "null")
            {
                CurrentLangCode = requestContext.RouteData.Values["lang"] as string;

                var ci = new CultureInfo(CurrentLangCode);
                Thread.CurrentThread.CurrentUICulture = ci;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
            }
            base.Initialize(requestContext);
        }
    } 

public class BaseController {

     protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            if (requestContext.HttpContext.Request.Url != null)
            {
                HostName = requestContext.HttpContext.Request.Url.Authority;
            }
            base.Initialize(requestContext);
        }
}

要检查这一点,只需在主网址 / en 之后编写 第3部分

我们必须更改按钮之类的静态内容,我们需要添加新的Asp.net文件夹 - App.LocalResourses 并创建新文件 - GlobalRes.resx 和的 GlobalRes.en.resx

在此文件中,按当前语言的按钮或静态

添加字符串

毕竟我们需要更改.resx文件的属性:

Build Action: Embedded Resource
Custom Tool: PublicResXFileCodeGenerator

我们必须向web.config添加新的命名空间

<system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="urAppNamespace.Helper" />
        <add namespace="urAppNamespace.Tools" />
        <add namespace="urAppNamespace.App_LocalResources" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

这是实现此逻辑的示例

<li><span class="login">@GlobalRes.Enter</span></li>
<li>@Html.ActionLink(GlobalRes.Register, "Register", "User")</li>