ID:               26052
 Updated by:       [EMAIL PROTECTED]
 Reported By:      nicos at worldakt dot com
-Status:           Open
+Status:           Closed
 Bug Type:         Documentation problem
 Operating System: FreeBSD
 PHP Version:      4.3.3
 New Comment:

This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation
better.

"Different systems have different naming schemes for locales."


Previous Comments:
------------------------------------------------------------------------

[2003-10-31 08:04:48] [EMAIL PROTECTED]

No bug here. different OSes have different naming schemes for locales.
Nothing we can/should do about that.
Reclassified as documentation issue. (there's already note for Windows
about the same thing)



------------------------------------------------------------------------

[2003-10-31 06:16:49] nicos at worldakt dot com

Description:
------------
setlocale() fails under FreeBSD 4.8:

[Fri Oct 31 - 17:56:28 - root /httpd/php-4.3.3]# cat configure.log |
grep locale
checking for locale.h... (cached) yes
checking for setlocale... (cached) yes
checking for localeconv... (cached) yes
[Fri Oct 31 - 17:56:45 - root /httpd/php-4.3.3]# 

In fact, setlocale returns FALSE but no E_WARNING or anything.

After looking in ext/standard/string.c it looks like it can happen when
HAVE_SETLOCALE is not defined...

But HAVE_SETLOCALE is defined.

Another solution is that, setlocale() call fails:

retval = setlocale (cat, loc);

We've got an if (retval) { } but no else... 
According to freebsd's man, setlocale returns NULL on failure. 

I added:
else {
     /* setlocale failed */
     efree(args);
     php_error_docref(NULL TSRMLS_CC, E_WARNING, "setlocale failed!");
     RETURN_FALSE;
}

And I get the E_WARNING, so it means setlocale() call failed, but why ?
the same scripts works fine under linux but not under freebsd4.8. 

After looking in /usr/share/locale, we have:

/usr/share/locale/fr_FR.ISO8859-1:
LC_COLLATE      LC_CTYPE        LC_MESSAGES     LC_MONETARY    
LC_NUMERIC      LC_TIME

/usr/share/locale/fr_FR.ISO8859-15:
LC_COLLATE      LC_CTYPE        LC_MESSAGES     LC_MONETARY    
LC_NUMERIC      LC_TIME

/usr/share/locale/fr_FR.ISO_8859-1:
LC_COLLATE      LC_CTYPE        LC_MESSAGES     LC_MONETARY    
LC_NUMERIC      LC_TIME

/usr/share/locale/fr_FR.ISO_8859-15:
LC_COLLATE      LC_CTYPE        LC_MESSAGES     LC_MONETARY    
LC_NUMERIC      LC_TIME

so it should work.

If I have change fr_FR to fr_FR.ISO_8859-1 in the setlocale call, the
script works fine, isn't setlocale() supposed to use default charset
which is ISO_8859-1 ? In any case the documentation does not mention
that we have to add the charset under FreeBSD...

Reproduce code:
---------------
setlocale(LC_TIME, "fr_FR");
echo strftime("%B %Y",$timestamp);


Expected result:
----------------
TRUE
Octobre 2003

Actual result:
--------------
FALSE
October 2003


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=26052&edit=1

Reply via email to