【问题标题】:Page Names: ASP.Net Web Forms Site, Deploying Multiple Languages页面名称:ASP.Net Web 表单站点,部署多种语言
【发布时间】:2013-02-08 23:15:21
【问题描述】:

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

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

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

除了复制所有 ASPX 页面(不是隐藏代码)之外,将它们的名称更改为法语等价物并让它们的代码隐藏指向原始 aspx.cs...什么是首选/正确/这样做的好方法吗?

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

谢谢!

【问题讨论】:

    标签: asp.net localization web webforms


    【解决方案1】:

    【讨论】:

    • 嗨,塔尔马里斯。我刚开始阅读它,看看它是否会做我想要完成的事情。如果任何阅读本文的人将其用于此目的并且效果很好,请告诉我。谢谢。
    【解决方案2】:

    我不能使用路由,因为服务器正在运行 .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 .

    要转换 URL 需要做一些检查,但效果很好,而且检查/替换并不可怕。

    我有几个怪癖要弄清楚,如果 URL 以 /mysite.com/a-propos-de-nous 的形式出现(请注意末尾缺少的“/”)重写可以,但是浏览器地址栏中的 URL 更改为 /mysite.com/about-us,这是不需要的。

    如果有人在本地化 URL 方面有任何其他想法、cmets 或经验,请添加到线程中。


    [编辑 - 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);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多