[dev] [Patch] Localization problems with strftime

Thierry Thomas thierry@pompo.net
Tue, 6 Aug 2002 02:03:49 +0200


Hello,

On some platforms (e.g. FreeBSD), strftime is not localized if setlocale
is not set. For example IMP, Kronolith, Nag, etc. show un-localized
dates.

The following patches fix this problem for me - and I hope they do not
break anything!

1) For Horde's Summary:

--- lib/base.php.orig	Sat Jul 27 22:07:21 2002
+++ lib/base.php	Tue Aug  6 01:31:59 2002
@@ -41,5 +41,12 @@
 require_once HORDE_BASE . '/lib/Notification.php';
 $notification = &Notification::singleton();
 $notification->attach('status');
+ 
+// Force setlocale
+$charset = NLS::getCharset();
+$pos = strpos($charset, '-');
+if (!($pos === FALSE)) {
+    setlocale(LC_TIME, $language . "." . substr($charset, 0, $pos) . substr($charset, $pos + 1));
+}
 
 ?>


2) For IMP:

--- imp/lib/base.php.orig	Fri Aug  2 22:29:08 2002
+++ imp/lib/base.php	Tue Aug  6 01:44:17 2002
@@ -74,5 +74,12 @@
 if ($authentication !== 'none') {
     IMP::checkAuthentication($authentication);
 }
+ 
+// Force setlocale
+$charset = NLS::getCharset();
+$pos = strpos($charset, '-');
+if (!($pos === FALSE) && isset($language)) {
+    setlocale(LC_TIME, $language . "." . substr($charset, 0, $pos) . substr($charset, $pos + 1));
+}
 
 ?>


3) For Kronolith:


--- kronolith/lib/base.php.orig	Fri Aug  2 22:31:05 2002
+++ kronolith/lib/base.php	Tue Aug  6 01:48:23 2002
@@ -57,6 +57,13 @@
 // Set the timezone variable, if available.
 NLS::setTimeZone();
 
+// Force setlocale
+$charset = NLS::getCharset();
+$pos = strpos($charset, '-');
+if (!($pos === FALSE) && isset($language)) {
+    setlocale(LC_TIME, $language . "." . substr($charset, 0, $pos) . substr($charset, $pos + 1));
+}
+
 // Open the users calendar
 $GLOBALS['calendar'] = &Kronolith_Driver::factory($conf['calendar']['driver'], $conf['calendar']['params']);
 $GLOBALS['calendar']->open(Auth::getAuth());


I am interested by your comments. Of course, if it works for any
platform / language, we could write a global function and call it from
every module.

Best regards,
-- 
Th. Thomas.