8

我試圖用strftime生成一個本地化日期字符串,我使用的佔位符是%x。語言/語言環境是setlocale(LC_ALL, array('jp','japanese')),但是沒有語言環境可用,因此它會生成一個字符串不正確的字符串。然後,我安裝了ja_JP.utf8區域設置,並指定作爲陣列中的第一個元素以及我已解決的日期格式問題。依靠setlocale並依靠安裝的語言環境是否可行?

我的問題是,我應該總是依賴於正在安裝的語言環境?我知道如何將它們安裝在我有root權限的盒子上,但如果我無法訪問,該怎麼辦?

我認爲Zend_LocaleZend_Translate完全不依賴於setlocale,只是以某種方式在內部完成它,這給我的印象是企業級應用程序實際上不可行。

我知道我可以在我的應用程序中使用Zend_LocaleZend_Translate,但它也需要支持PHP4,至少在另外一年,這就是爲什麼我不能完全依賴這些。

回答

6

如果我對setlocale()的檢查是正確的,答案是:否和否。安裝區域的範圍會有變化,正如它們的名稱一樣,某個區域的可用性最終無法完全確定。

0

可行的,是的。明智,完全沒有!

+1

您使用什麼方法進行本地化日期? – 2009-12-21 19:27:36

+2

intl(http://www.php.net/manual/en/book.intl.php)是ICU的接口,所以我相信它。儘管如此,正如羅尼曾經說過的那樣,信任但是要確認。 – 2009-12-22 20:03:15

4

您可以檢查setlocale的返回值,並至少檢查它是否已安裝。否則,您將無聲失敗:

setlocale(LC_ALL, 'en_US') or die('Locale not installed');