我正在谷歌应用引擎上构建一个网站,其核心代码和数据库旨在处理不同的语言和区域。
我真正想要的是关于如何构建网址的建议,特别是对于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 此方法可行,但代码编码会很烦人,我宁愿没有比需要更长的网址。想法?
还有其他我没想过的选择吗?任何建议都将不胜感激,谢谢。
答案 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。可以从请求对象中提取用于访问的主机。
总的来说,这似乎更像是个人偏好。