(THIS IS A DRAFT)
This article focuses on using the Polylang plugin to translate content. For details on how to translate copy in your theme, take a look at Developing WordPress Themes - Internationalization.
Single- vs Multi-site
There are many ways to go about content translation - you can have a separate site for each language, or have one site and create one page/post for each langauge.
I find maintaining a separate site for each language can quickly become unmanageable, since you'd have to repeat updates for each site; so something as simple as updating the theme might be error-prone and certainly time-consuming. So we will not consider multi-site websites here.
If you want to go down the Multisite route, take a look at the Multisite Language Switcher
Machine- vs Human-Translation
You can pick from machine-translation or human-translation. For a full overview of the options as well as their pro's and con's, refer to the Codex on Multilingual WordPress.
For the best user experience, human translation, of course, trumps machine-translation, and so we will not consider machine-translation plugins in this article.
If you want to try out machine translation (because it's quick) you can try Transposh WordPress Translation, which does automatic translation, but also allow your users to help you fix badly-translated content.
By far the most popular translation plugin that uses human-translation is Polylang, and it's the one we'll be using.
qTranslate X, a descendent of the abandoned qTranslate, allows you to store all the translation in the same post, using in-line syntax like
[:en]English Text[:de]Deutsch[:]to separate the translations. This avoids creating new tables to store the translation.
This is a good alternative to Polylang should you wish to play around with it!
If you want to explore even further, wplang provides an excellent article with a very comphrensive review of different plugins available for each type of translation (single- vs multi-site, machine- vs human-translation). Do check that out!
Install the Polylang plugin and activate it on Plugins > Installed Plugins. Next, click on 'Settings' from the plugin listing.
Add all the languages that your site will have. The 'Full Name' field is how it will be displayed in the language switcher, and the 'Locale' field must match the filename of the
.mo file (discussed later), and 'Language code' is the language code built into the URL.
Add the 'language switcher' widget to let your visitors switch the language.