我有一个国际化的项目(使用中文或英文),我通过在web.config文件中注释<add key="Localization" value="zh-CN"/>
来切换语言环境。
有一个小问题一直困扰着我,在某些页面中有一些“注册”或“保存”按钮,其中imgurl在css文件中定义。但是,我打算通过javascript切换imgurl,因为有两种图像用两种差异语言(img与中文“注册”和“保存”)。
到目前为止,我还没有进入任何人的土地。不要有任何线索。如何自动设置项目以检测正在运行的语言版本? Javascript可以做到吗?
答案 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>