[dev] setlocale() usage in Horde_Registry

Jan Schneider jan at horde.org
Tue Jan 28 09:43:09 UTC 2014


Zitat von Michael M Slusarz <slusarz at horde.org>:

> This is mostly for Jan's input, although anyone else is welcome to chime in.
>
> In Horde_Registry#setLanguage(), there is the following code:
>
>         $lang_charset = $lang . '.UTF-8';
>         if (setlocale(LC_ALL, $lang_charset)) {
>             putenv('LC_ALL=' . $lang_charset);
>             putenv('LANG=' . $lang_charset);
>             putenv('LANGUAGE=' . $lang_charset);
>         } else {
>             $changed = false;
>         }
>
> As an example, have $lang be 'pt_PT'.  When loading gettext strings,  
> the following is seen via strace:
>
> open("mail/locale/pt_PT.UTF-8/LC_MESSAGES/horde.mo", O_RDONLY) = -1  
> ENOENT (No such file or directory)
> open("mail/locale/pt_PT.utf8/LC_MESSAGES/horde.mo", O_RDONLY) = -1  
> ENOENT (No such file or directory)
> open("mail/locale/pt_PT/LC_MESSAGES/horde.mo", O_RDONLY) = -1 ENOENT  
> (No such file or directory)
> open("mail/locale/pt.UTF-8/LC_MESSAGES/horde.mo", O_RDONLY) = -1  
> ENOENT (No such file or directory)
> open("mail/locale/pt.utf8/LC_MESSAGES/horde.mo", O_RDONLY) = -1  
> ENOENT (No such file or directory)
> open("mail/locale/pt/LC_MESSAGES/horde.mo", O_RDONLY) = 12
>
> I'm almost 100% sure that all of our .mo files are utf8, so adding  
> this to the locale string is simply causing spurious attempts to  
> load non-existent files.
>
> If I am reading this right  
> (http://www.gnu.org/software/gettext/manual/gettext.html#The-LANGUAGE-variable), this may be a better  
> choice:
>
> putenv('LANGUAGE=' . $lang);
>
> This would theoretically change the loading to this instead (I don't  
> have the ability to test this at the moment):
>
> open("mail/locale/pt_PT/LC_MESSAGES/horde.mo", O_RDONLY) = -1 ENOENT  
> (No such file or directory)
> open("mail/locale/pt/LC_MESSAGES/horde.mo", O_RDONLY) = 12
>
> ...saving up to 4 file lookups for every application.
>
> Thoughts?
>
> michael
>
> ___________________________________
> Michael Slusarz [slusarz at horde.org]

These locale settings are inherited to external binaries and calls  
too. It may not be necessary for Horde's locales, but it's necessary  
for other system locales. Also, this is the environment setting that's  
most compatible on different platforms.
-- 
Jan Schneider
The Horde Project
http://www.horde.org/
https://www.facebook.com/hordeproject



More information about the dev mailing list