developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #713: #713-trunk-badparsing-jlocale.patch

File #713-trunk-badparsing-jlocale.patch, 5.5 KB (added by bibo, 13 years ago)

patch with added unit tests

  • lib/jelix/core/jBundle.class.php

     
    44* @subpackage core
    55* @author     Laurent Jouanneau
    66* @author     Gerald Croes
    7 * @contributor Julien Issler, Yannick Le Guédart
     7* @contributor Julien Issler, Yannick Le Guédart, Dominique Papin
    88* @copyright  2001-2005 CopixTeam, 2005-2008 Laurent Jouanneau
    99* Some parts of this file are took from Copix Framework v2.3dev20050901, CopixI18N.class.php, http://www.copix.org.
    1010* copyrighted by CopixTeam and released under GNU Lesser General Public Licence.
    1111* initial authors : Gerald Croes, Laurent Jouanneau.
    1212* enhancement by Laurent Jouanneau for Jelix.
    13 * @copyright 2008 Julien Issler, 2008 Yannick Le Guédart
     13* @copyright 2008 Julien Issler, 2008 Yannick Le Guédart, 2008 Dominique Papin
    1414* @link        http://www.jelix.org
    1515* @licence    GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
    1616*/
     
    109109    protected function _loadResources ($fichier, $charset){
    110110
    111111        if (($f = @fopen ($fichier, 'r')) !== false) {
     112            $utf8Mod = ($charset=='UTF-8')?'u':'';
    112113            $multiline=false;
    113114            $linenumber=0;
    114115            $key='';
     
    117118                    $linenumber++;
    118119                    $line=rtrim($line);
    119120                    if($multiline){
    120                         if(preg_match("/^\s*(.*)\s*(\\\\?)$/U", $line, $match)){
     121                        if(preg_match("/^\s*(.*)\s*(\\\\?)$/U".$utf8Mod, $line, $match)){
    121122                            $multiline= ($match[2] =="\\");
    122123                            if (strlen ($match[1])) {
    123124                                $sp = preg_split('/(?<!\\\\)\#/', $match[1], -1 ,PREG_SPLIT_NO_EMPTY);
     
    128129                        }else{
    129130                            throw new Exception('Syntaxe error in file properties '.$fichier.' line '.$linenumber,210);
    130131                        }
    131                     }elseif(preg_match("/^\s*(.+)\s*=\s*(.*)\s*(\\\\?)$/U",$line, $match)){
     132                    }elseif(preg_match("/^\s*(.+)\s*=\s*(.*)\s*(\\\\?)$/U".$utf8Mod,$line, $match)){
    132133                        // on a bien un cle=valeur
    133134                        $key=$match[1];
    134135                        $multiline= ($match[3] =="\\");
  • testapp/modules/jelix_tests/locales/fr_FR/tests1.UTF-8.properties

     
    11first.locale           = ceci est une phrase fr_FR
    22second.locale          = ceci est une phrase 2 fr_FR
    33multiline.locale.with.accent = Chaîne à\
    4 tester
    5  No newline at end of file
     4                                tester
     5multiline.locale.with.accent2 = Chaîne à\
     6                                tester à \
     7                                foison
     8 No newline at end of file
  • testapp/modules/jelix_tests/locales/fr_FR/testunit.ISO-8859-1.properties

     
    11moduleDescription           = Tests unitaires jelix
    22multiline.locale.with.accent = Chaîne à\
    3 tester
    4  No newline at end of file
     3tester
     4multiline.locale.with.accent2 = Chaîne à\
     5                                tester à \
     6                                foison
     7 No newline at end of file
  • testapp/modules/jelix_tests/tests/core.jlocale.html_cli.php

     
    33* @package     testapp
    44* @subpackage  jelix_tests module
    55* @author      Jouanneau Laurent
    6 * @contributor Julien Issler
     6* @contributor Julien Issler, Dominique Papin
    77* @copyright   2006-2007 Jouanneau laurent
    8 * @copyright   2008 Julien Issler
     8* @copyright   2008 Julien Issler, 2008 Dominique Papin
    99* @link        http://www.jelix.org
    1010* @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
    1111*/
     
    7979        $this->assertEqual('ceci est une phrase fr_FR',jLocale::get('tests1.first.locale'));
    8080        $this->assertEqual('ceci est une phrase fr_FR',jLocale::get('tests1.first.locale', null, 'fr_FR'));
    8181        $this->assertEqualOrDiff('Chaîne à tester',jLocale::get('tests1.multiline.locale.with.accent'));
     82        $this->assertEqualOrDiff('Chaîne à tester à foison',jLocale::get('tests1.multiline.locale.with.accent2'));
    8283        $this->assertEqualOrDiff(utf8_decode('Chaîne à tester'),jLocale::get('testunit.multiline.locale.with.accent',null,null,'ISO-8859-1'));
     84        $this->assertEqualOrDiff(utf8_decode('Chaîne à tester à foison'),jLocale::get('testunit.multiline.locale.with.accent2',null,null,'ISO-8859-1'));
    8385        $this->assertEqual('ceci est une phrase fr_CA',jLocale::get('tests1.first.locale', null, 'fr_CA'));
    8486        $this->assertEqual('this is an en_US sentence',jLocale::get('tests1.first.locale', null, 'en_US'));
    8587        $this->assertEqual('this is an en_EN sentence',jLocale::get('tests1.first.locale', null, 'en_EN'));