2 - Additional modules
Localization Update (strongly recommended)
To help keep your interface up to date with the languages provided by localize.drupal.org install the module Localization update. Once enabled you will see in /admin/config/regional/translate/update that a new tab “Update” is available. It allows you to update all your languages for all your modules with just one click. It will save you a lot of time. To check interface translations automatically go to /admin/config/regional/language/update and chose to check for updates daily or weekly.
i18n (strongly recommended)
The next module to install is i18n. It stands for “internationalization” (first letter “i” + 18 letters + last letter “n”). It will give a huge boost in your multilingual capabilities. You will have to install and enable the Variable module as well. Then enable Internationalization, and the other options you might want. This module allow you to translate your site name, site mission, forums, taxonomy, maintenance message, registration message and many many other things you probably will want translated.
-To configure what variables should be translated go to /admin/config/regional/i18n/variable and check everything you want to translate (“Variable translation” module must be enabled). The translation options will be available on the usual place for each variable. For example, if you select to translate the site name and slogan, you will have to go to /admin/config/system/site-information to translate the name and slogan.
-Be careful with the option synchronize translations. If setup incorrectly it can have catastrophic consequences. The idea here is to synchronize variables across languages. If you have a node that contains a picture it might be a good idea to synchronize the picture with all translated nodes. If you configure it to synchronize content (taxonomy, body, title...) you might end up overriding the original content with it's translation and end up loosing it.
This module is a handy way to make “live” translations of your site interface. It allows you to translate text on the fly while you are browsing your site. Translations made with this module can also be uploaded to localize.drupal.org so you will be contributing to the translation of Drupal and helping the international community. The module displays a translation bar at the bottom of every page (except on the default language of course). If you don't have this module you can go to admin/config/regional/translate/translate to translate strings of your site interface.
I have mentioned already Global Redirect when talking about detection and selection. This module is important to enforce language consistency throughout your site and to help determine the correct URL for SEO purposes. Apart from selecting the best URL for each content (and avoid mixing up languages) it will add HTTP status codes to inform search engines that a 301 redirection is being performed and thus optimizing how your site is indexed. 'Global Redirect' is being merged with the excellent module 'Redirect' but features have not been fully ported yet.
Translation Management Tool
This module replaces the two modules that I used to recommend in the past. I left both at the bottom as a reference because they are still good and functional. This module (tmgmt) allows you to send translations to human or machine translators while it gives you a nice overview of your progress. It's a great tool for translation collaboration and enhance productivity. It also automates the translation of menus, creating multilingual menus when nodes are translated.
This is a neat module to have an overview of your content and your translations. It shows a white or a black square for translated or untranslated nodes respectively. It's a great way to know at what point you are with your translations and what are the priorities.
Translation management (Not maintained)
This module is perfect if you have several translators. It will ease the task of the administrator to assign translations to each translator and follow how the work is evolving. It is also nice for the translators because they will have a simple interface and won't need to learn how to administer Drupal.
There are many other modules to choose from and you don't need all of them. I would strongly recommend though to have at least Localization Update, i18n (and Global Redirect for consistency).
3 - Fine tuning
Once your site is multilingual there are some small adjustments that are important to make.
The first one is to add the Language switcher block to your site so that users can change the language. Go to /admin/structure/block and add the block Language switcher to the region you want. There is a nice module to display the language switcher as a drop down list called Language switcher dropdown. You might also want to display a flag, together or instead, of the language name. The module Language icons helps you do that easily. At this point you might want to disable the links to other languages that appear at the bottom of every node. Make sure that the module “Multilingual content” (i18n) is enabled then go to /admin/config/regional/i18n/node and select “Hide content translation links”.
Menus can be tricky to translate because there are many different ways to do it. Keep in mind that menus have a name (like 'main menu') and items (the links in it, like 'Home'). When you go to the menu configuration and chose to make it translatable, you are basically translating the menu name. Then you need to go into every link in that menu and translate them too (or you could add nodes to a menu when editing a node). Items in a menu can also be 'Language neutral' and appear in all languages (double check this if several languages appear in your menu). Once you do the translations you will notice in your administration area that your menu contains the links for all languages. This can be confusing and hard to manage. For this reason some webmasters prefer to have untranslated menus and create a new menu for each language just to keep things separate. Before translating your menu, make sure you understand how this works and chose the right approach for your project. Taking the time to study can actually save you a lot of time.
i18n menu translation documentation
Translating menus manually (without the translation management module)
Machine translations on the fly
There is another module that proposes machine translations of your live site on the fly. It is not as good as a human translation but it might allow some users to access your content in other languages than the ones you offer. It is called TranslateThis button.