1

我有一个网站最终将支持 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/,并且能够为每个国家/地区提供一个简单的 URL。

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

所以你有以下内容(虚拟目录以粗体显示):

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

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

4

3 回答 3

1

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

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

于 2008-12-16T23:26:32.920 回答
1

好吧,他们希望每个站点的 URL 都不同。

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

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

使用一个 URL 进行全球化听起来是个好主意,但我认为它不会正确爬取,即使这样做,也不会提供一个好的书签链接。(法国人使用设置为英语的计算机向另一个法国人发送链接)。还有其他含义,但苹果和微软等网站对每种语言/文化使用不同的网址是有原因的。

在每次会话开始时,我都会检查 url,并相应地设置连接字符串。

最后,我只是在主应用程序中放置了 /ca/ 和 /us/ 目录,为每种语言添加了一些虚拟目录,然后将响应重定向到“选择语言”页面。

也许不是最好的解决方案,但它似乎正在工作。

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

于 2008-12-23T20:31:16.403 回答
0

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

于 2008-12-23T21:07:50.417 回答