在Actionlink上单击带有资源文件的语言切换,而不刷新页面目录

时间:2019-04-05 06:41:00

标签: asp.net-mvc multilingual

我正在一个具有多种语言功能的asp.net网站上工作。目前,我的代码可以与语言切换器一起使用,并且可以显示具有所选语言的表单内容,但是如果用户在部分填写表单后决定切换语言,我的代码将刷新页面,并且表单数据会丢失。

我尝试使用Cookie设置更改的语言。

语言控制器代码-

public ActionResult Change(String Language)
        {
            if(Language != null)
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Language);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(Language);
            }

            HttpCookie cookie = new HttpCookie("Language");
            cookie.Value = Language;
            Response.Cookies.Add(cookie);

            return View("Index");
        }

索引视图-

    <li>@Html.ActionLink("English", "Change", "Language", new { Language = "en"}, null)</li>
    <li>@Html.ActionLink("Françe", "Change", "Language", new { Language = "fr" }, null)</li>
    <li>@Html.ActionLink("spanish", "Change", "Language", new { Language = "es"}, null)</li>

Global.asax.cs

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies["Language"];
            if(cookie != null && cookie.Value != null)
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
            }
            else
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
            }
        }

是否可以在不刷新页面的情况下切换语言和页面内容?

1 个答案:

答案 0 :(得分:0)

您所说的是客户端翻译。这意味着当您更改语言时,翻译资源必须出现在页面上。 您可以使用一些自定义javascript来做到这一点[不是推荐的方式]。

这导致了一个问题,资源将来自哪里?例如,如果您有诸如“我的英语项目”之类的内容,系统将如何知道要翻译成什么内容?

一种方法是让浏览器即时翻译它。例如,使用Google翻译。 Here is a way to do that