页面名称:ASP.Net Web窗体站点,部署多种语言

时间:2013-02-08 23:15:22

标签: asp.net localization web webforms

对标题感到抱歉,想不出一个简单描述它的好方法。关于这个问题......

我使用Web表单在ASP.NET中编写了一个站点,并使用资源文件处理多种语言的静态文本,并且我们的数据库设置为多种语言,因此所有内容都已本地化。它就像在web.config中切换culture和uiCulture一样简单,可以在法语和英语之间切换网站。

但是,必须使用翻译为法语的文件夹和页面名称部署法语站点。例如,http://www.product.com/accessories/category.aspx?id=111必须为http://www.produit.com/accesoires/categories.aspx?id=111

除了制作所有ASPX页面(不是代码隐藏)的副本之外,将它们的名称更改为法语等效物并将其代码隐藏在指向原始的aspx.cs ...什么是首选/正确/很好的方法吗?

请注意:页面/代码本身中引用的URL是动态构建的,因此它们也将被本地化。

谢谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我不能使用路由,因为服务器运行的是.NET 2.0,并且在3.5 SP1之前没有将路由引入到框架中。所以我不得不求助于URL重写。

在web.config中我添加了:

<system.web>
    <httpModules>
      <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>
      ...

<system.webServer>
    <modules>
      <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/>

然后我创建了继承IHttpModule的UrlRewriter,并在Init方法中为HttpApplication.BeginRequest添加了一个处理程序。

在BeginRequest中,我检查URL并将本地化的文件夹名称和页面名称替换为等效的英文名称。对于例如 /mysite.com/a-propos-de-nous / 转换为 /mysite.com/about-us / ,但用户仍在其浏览器中看到法语网址。

要对转换URL进行一些检查,但它运行良好,检查/替换不是很可怕。

我有几个怪癖要弄明白,如果网址是 /mysite.com/a-propos-de-nous (注意最后缺少'/')重写可行,但浏览器地址栏中的URL更改为 /mysite.com/about-us ,这是不可取的。

如果任何人对本地化网址有任何其他想法,意见或经验,请添加到主题。


[编辑 - 2013年2月28日] - RE:浏览器中输入的URL缺少尾部斜杠

添加此项以使其更加完整,万一有人偶然发现它。

这里的问题是IIS添加了一个礼貌的尾部斜杠,这会创建一个重定向。为了处理这种情况,我在这里做的是检查URL并确定它是否包含URL末尾的页面/文件。我在我的Url重写代码中使用以下内容:

        void UrlRewriter_BeginRequest(object sender, EventArgs e)
        {
           HttpApplication app = (HttpApplication)sender;

           ... // other rewrite code here

           string lastSegment = app.Request.Url.Segments[app.Request.Url.Segments.Length - 1];
           string extension = System.IO.Path.GetExtension(lastSegment);

           // no extension, must be a directory/folder
           if (string.IsNullOrEmpty(extension))
           {
               if (!sendTo.EndsWith("/"))
                   sendTo = sendTo + "/";
           }

           app.Context.RewritePath(sendTo);
        }