问题
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.
回答1:
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.
回答2:
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');
回答3:
Feasible, yes. Wise, not at all!
来源:https://stackoverflow.com/questions/1941956/is-it-feasible-to-rely-on-setlocale-and-rely-on-locales-being-installed