Question

I'm building a site on google app engine and its core code and database is designed to handle different languages and regions.

What I'm really looking for are suggestions on how the url's should be structured, specifically for a gae/django/python setup, so the website knows what language it should be loading the pages in depending on the url.

Here are my suggestions, please chime in on what you think is best:

SUBDOMAIN: http://fr.mysite.com/ But is this possible to have different subdomains, such as "en", "fr", "de", and still point to the same google app in your account?

DOMAIN EXTENSION: http://www.mysite.fr/ Would it be possible to purchase different domain names for each of the languages, then point it to the same app?

FIRST FOLDER: http://www.mysite.com/fr/about-us This method would work, but would be annoying to code for and I'd rather not have longer urls than needed. Thoughts?

Are there any other options I'm not thinking of? Any advice would be appreciated, thanks.

Was it helpful?

Solution

All three of those are possibilities from a development standpoint. The "domain extension" model is likely to prove to be expensive and possibly impossible depending on your resources and the languages you wish to support - .fr for example is restricted to only residents or entities with a French presence.

The "first folder" model may not be that difficult to program for. When setting up your handlers, you could do something like this:

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

Which would then explicitly pass the language identifier in as the first parameter to the handler.

Subdomains, as you pointed out, are going to be the cleanest from a url perspective. As noted in the PythonRuntime Environment docs you can map multiple subdomains to the same application - in fact hosted applications will all respond to [anything].[application name].appspot.com. The host used for access can be extracted from the request object.

Overall it seems like more of a personal preference than anything else.

OTHER TIPS

I just wanted to point out that this could also be done with a prefix in the url. Like these:

www.site.com/en/rest_of_url

www.site.com/fr/rest_of_url

the app would be setup like this:

 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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top