Edit report at http://bugs.php.net/bug.php?id=53251&edit=1
ID: 53251
Comment by: greno at verizon dot net
Reported by: jeanseb at au-fil-du dot net
Summary: bindtextdomain with null directory doesn't return
the previously set
Status: Open
Type: Bug
Package: Gettext related
Operating System: Debian 5.0.6
PHP Version: 5.3.3
Block user comment: N
Private report: N
New Comment:
It's not whether there is a use case or not, that's how bindtextdomain
is defined to work.
The PHP implementation needs to work exactly like the GNU implementation
and other implementations in other languages such as python for example,
and right now it doesn't.
That's why I pointed out the fact that relative directories are valid
and in the case where a call is made with a NULL directory argument but
no previous setting was made, that the correct behavior is to return the
default locale directory for the system.
Previous Comments:
------------------------------------------------------------------------
[2010-11-18 22:31:20] jeanseb at au-fil-du dot net
I haven't svn access yet and I prefer that someone with more background
review this patch because it introduce an bc break.
For the relative path, I don't see any benefits to change this
behaviour. Can you produce a real use case. Thank's
------------------------------------------------------------------------
[2010-11-18 21:59:36] greno at verizon dot net
Please fix this bug for 5.2.15 as well as 5.3.3.
This flaw prevents being able to query the existing directory setting
for the domain and in turn this destroys any ability to nest usage of
different translation stores.
.
------------------------------------------------------------------------
[2010-11-07 15:52:33] greno at verizon dot net
And to clarify regarding the case where no previous bindtextdomain call
was made prior to the bindtextdomain call with a NULL directory
argument.
In this case bindtextdomain should return the default locale directory
for the system. In the case of Linux this is '/usr/share/locale'.
I tested this again using python and it produces the correct result:
# cat test2.py
#!/usr/bin/env python
from gettext import *
### no previous bindtextdomain call in effect
print bindtextdomain("messages",None);
# python test2.py
/usr/share/locale
------------------------------------------------------------------------
[2010-11-07 15:12:00] greno at verizon dot net
The previous expected PHP results shown are not correct for
'bindtextdomain'.
The expected results should be:
getcwd() : /home/jeanseb
bindtextdomain("messages", "./locale") : ./locale
bindtextdomain("messages",NULL) : ./locale
When I test using python 'bindtextdomain' I get the correct result:
# cat test.py
#!/usr/bin/env python
from gettext import *
print bindtextdomain("messages", "./locale");
print bindtextdomain("messages",None);
# python test.py
./locale
./locale
Relative base directories are allowed.
------------------------------------------------------------------------
[2010-11-07 12:09:59] jeanseb at au-fil-du dot net
Description:
------------
man bindtextdomain :
If dirname is NULL, the function returns the previously set base
directory for domain domainname.
In PHP we are returning the CWD.
I have attached a patch with 2 tests.
ext/gettext/tests/gettext_bindtextdomain-nulldir-alreadyset.phpt
=> PASS with my patch
ext/gettext/tests/gettext_bindtextdomain-nulldir.phpt
=> Fail, my patch introduce a BC. I'm not sure we want this but I don't
see any workarround.
Test script:
---------------
<?php
echo 'getcwd() : ' . getcwd() . PHP_EOL;
echo 'bindtextdomain("messages", "./locale") : ' .
bindtextdomain("messages", "./locale") . PHP_EOL;
echo 'bindtextdomain("messages",NULL) : ' .
bindtextdomain("messages",NULL) . PHP_EOL;
Expected result:
----------------
getcwd() : /home/jeanseb
bindtextdomain("messages", "./locale") : /home/jeanseb/locale
bindtextdomain("messages",NULL) : /home/jeanseb/locale
Actual result:
--------------
getcwd() : /home/jeanseb
bindtextdomain("messages", "./locale") : /home/jeanseb/locale
bindtextdomain("messages",NULL) : /home/jeanseb
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53251&edit=1