2012-03-23 73 views
0

在我们的一个Web应用程序中,用户可以选择首选语言,因此我们需要动态设置每个用户的区域设置。基本上是:区域设置更改每隔一页的页面加载

function i18n_date($format, $date, $locale) { 
    setlocale(LC_TIME, $locale); 
    return strftime($format, $date); 
} 

的问题是,所有其他网页加载时,区域设置更改为默认值,setlocale()strftime()之间。根据the PHP docs这应该从“多线程服务器API如IIS或Apache在Windows”可以预料的,但我们的服务器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" 

那么,为什么会出现这种情况?

回答

2

setlocale()不是持久的,您需要在每次需要时设置它。

+0

看看我的功能'i18n_date'在问题 – Znarkus 2012-03-23 13:02:07

+0

对不起,我误解了你的问题了一下。你刚刚安装了语言环境吗?然后重启Apache将会有所帮助。否则,我会转储setlocale()的输出,因为它返回一个字符串,也许这可以帮助你。 – 2012-03-23 13:03:20

0

如果区域设置不是永久的,那么使用持久化(SESSION响铃任何响铃???)。

当用户选择他的语言环境时,将其保存到$ _SESSION关联数组中。

然后每次加载页面时,首先检查变量是否存在。如果是这样,那么设置其他地方的请求。

if (isset($_SESSION['locale'])){ 
    setlocale($_SESSION['locale']); 
} 
else{ 
    //ask for the locale or whatever you need to do 
} 
+0

谢谢你的回答,但我不认为你明白这个问题。 “*问题是每隔一次页面加载时,语言环境都会更改为默认值,在setlocale()和strftime()之间。*” – Znarkus 2012-03-24 08:06:07