Webアプリケーションの1つでは、ユーザーは優先言語を選択できるため、ユーザーごとにロケールを動的に設定する必要があります。基本的には:他のページの読み込みごとにロケールが変更される
function i18n_date($format, $date, $locale) {
setlocale(LC_TIME, $locale);
return strftime($format, $date);
}
問題は、他のすべてのページのロードは、ロケールがsetlocale()
とstrftime()
の間で、デフォルトに変更されていることです。 the PHP docsによれば、これは「Windowsの上のIISやApacheなどのマルチスレッドサーバAPI」から予想されなければならないが、私たちのサーバーApacheのビルドには、非スレッド化されています
Server version: Apache/2.2.17 (Ubuntu)
Server built: Nov 3 2011 02:13:53
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
それでは、なぜこの出来事はありますか?
質問 – Znarkus
で私の関数 'i18n_date'を見てください申し訳ありませんあなたの質問を少し誤解しました。あなたは最近ロケールをインストールしましたか?その後、Apacheを再起動すると役立ちます。それ以外の場合は、文字列を返すときにsetlocale()の出力をダンプします。これはおそらくあなたを助けるかもしれません。 –