It’s easy with MSM. Without MSM you can still store your content as one entry per language and pull out all content for the current site’s language by specifying a language category in your exp tags. Here are some ideas…
Basically, assign each entry a language category. Then…
Language specific domains/subdomains:
If you plan to use language-specific domains, set each domain’s language category id in path.php which your .htaccess rules will call, for example:
/de/path.php:
$global_vars = array(‘lang’ => ‘de’, ‘lang_cat’ => ‘10’)
Now you have the globals {lang} and {lang_cat} available to use in your templates and most tags, which makes it easy to pull out all entries for the current domain’s language, and reference lang specific template elements, assets, etc.
Single domain:
If you’re using one domain with a language segment in the URL, the first segment references a template group which then sets an appropriate language category in that group’s templates (or calls a particular channel/weblog if you need admin separation) to pull in the content. There might be some duplication of root templates here, but it can actually be quite useful for making your templates more language aware if needed.
Admin separation:
If you want to separate access so admins can only see their own language content, MSM is the most convenient. Without MSM, you will probably need to use one language per channel/weblog.
In all cases, you can still use common headers, embeds, etc. and by using the {lang} variable you can call language specific embeds or CSS, useful if there are some UI differences, such as language specific graphic elements.
There are a couple of solutions described in the Wiki and two threads here and here might also help with this.
There’s a great deal of flexibility in the options at your disposal and it’s easier than is sounds…