Handling multilingual strings in templates
If you are running a site with more than one language, all content inside the articles can be translated by the editors. However, there are always strings in the templates which also need to switch according to the language.
This is the most straight forward way of handling this:
{{ if $gimme->language->english_name == "English" }}Search{{ /if }} {{ if $gimme->language->english_name == "Spanish" }}Bsqueda{{ /if }} [...]
You can also make the decision based on the language code in the system. This does not make any difference. The following example would work for a bilingual site and checks for Arabic first, else will load the other language:
{{ if $gimme->language->code == 'ar' }} [...] {{ else }} [...] {{ /if }}
This works well if you have few strings in the template. For more complex sites it is easier to manage multilingual strings by assigning them to variables in the header and then use these variables in the body. Here's a simple example:
{{ if $gimme->language->english_name == "English" }} {{ assign var="lang_search" value="Search"}} {{ assign var="lang_cancel" value="Cancel"}} {{ else }} {{ assign var="lang_search" value="Suche"}} {{ assign var="lang_cancel" value="Abbrechen"}} {{ /if }}
Later on, inside the template you can call the values simply like this:
{{ $lang_cancel }} {{ $lang_search }}
Handling multilingual strings in separate language templates
This only gets better: you can also create language files, containing all strings of all templates and call them once in the header of any template. The advantage here is that you mange your strings in one place. For each template you would only include a piece of text like this:
{{ if $gimme->language->english_name == "English" }} {{ include file="_lang/lang_english.tpl" }} {{ else }} {{ include file="_lang/lang_german.tpl" }} {{ /if }}
In this case, all language files are placed inside the folder _lang for easier management. Inside these templates, you collect all strings and assign the variables from the entire publication set. These variables need to be assigned "globally" - the template engine usually only uses variables inside the template where they are assigned, not in other templates called from a parent template.
Let's take a look inside the template lang_english.tpl. To assign variables with a global scope you need to add that scope inside the assign statement. The file will look like this:
{{ assign var="lang_search" value="Search" scope="global" }} {{ assign var="lang_cancel" value="Cancel" scope="global" }}
Now you are set. The advantages of this set up are:
- All multilingual strings live in one file
- Adding a new string is being added in one place and can be used across all templates
- Adding a new language to your publication only requires to translate one file
Sub-template for language selection
One last tweak to make this really easy to handle: place the language decision "if gimme language..." in an extra file which you call from each template. This way, adding a new language only requires to change one file, the language selection template. Otherwise you would have to go into each template where the language files are being called from.





