pepebe
1/28/2013 - 4:48 PM

MODX Cloud web rules example for Babel with two languages. In this example, German is the default language with resources in the 'web' co

MODX Cloud web rules example for Babel with two languages.

In this example, German is the default language with resources in the 'web' context; English is the secondary language, set up in the 'en' context.

This technique is based on the "SEO Friendly Multilingual Websites" article here: http://www.multilingual-modx.com/blog/2011/seo-friendly-multilingual-websites-with-modx-and-babel.html

set $lang de;

# choose the language that appears first in the accept_language header
if ($http_accept_language ~* "(de|en)") {
  set $lang $1;
}

location ~ ^/$ {
  rewrite ^ $lang/ redirect;
}

location ~ ^/(de|en) {
  # redirect favicon.ico and assets/* requests to site root
  rewrite ^/(de|en)/(favicon.ico|assets.*)$ /$2 redirect;
  # main Babel rewrite
  rewrite ^/(de|en)/(.*)$ /?cultureKey=$1&q=$2 break;
  # MODX rewrite
  try_files $uri $uri/ @modx-rewrite;
}

location / {
  try_files $uri $uri/ @modx-rewrite;
}
site_url       http://site.com/en/
base_url       /en/
cultureKey     en
--- also recommended to provide resource ids for the following settings
error_page     (id)
site_start     (id)
site_url       http://site.com/de/
base_url       /de/
cultureKey     de
--- also recommended to provide resource ids for the following settings
error_page     (id)
site_start     (id)
<?php
if($modx->context->get('key') != "mgr"){
    /* grab the current langauge from the cultureKey request var */
    switch ($_REQUEST['cultureKey']) {
        case 'en':
            /* switch the context */
            $modx->switchContext('en');
            break;
        default:
            /* Set the default context here */
            $modx->switchContext('web');
            break;
    }
    /* unset GET var to avoid
     * appending cultureKey=xy to URLs by other components */
    unset($_GET['cultureKey']);
}