I was trying to generate a localized date string with strftime
, the placeholder I use is %x
. The language/locale is setlocale(LC_ALL, array('jp','japanese'))
, however neither locale was available so it generated a string with improper characters. I then installed the ja_JP.utf8
locale and specified that as the first element in the array and the date formatting issue I had was resolved.
My question is, should I always rely on locales being installed? I'm aware of how to install them on boxes I have root access to, but what if I don't have access?
I believe Zend_Locale
and Zend_Translate
do not rely on setlocale
at all but somehow do it internally, which gives me the impression that it isn't practically feasible for enterprise level applications.
I know I could probably use Zend_Locale
and Zend_Translate
in my application but it also needs to support PHP4, at least for another year which is why I can't solely rely upon those.
If my examination of setlocale() is correct, the answer is: No and no. The range of installed locales varies, as does their name, and the availability of a certain locale ultimately cannot be predicted with total certainty.
You can check the return value of setlocale and at least check that it was installed. Otherwise you will have silent failures:
setlocale(LC_ALL, 'en_US') or die('Locale not installed');
Feasible, yes. Wise, not at all!
来源:https://stackoverflow.com/questions/1941956/is-it-feasible-to-rely-on-setlocale-and-rely-on-locales-being-installed