I wrote about some Drupal multilingual SEO issues a while ago and while multilingual support has greatly improved in Drupal 6, there are still some caveats. For more information check out Gábor Hojtsy’s great slideshare on the current state of Multilingual Drupal.
Path prefix issues
For example, the language prefix in the url does not always work the way you expect. For example, let’s say you have a site with two languages, Dutch and English (default Dutch), and would like a structure like this:
www.site.com/en/example-node
www.site.com/nl/voorbeeld-node
“example-node” is an English translation of the Dutch node “voorbeeld-node”.
You also want to use the i18n translation block to allow users to switch languages. Now let’s say a visitor is on /en/example-node and uses the translation link provided by this block to view the Dutch version. In my case, with the setting ‘path prefix only’ this resulted in a link to www.site.com/voorbeeld-node. Without the /nl prefix.

This is obviously an undesired situation which could result in loads of duplicate content (bad for SEO). I believe this issue is also addressed here, so hopefully it will be fixed in Drupal 7. Until then, you should use the option ‘path prefix with language fallback’.
Translatibility of Multilingual Views
Another problem is when you start using Views. Nodes are perfectly translatable (like in above example), but look at this very common example with 2 views:
www.site.com/en/news
www.site.com/nl/nieuws
Both are page views which would show a teaser list of news nodes in their own language. This is easily done in Views 2, but you will need a separate view for each language.
The problem is these 2 views don’t know about each other. /news does not know it’s an English version of /nieuws. If you switch from English to Dutch at /en/news, the link leads to /nl/news and you would still be at the English version.
As far as I know, there is no way to tell Drupal about this translation, and the only way would be to insert views into nodes, as described here. You could use the insert_view module or the CCK field viewfield to insert Views into nodes.
These workarounds/solutions get the job done, but I don’t think they are very elegant solutions. It would be much cleaner if you could provide a translation for each view. Also, this is only an issue if you use a language switcher on each page. It get’s much simpler if you redirect the user to the frontpage if they switch languages.
Translatable menu items
Another pitfall is this: i18n enables you to create language-dependable menu items. So you can have a menu-item for a view which only shows up in a certain language. However the menu will only be rendered the way you expect when you display it through a block. (See also this issue)
If you embed the menu directly in page.tpl.php using $primary_links, these items will show up in all languages…
Overriding the language switcher block
By the way, if you are looking for a custom language switcher, look for the code in the core locale.module and write your own hook_block. This is useful if you want to filter out the current language for example.

Hi Albert,
You’ve raised good points about Drupal localization. We’re taking a very active interest in this subject (with commercial interest) and are trying to help iron out things that are keeping people from building multilingual sites with Drupal.
This includes debugging and patching related modules.
We’ve been through some weird menu related bugs and are now going through the views localization. It’s a lot of fun getting into the inner working of this!
Hello Albert,
This is so frustrating, for years I hear about Drupal being capable of handling multilingual websites. Every now and then I give it another try, yet it still fails at these seemingly very basic points you mention here. It’s a real pain, for it’s otherwise such a nice CMS.
Cheers, Roel
We banged our heads on this issues too.
We have developed a huge real-estate listings website with 6 languages custom switcher.
The only way to handle things properly was to write lots of custom code that we decided to include directly on page.tpl.php.
Basically, in order to allow a complete translation of the menu items, we test the language being displayed on-the-fly with a basic
global $language;$get_lang = $language->language ;
Then we’ll assign different values to different variables, populating the links:
case 'fr':$curr_lang="FRANÇAIS";
$about = 'Qui sommes-nous';
$services = 'services';
$contact = 'contacts'; ....
setcookie ("preferred_language", "fr", time()+2592000, "/");
//cookie set to "memorize" the language being preferred
break;
The menu is then populated:
<a href="/about-us" title="">.....
Now the difficult part… how to switch from one language to another referencing the corresponding but different node? (eg: english is saved to /node/1, the french translation is saved to db as /node/2. Url Aliasing will later transform these into /about-us, and fr/qui-sommes-nous):
if ($get_lang!='fr') {
if (is_numeric($curr_nid)) {
$sql_tnid = "SELECT N.tnid
FROM {node} N
WHERE N.nid = $curr_nid
";
$result_tnid = db_query($sql_tnid);
$record_tnid = db_fetch_array($result_tnid);
$tnid = $record_tnid['tnid'];
if ($tnid!=0)
$node = $tnid;
else
$node = $curr_nid;
$SQL = "SELECT N.nid
FROM {node} N
WHERE N.tnid = $node
AND
N.language='fr'
";
$result = db_query($SQL);
$record = db_fetch_array($result);
if ($record['nid']!=null)
$path = '/node/'.$record['nid'];
else // if a translation doesn't exist
$path = 'node/'.$node ;
}
else
$path=$_GET['q'];
echo ' FRANÇAIS';
} //end fr
Hey Albert,
Ik zit met hetzelfde probleem, alleen heet het bij mij:
‘en/streets’ en ‘/streets’ en niet zoals het zou moeten ‘/strasse’
(‘k woon in berlijn, waar ik op dit moment weer eens mijn kop tegen de muur ram.)
heb je hiervoor de afgelopen maanden iets gevonden?
It looks like this problem is being addressed in Views 3.
http://drupal.org/node/357529
Cheers All!
Could you please point me to one or two–preferably successful–multilingual web-sites built with Drupal? Also, would anybody know how Drupal handles RTL languages (Hebrew, Arabic)?
Thanks
There are lots, from our work for example: http://www.urban.nl
Drupal has RTL support and Amnesty International is a nice example:
http://amnesty.org/ar
Is there any way to Drupal remember chosen language for anonymous users? I mean, user picks language and next time he get redirected to previously chosen language homepage?
Edoardo has pointed me with his post to where I should look for solution. I guess that it should be like this: user choose languege and set cookie, on next visit check for cookie and if it’s set redirect to homepage in selected language.
How to do that in Drupal? I have found some php code about cookie redirection but it’s not Drupal specific.
Does anybody have solution for this?
There is a new module available which helps with language content negotiation. Read the whole story here.
Nice post..but i have one query regarding site name.My site is in two language.When i switch language the site name appears in one language only.Can u told me the setting so i can see site name in two languages