How to setup a multilingual website with Drupal 7
Setting up a basic Drupal website in English is relatively easy. Setting up a multilingual website isn't as obvious as you would hope it to be. Knowing a thing or two about how and where to find help on drupal.org is a must. See References for more information.
The present article does not address the topic of multilingual menus.
Alright, let's do it.
-
Starting with a fresh Drupal 7 install is the best way to avoid problems. That said, it is possible to transform a unilingual website into a multilingual one. Let's just say that it is beyond the scope of the current article.
-
Activate the Locale and Content translation modules. Both come installed with Drupal 7.
-
Download, install and activate the i18n and Variable modules (and all their submodules). The Variable module is new and required by i18n in D7. It provides a simple interface where you can designate system variables as Multilingual variables. In D6, you have to do it by hand in the settings.php file (See References block). More on the usefulness of the Variable module a little later.
-
Go to the languages interface (
admin/config/regional/language
) and add a new language to the list. In this article, I'll be adding French. -
Now, add a Path prefix language code to each language. You can do this by clicking the language edit link (
admin/config/regional/language/edit/en
). In the current example, I've added "en" for English and "fr" for French. Note the warning: Modifying this value may break existing [node] URLs. I had created a couple of nodes prior to making this change and encountered many nagging problems related to bad links. Deleting and recreating all existing nodes solved all those problems. If you have many existing nodes, export them before deleting them. Then import them back. You can do this more easily with the Node export module (http://drupal.org/project/node_export). Also, make sure the option "Determine the language from the URL (Path prefix or domain)" is enabled atadmin/config/regional/language/configure
. -
Once this is done, go to the Drupal translation page (http://localize.drupal.org/) and download the translation package for the language you just added. In this article, French for Drupal core 7.x. Look for the Download link which appears to the right of Drupal core 7.x. If you hover over this link, you will see that is points to a file named drupal-7.x.fr.po. Download this file to your desktop.
-
Go to
admin/config/regional/translate
and click on the Import tab. Import the translation package you've just downloaded into the desired language (drupal-7.x.fr.po into French for this article). You may need to import other project (module) packages (e.g. Views, Panels, etc.). But you can do that later. -
Go back to the Overview tab. Note the higher percentage for translated strings for the language you added.
-
Next, we will activate the Language switcher block which will allow users to switch between languages. Go to
admin/structure/block
. Look for Language switcher and set the region (sidebar first in the present case). Click the Save blocks button at the bottom of the page. Goto your Home page and check that the block is showing. Clicking the different languages will switch the interface back and forth between them. -
The last step is to enable Multilingual support, with translation for each of the content type that you require. For the Article content type, go to
admin/structure/types/manage/article
and click on the Publishing options tab (the horizontal ones) and activate the Enabled, with translation radio button. Then click the Save content type button. Repeat for all content type that need a language specific translation.
That's it. Your website is multilingual ready. Now every time you create a new node (Article, Page, etc.), you'll have to specify which language it belongs to. Language neutral nodes will be displayed just the same for all languages. That's why this article appears in English as well as in French. Check it out.
- Printer-friendly version
- Log in to post comments
- 3434 reads