Sfoglia il codice sorgente

[ZF-9976] Zend_Translate:

- allow double rerouted translation

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22424 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 15 anni fa
parent
commit
bb08487b68
2 ha cambiato i file con 40 aggiunte e 4 eliminazioni
  1. 6 4
      library/Zend/Translate/Adapter.php
  2. 34 0
      tests/Zend/TranslateTest.php

+ 6 - 4
library/Zend/Translate/Adapter.php

@@ -695,10 +695,9 @@ abstract class Zend_Translate_Adapter {
                         $this->_routed[$locale] = true;
                         return $this->translate($messageId, $this->_options['route'][$locale]);
                     }
-
-                    $this->_routed = array();
                 }
 
+                $this->_routed = array();
                 if ($plural === null) {
                     return $messageId;
                 }
@@ -718,11 +717,13 @@ abstract class Zend_Translate_Adapter {
         if ((is_string($messageId) || is_int($messageId)) && isset($this->_translate[$locale][$messageId])) {
             // return original translation
             if ($plural === null) {
+                $this->_routed = array();
                 return $this->_translate[$locale][$messageId];
             }
 
             $rule = Zend_Translate_Plural::getPlural($number, $locale);
             if (isset($this->_translate[$locale][$plural[0]][$rule])) {
+                $this->_routed = array();
                 return $this->_translate[$locale][$plural[0]][$rule];
             }
         } else if (strlen($locale) != 2) {
@@ -732,11 +733,13 @@ abstract class Zend_Translate_Adapter {
             if ((is_string($messageId) || is_int($messageId)) && isset($this->_translate[$locale][$messageId])) {
                 // return regionless translation (en_US -> en)
                 if ($plural === null) {
+                    $this->_routed = array();
                     return $this->_translate[$locale][$messageId];
                 }
 
                 $rule = Zend_Translate_Plural::getPlural($number, $locale);
                 if (isset($this->_translate[$locale][$plural[0]][$rule])) {
+                    $this->_routed = array();
                     return $this->_translate[$locale][$plural[0]][$rule];
                 }
             }
@@ -750,10 +753,9 @@ abstract class Zend_Translate_Adapter {
                 $this->_routed[$locale] = true;
                 return $this->translate($messageId, $this->_options['route'][$locale]);
             }
-
-            $this->_routed = array();
         }
 
+        $this->_routed = array();
         if ($plural === null) {
             return $messageId;
         }

+ 34 - 0
tests/Zend/TranslateTest.php

@@ -810,6 +810,40 @@ class Zend_TranslateTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * @group ZF-2736
+     */
+    public function testDoubleReroutingForTranslations()
+    {
+        $translate = new Zend_Translate(
+            array(
+                'adapter' => Zend_Translate::AN_ARRAY,
+                'content' => dirname(__FILE__) . '/Translate/Adapter/_files/testarray/',
+                'locale'  => 'auto',
+                'scan'    => Zend_Translate::LOCALE_FILENAME,
+                'ignore'  => array('.', 'ignoreme', 'LC_TEST'),
+                'route'   => array('ja' => 'en_US', 'en_US' => 'ja'),
+            )
+        );
+
+        $translate2 = new Zend_Translate(
+            array(
+                'adapter' => Zend_Translate::AN_CSV,
+                'content' => dirname(__FILE__) . '/Translate/Adapter/_files/translation_en.csv',
+                'locale'  => 'en_US',
+            )
+        );
+
+        $translate->addTranslation($translate2);
+
+        $langs = $translate->getList();
+        $this->assertFalse(array_key_exists('de_DE', $langs));
+        $this->assertTrue(array_key_exists('ja', $langs));
+        $this->assertTrue(array_key_exists('en_US', $langs));
+        $this->assertEquals('Message 5 (en)', $translate->translate('Message 5', 'ja'));
+        $this->assertEquals('Message 5 (en)', $translate->translate('Message 5', 'ja'));
+    }
+
+    /**
      * ZF-9877
      */
     public function testSetCacheThroughOptions()