针对国际受众,多种语言构建的Google App Engine网站

时间:2010-11-02 20:20:50

标签: python django google-app-engine regional

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

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

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

SUBDOMAIN:http://fr.mysite.com/ 但是,这可能有不同的子域名,例如“en”,“fr”,“de”,并且仍然指向您帐户中的相同Google应用?

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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)

答案 1 :(得分:1)

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

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

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

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

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

总的来说,这似乎更像是个人偏好。