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: 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. . Previous Comments: ------------------------------------------------------------------------ [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