Google App Engine网站为国际观众,多种语言建立
-
28-09-2019 - |
题
我正在在Google App Engine上建立一个网站,其核心代码和数据库旨在处理不同的语言和区域。
我真正寻找的是有关如何将URL构造的建议,特别是针对GAE/DJANGO/PYTHON设置的建议,因此网站知道根据URL的不同语言,该网站应该加载哪种语言。
这是我的建议,请注意您认为最好的内容:
子域: http://fr.mysite.com/ 但是,这是否有可能具有不同的子域,例如“ en”,“ fr”,“ de”,并且仍然指向您帐户中的同一Google应用程序?
域扩展: http://www.mysite.fr/是否可以为每种语言购买不同的域名,然后将其指向同一应用程序?
第一个文件夹: http://www.mysite.com/fr/about-us 这种方法会起作用,但会很烦人的编码,我宁愿没有更长的URL,而是不需要的。想法?
我还有其他选择吗?任何建议将不胜感激,谢谢。
解决方案
从发展的角度来看,这三个都是可能性。 “域扩展”模型可能被证明是昂贵的,并且可能是不可能的,具体取决于您的资源和您希望支持的语言-FR仅限于法国存在的居民或实体。
“第一个文件夹”模型可能并不难编程。设置处理程序时,您可以做这样的事情:
application = webapp.WSGIApplication(
[
('/(en|fr|de)/', IndexController),
]
然后,它将明确将语言标识符作为第一个参数传递给处理程序。
正如您指出的那样,从URL的角度来看,子域将是最干净的。如在 pythonruntime环境 DOCS您可以将多个子域映射到同一应用程序 - 实际上,托管的应用程序都会响应[任何东西]。[应用程序名称] .Appspot.com。可以从请求对象提取用于访问的主机。
总体而言,这似乎比其他任何事情都更像是个人偏好。
其他提示
我只是想指出,这也可以在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)