对标题感到抱歉,想不出一个简单描述它的好方法。关于这个问题......
我使用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是动态构建的,因此它们也将被本地化。
谢谢!
答案 0 :(得分:0)
您是否尝试过在asp.net中查看路由? http://www.hanselman.com/blog/OneASPNETSneakPeekElegantWebFormsAndSnowballsInHell.aspx
答案 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);
}