多语言站点虚拟目录的最佳方式

时间:2008-12-16 23:13:24

标签: asp.net globalization virtual-directory multilingual

我的网站最终将支持4种语言和2个国家/地区(美国和加拿大,英语和西班牙语)

我想知道设置目录结构的最佳方法是什么?

现在,我有一个名为site.com的根网站:

这将带您进入选择国家/地区和语言的页面。

理想情况下,我想拥有如下目录:

site.com/ca/en/ (Canada English)
site.com/ca/fr/ (Canada French)
site.com/us/en/ (US English)
site.com/us/es/ (US Spanish)

但这意味着我将把“ca”和“us”虚拟目录和语言虚拟目录放在其中。这是一种很好的做法,还是我应该做的事情:

site.com/ca-en/ (Canada English)
site.com/ca-fr/ (Canada French)
site.com/us-en/ (US English)
site.com/us-es/ (US Spanish)

编辑:我已完成以下操作:

应用程序中有一个虚拟目录:/ ca /​​和/ us /。它们都有一个default.aspx,它只是一个重定向。就我而言,我将它们重定向到他们的英语网站:

例如: site.com/ca/ - > site.com/ca/en/ site.com/us/ - > site.com/us/en /

如果输入site.com,您将被推送到语言选择页面。基本上,我在每个请求中使用Global.asax中的正则表达式来查找语言/文化字符串。

这有以下好处。国家分离。因此,您可以控制site.com/ca/或site.com/us/,并且能够为每个国家/地区提供简单的网址。

无论如何,虚拟目录/ en /,/ fr /和/ es /都在各自的国家/地区物理文件夹中。

所以你有以下(Virtual Dirs是粗体):

site.com/ca/ zh_ /(默认) site.com/ca/fr/ site.com/us/en/(默认) site.com/us/es /

这意味着您需要拥有五个(相同的)应用程序,除了您可以使用URL获取当前语言和国家/地区(并将其指向正确的数据库)。

3 个答案:

答案 0 :(得分:1)

为什么不使用一个站点并检查客户端设置(request.servervariables / HTTP_ACCEPT_LANGUAGE)以了解要使用的首选语言以及在asp.Net中使用内置全球化?

如果根据国家/地区/语言显示完全不同的内容,那么我可以理解为什么要将它们分开。

答案 1 :(得分:1)

嗯,他们希望每个网站的网址都不同。

基本上它实际上是一个站点(出于维护原因),我们正在使用全球化来确定要使用的连接字符串(不同的数据库,每个数据库中的相同结构)

每次我们发布时,我都会发布到四个地点。相同的应用程序。

全球化使用一个URL SOUNDS就像一个好主意,但我不认为它会正常使用蜘蛛,即使它确实如此,也不能提供良好的可收藏链接。 (法国人使用设置为英语的计算机将链接发送给另一个法国人)。还有其他含义,但有一个原因,像苹果和微软这样的网站为每种语言/文化使用不同的网址。

在每个Session开始时,我检查url,并相应地设置连接字符串。

在结束时,我只是将/ ca /​​和/ us /目录放在主应用程序中,为每种语言添加一些虚拟目录做一个响应重定向到“选择语言”页面。

也许不是最好的解决方案,但似乎有效。

这样做的另一个好处是,如果某个特殊页面仅适用于一个站点,则只能添加到该站点。

答案 2 :(得分:0)

普遍接受的本地化术语是ll-CC,用于语言代码连字符国家/地区代码。例如:en-US,虽然en-US可能是默认的en-GB或en-CA作为后备...... es-MX等也值得。但是,使用子域可能更好,这样可以在没有前面复杂的负载平衡规则的情况下分解资源。例如:us.en.yoursite.com ...这也可以让webfarm环境中的服务器更容易分解。我建议让实际代码与每个站点的设置更改相同以匹配本地化。然后使用您在文本键中传递的本地化资源,并根据站点的本地化模式解析语言转换。注意:.Net和其他平台提供内置的资源本地化选项。