Internationalization notes -------------------------- - apps: - use setlocale to parse locale env vars and set to language code - use textdomain to set the text domain of their app - use bindtextdomain to tie the domain to a locale dir - use gettext (possibly disguised as _) to translate in the current domain - libraries: - should only use bindtextdomain to tie a domain to a locale dir - use dgettext (possibly disguised as _) to translate from a set domain - How to make your plug-in code translateable: - include in all files that mark strings for translation, or do the bindtextdomain call - in plugin_init, add a block like this: #ifdef ENABLE_NLS GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE, LOCALEDIR); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); #endif /* ENABLE_NLS */ - mark all strings you want translated for translation by wrapping them in _() - typically, these are all strings that serve as the message string for a GST_ELEMENT_ERROR or _WARNING - but it could also consist of any strings that may end up being presented to the user (for example mixer track) Things to watch out for ----------------------- - forgetting to bindtextdomain is an error that is not always noticeable, because: - any plugin from the same module being init'd binds the text domain, so you may forget it in B, and still have it work because A bound the domain - without a bindtextdomain call, any domain is bound to the system locale dir - so you could still have translations if it happens to be where the translations are