3

我正在谷歌应用引擎上建立一个网站,其核心代码和数据库旨在处理不同的语言和地区。

我真正在寻找的是关于如何构建 url 的建议,特别是对于 gae/django/python 设置,因此网站知道它应该根据 url 加载页面的语言。

以下是我的建议,请说出你认为最好的:

子域: http ://fr.mysite.com/ 但是这是否可能有不同的子域,例如“en”、“fr”、“de”,并且仍然指向您帐户中的同一个谷歌应用程序?

域名扩展:http ://www.mysite.fr / 是否可以为每种语言购买不同的域名,然后将其指向同一个应用程序?

第一个文件夹:http ://www.mysite.com/fr/about-us这种方法可行,但编码会很烦人,我宁愿没有比需要更长的 url。想法?

还有其他我没有想到的选择吗?任何建议将不胜感激,谢谢。

4

2 回答 2

3

我只是想指出,这也可以通过 url 中的前缀来完成。像这些:

www.site.com/en/rest_of_url

www.site.com/fr/rest_of_url

该应用程序将像这样设置:

 class LanguageHandler(webapp2.RequestHandler):
     def dispatch(self):
         request = self.request
         args = request.route_args
         if len(args) and args[0] in ['en','fr']:
             self.language = args[0]
             request.route_args = args[1:]
         try:
             # Dispatch the request.
             webapp2.RequestHandler.dispatch(self)
         finally:
             # The web page response Header will now include the 2 letter language code...
             self.response.headers['Content-Language'] = str(self.language)

 class HomePage(LanguageHandler):
     def get(self):
         # self.language is now 'en' or 'fr'
         # ...code goes here...

 app = webapp2.WSGIApplication([
     (r'/(en|fr)', HomePage),
 ], debug = True)
于 2012-12-16T06:37:55.233 回答
1

从发展的角度来看,所有这三个都是可能性。根据您的资源和您希望支持的语言,“域扩展”模型可能被证明是昂贵的并且可能是不可能的 - 例如,.fr 仅限于具有法语存在的居民或实体。

“第一个文件夹”模型可能并不难编程。设置处理程序时,您可以执行以下操作:

application = webapp.WSGIApplication(
[
  ('/(en|fr|de)/', IndexController),
]

然后它将语言标识符作为第一个参数显式传递给处理程序。

正如您所指出的,从 url 的角度来看,子域将是最干净的。如PythonRuntime Environment文档中所述,您可以将多个子域映射到同一个应用程序 - 实际上托管的应用程序都会响应 [anything].[application name].appspot.com。可以从请求对象中提取用于访问的主机。

总的来说,这似乎更像是个人喜好而不是其他任何东西。

于 2010-11-03T09:45:51.690 回答