This is an old revision of the document!
Multilingualism
With version 2.2 Admidio supports multiple languages. For this purpose, all the texts were stored in an XML file in adm_program/languages with the respective language abbreviations as the filename. The language can be selected in the Organization Settings.
Using in source code
In the common.php a global object gL10n of the Class Language is applied, which is derived of the PHP class SimpleXMLElement. This object reads the XML file. About the method get ($ text_id, $ var1 = “”, $ var2 = “”) the search text can be handed over with the ID. It returns then the text in the set language respectively. Does the text have placeholders (% VAR1%, % VAR2% …), so this can be passed as additional parameters.
Example:
// the following call returns in German "Anlegen" and in English "Create" back $gL10n->get('SYS_CREATE');
Does a text not exist in a language , the corresponding text of the reference language is taken (at the moment German) automatically.
XML language file
The XML file is structured as follows:
<?xml version="1.0" encoding="UTF-8"?> <language id="en"> <version id="2.2.1"> <text id="SYS_HOUSE" development="edit" translation="todo">house</text> </version> <version id="2.2.0"> <!-- Phrases only in Announcementmodule --> <text id="ANN_ANNOUNCEMENT" development="new" translation="todo">announcement</text> <!-- System-Phrases for use in every module --> <text id="SYS_CREATE" development="new" translation="todo">Create</text> <text id="SYS_MAX" development="new" translation="todo" description="maximum">max.</text> </version> </language>
There is a language-node which outputs the informative language of the file. Below you find the version node, which contains the new and changed text of the relevant version. Below follows the text node that has an attribute id. This attribute must be unique and identifies the respective text. The id is fully capitalized and separated with an underline to each word. The attribute development describes whether the text has been created or changed in the version. This is intended for future translators to help. Another attribute of the translator is translation. This attribute marks the status of the translation of the text. Possible values are todo, edited and finalized. Optional there is an attribute description, which is to serve a help for the translator especially when abbreviations or ambiguities.
The texts are to be sorted in the XML file alphabetically per module area according to the id.
Module-specific texts and words are to be assigned to the module fields. In the long term, it is planned to load the module-specific texts only when the corresponding module is called.
Rules for ID
The ID should always be written capitalized and isolated with underscore to each word. It starts with a 3-digit abbreviation of range/module. This should be modeled on the symbol of the database tables. Then the English word should be namend. English, therefore, that it is easier for translators who are not proficient in German, to identify the right texts. After the symbol then the content of the text should be summarized as short as possible, so that you know about what it is, when you see only the ID. It makes sense ta add also verbs to the end to group texts by sections, e.g. PRO_PHR_PHOTO_SAVED PRO_PHR_PHOTO_DELETED. Help for correct translation of the German word into English ID can be found at Google Translator or Leo.
Examples:
ANN_ANNOUNCEMENT
represents Announcement
SYS_NO_ENTRY
represents The requested item does not exist in the database.
PRO_PHOTO_DELETED
represents The profile photo has been deleted.
Design options in the text
In translatable text placeholders can be defined that can be filled in later recall of the text with variable content. Placeholders are defined as %VAR1%, %VAR2%, etc. Currently 4 placeholder per text can be specified, which can be expanded as needed. Calling the get - method they are passed successively. If not all or none are required, then the getter becomes simply passed fewer arguments.
$gL10n->get('SYS_BEISPIEL', 'Text for VAR1', $content_var2, 'VAR3'. $content);
If the contents of a placeholder are issued bold, this is possible in the text with the addition _ BOLD to the variable name %VAR1_BOLD%.
Fixed line breaks within the text can be specified via \n. These will be replaced later for displaying on the homepage by <br />.
Multilingualism in Plugins
Also in Plugins own language files can be integrated and accessed to existing Admidio language files. Access to the Admidio language files is done relatively easily over the already used syntax in Admidio itself.
$gL10n-> get ('SYS_ALL')
If someone wants to use new unused texts in the plugin, so it must be created an own language file for the plugin. For this, a folder is created in the plugin folder languages, where then a newly language file is to be created ,example de.xml. The structure of this language file must match from the section XML language file. This new folder will be made known via the following call at the beginning of the plugin:
$gL10n-> addLanguagePath (PLUGIN_PATH '/'.$ plugin_folder.'/Languages'.);
Now, using the familiar syntax texts from these language files of plugins are accessible. There is no special adaptation necessary.
$ gL10n-> get('PLG_LOGIN_ACTIVE_SINCE')