[dev] setlocale() usage in Horde_Registry

Michael M Slusarz slusarz at horde.org
Tue Jan 28 00:39:05 UTC 2014


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]



More information about the dev mailing list