1

我想在 asp.net 4.0 网站上使用多语种语言切换器。下面的代码有效;

 <body>
 <div id="polyglotLanguageSwitcher"> 
    <form id="form1" runat="server"  > 
        <form action="#" >
           <select id="polyglot-language-options" >
               <option id="en" value="en" selected="selected">English</option>
               <option id="fr" value="fr">Fran&ccedil;ais</option>
               <option id="de" value="de">Deutsch</option>
               <option id="it" value="it">Italiano</option>
               <option id="es" value="es">Espa&ntilde;ol</option>
           </select>
        </form>
   </form>
</div>

我想使用如下所示(在<form id="form1" runat="server"> </form>标签中),但它不起作用。

<body>
 <form id="form1" runat="server"  >
    <div id="polyglotLanguageSwitcher">
       <form action="#" >
           <select id="polyglot-language-options" >
               <option id="en" value="en" selected="selected">English</option>
               <option id="fr" value="fr">Fran&ccedil;ais</option>
               <option id="de" value="de">Deutsch</option>
               <option id="it" value="it">Italiano</option>
               <option id="es" value="es">Espa&ntilde;ol</option>
           </select>
       </form>
    </div>
 </form>

polyglog.js 在这里: https ://github.com/ixtendo/Polyglot-Language-Switcher/blob/master/js/jquery.polyglot.language.switcher.js

有任何想法吗?

4

2 回答 2

0

ASP.Net MVC 有可用的替代方法,因此大部分工作都在服务器端完成。你需要一个自定义路由、一个控制器钩子(例如 in OnActionExecuting)和一些改变服务器端文化的技巧。此外,您的所有字符串都需要位于特定于语言环境的资源文件中。

这里有几个链接可以提供帮助:

http://geekswithblogs.net/shaunxu/archive/2010/05/06/localization-in-asp.net-mvc-ndash-3-days-investigation-1-day.aspx

http://download1.parallels.com/SiteBuilder/Windows/docs/3.2/en_US/sitebulder-3.2-win-sdk-localization-pack-creation-guide/30801.htm

我使用这些作为参考来为我的 MVC 应用程序构建通用本地化库。

第 1 部分自定义路由

我的自定义路线如下所示。它需要一个2字母或2-2字母语言代码(ISO 格式)en,例如en-EN

//Special localisation route mapping - expects specific language/culture code as first param
routes.MapRoute(
    name: "Localisation",
    url: "{lang}/{controller}/{action}/{id}",
    defaults: new { lang = "en", controller = "Home", action = "List", id = UrlParameter.Optional },
    constraints: new { lang = @"[a-z]{2}|[a-z]{2}-[a-zA-Z]{2}" }
);

然后,您更改语言的链接将看起来像这些锚点:

<a href="en">Englishe</a>
<a href="fr">Fran&ccedil;ais</a>
<a href="de">Deutsch</a>
<a href="it">Italiano</a>
<a href="es">Espa&ntilde;ol</a>
于 2014-11-28T09:47:35.680 回答
0

尝试跟随它对我有用。我在 div polyglotLanguageSwitcher 中添加了表单标签,它起作用了:

<body>
    <div id="container" style="width: 400px; margin: 140px auto 40px;">
        <!-- begin language switcher -->
        <div id="polyglotLanguageSwitcher">
            <form id="form1" runat="server">

                <select id="polyglot-language-options">
                    <option id="en" value="en">English</option>
                    <option id="fr" value="fr">Fran&ccedil;ais</option>
                    <option id="de" value="de">Deutsch</option>
                    <option id="it" value="it">Italiano</option>
                    <option id="es" value="es">Espa&ntilde;ol</option>
                </select>

            </form>
        </div>
        <!-- end language switcher -->

    </div>
</body>

如果您想要 div 之外的表单,请在 js 中更改以下行,但我不推荐它:

var options = $("#" + rootElementId + " > form > select > option");

var options = $("#" + rootElementId + " > select > option");

  $("#" + rootElementId + " form:first-child").remove();

$("#" + rootElementId + " :first-child").remove();
于 2014-11-28T09:42:48.133 回答