Internatializing and localizing TSUGI

This is very much a work in progress and I invite comments from others more skilled in internationalizing PHP.

I looked at the Moodle approach and decided to go with a more basic gettext style of internationalization as I think the tools today are far better than the tools were when Moodle was being developed.

I decided to separate the I18N for the modules from everything else (much like Moodle). I decided to follow some of the patterns from WordPress and add a few of my own _() variants

__("Message", ['textdomain']);
_e("Message", ['textdomain']);
_m("Message");

Like Wordpress _e() echoes the message. My _m() call is shortcut to lookup a message in the 'master' text domain.

The translation files for the 'master' text domain are in the 'locale' folder in the top directory. The translation files for each module are in a folder like 'mod/attend/locale' and the text domain for a module is its folder name within the 'mod' directory.

See the 'mod/attend' folder for the patterns on how to localize a module. Make sure to add all four keyword patterns: _, __, _e and _m

When starting a new translation, since poedit cannot exclude folders and any tool folders like 'mod' or 'samples' need to be handled separately, we must list all of the folders to scan explicitly in the catalog properties. So the settings for the properties for a master translation are:

Source path: ../../..
Paths: lib, admin, common, core and lti

Over time there may be more sub-directories to add to the list. Just make sure not to double scan the 'mod' or 'samples' subdirectories.

Hand Translation

Install the gettext utilities (mac instructions):

brew install gettext

cd tsugi/locale/es/LC_MESSAGES
edit the mo file - add the strings and treanslate
msgfmt master.po --output-file=master.mo

TODO: I still need to do plurals.

Chuck Tue May 12 08:40:19 EDT 2020