Moodle supports localization out of the box. Your own plugins should provide at least an English language file, for example /mod/yourmod/lang/en/yourmod.php
.
WARNING: After adding or changing language strings, don't forget to:
To output a translation string in an arbitrary language (instead of the current default language), you can use the string_manager class' get_string function. This is not a static function, however, so you need an instance first. Here's a oneliner to call the function properly:
echo get_string_manager()->get_string('invitation', 'yourmod', $data_object, $arbitrary_language_code);
If you don't have any data to replace variables like {$a→firstname}
, simply call the same function with NULL
as the 3rd argument.
The language string in $arbitrary_language_code
should consist of a two character code (e.g. nl
or en
). Moodle uses these codes in mdl_course.lang
and mdl_user.lang
.
echo userdate($currentcourse->startdate, get_string('strftimedate', 'langconfig'));
In addition to selecting a specific language, sometimes you also need to switch to the 'locale' of the user. For instance, you may want to output the date in the proper format, with the correct strings for the names of the months and days of the week.
$old_locale = setlocale(LC_ALL, 0); setlocale(LC_ALL, get_string_manager()->get_string("locale", "langconfig", NULL, $arbitrary_language_code) ); echo userdate($start_date, get_string_manager()->get_string("strftimedaydate", "langconfig", NULL, $arbitrary_language_code)); setlocale(LC_ALL, $old_locale);
This code will switch to the locale of the string retrieved from the moodledata/lang/{$arbitrary_language_code}/langconfig.php
file (for the key locale
). Then, a date is properly formatted and printed. And finally, we switch back to the original locale setting.
Please note that this will only work if your server actually supports the locale you're switching to (but that is a Moodle requirement anyway). To install a new locale under Ubuntu:
sudo locale-gen nl_NL sudo locale-gen nl_NL.UTF-8 sudo update-locale
Moodle uses UTF-8 character encoding. Make sure that your database is configured to use UTF-8 everywhere.
mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql> show variables like '%collat%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.01 sec)
If you're not seeing utf8, edit your /etc/mysql/my.cnf
file.
[client] ## This only works in the [client] section: default-character-set=utf8 [mysqld] character-set-server = utf8
If you've got language files (e.g. mod/rainmaker/lang/fr/rainmaker.php
), make sure they're in UTF-8 character encoding. In vim, use :bomb
and :set fileencoding=utf-8
(and then save the file).