2010-09-12 134 views
1

我已經在我的網絡服務器上安裝了荷蘭本地(nl_NL utf8)(當我執行locale -a我看到nl_NL utf8所以這是好事)。setlocale()返回false

但是,我網頁上的日期是英文的(我把setlocale(LC_ALL, 'nl_NL');放在了我的頁面頂部)。我在編譯php之後安裝了一個語言環境包時已經閱讀,我必須重新編譯php。

但是,有沒有其他解決方案,沒有重新編譯php,讓它工作?

謝謝!

+1

在我看來,'setlocale()'是一個*災難*,因爲它沒有一致的區域設置命名方案 - 它們因服務器而異。我全心全意地推薦尋找諸如Zend Framework的[本地化功能](http://framework.zend.com/manual/en/zend.locale.parsing.html)的替代方案。 – 2010-09-12 09:15:37

回答

2

這可以通過設計:setlocale()不會自動改變使用date()strftime()日期輸出的格式的輸出。它所做的是本地化工作日和月份名稱,但沒有別的。

你能舉例說明你如何輸出日期,以及它們如何轉換失敗?

+0

我正在使用Smarty(即:{$ memberdate | date_format:「%A,%d%B%Y」}),但我在另一個web服務器上使用了相同的代碼,沒有任何問題(在編譯php之前已經安裝了語言環境文件)。 – Arjen 2010-09-12 09:19:11

+0

@Arjen啊,我明白了。然後我的回答沒有排序。添加語言環境需要*重新安裝* PHP對我來說聽起來有點奇怪,但是:是官方信息嗎? – 2010-09-12 09:25:54

+0

見http://www.php.net/manual/en/function.setlocale.php#86246 – Arjen 2010-09-12 09:27:22

6

我在這裏總結了我發現面臨類似問題的原因,因爲在這裏顯然沒有建設性的答案(錯誤的答案,的確如此:setlocale()確實會改變strftime()的輸出),並且對其他人可能有用。

PHP manual

返回值

返回當前新的語言環境,或FALSE如果區域功能 是不是你的平臺上實現,指定的語言環境不 存在或類別名稱爲無效。

所以對於diagnosys,首先檢查正確的區域設置安裝(nl_NL,nl_NL.UTF-8等),或者使用一個殼或PHP system('locale -a')。在一些Ubuntu系統上有一個腳本來安裝一個語言環境,例如。 /usr/share/locales/install-language-pack nl_NL,但也可以考慮使用apt-get進行安裝。 (對於異國語言環境,還要檢查是否支持語言環境:在某些系統/usr/share/i18n/SUPPORTED上)。

然後你可以使用var_dump(setlocale('nl_NL'));得到setlocale()的輸出(因爲setlocale()本身不輸出任何東西)。

對於固化可能是再生區域與區域設置根nl_NL,nl_NL

此後,update-locale(和dpkg-reconfigure locales)可以在某些系統是需要的。