Bläddra i källkod

[ZF-8375] Zend_Translate_Adapter_Tmx:

- the lang attribut is now degraded to a locale when it's no locale

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@19259 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 år sedan
förälder
incheckning
660539deed

+ 6 - 1
library/Zend/Translate/Adapter/Tmx.php

@@ -96,7 +96,12 @@ class Zend_Translate_Adapter_Tmx extends Zend_Translate_Adapter {
                     break;
                 case 'tuv':
                     if (isset($attrib['xml:lang']) === true) {
-                        $this->_tuv = $attrib['xml:lang'];
+                        if (Zend_Locale::isLocale($attrib['xml:lang'])) {
+                            $this->_tuv = Zend_Locale::findLocale($attrib['xml:lang']);
+                        } else {
+                            $this->_tuv = $attrib['xml:lang'];
+                        }
+
                         if (isset($this->_data[$this->_tuv]) === false) {
                             $this->_data[$this->_tuv] = array();
                         }

+ 15 - 0
tests/Zend/Translate/Adapter/TmxTest.php

@@ -222,6 +222,21 @@ class Zend_Translate_Adapter_TmxTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * @group ZF-8375
+     */
+    public function testTranslate_ZF8375()
+    {
+        $adapter = new Zend_Translate_Adapter_Tmx(dirname(__FILE__) . '/_files/translation_en_8375.tmx', 'en', array('disableNotices' => true));
+        $this->assertEquals('Message 1 (en)', $adapter->translate('Message 1'));
+        $this->assertEquals('Message 1 (en)', $adapter->_('Message 1'));
+        $this->assertEquals('Message 6', $adapter->translate('Message 6'));
+        $this->assertEquals('Küchen Möbel (en)', $adapter->translate('Cooking furniture'));
+        $this->assertEquals('Cooking furniture (en)', $adapter->translate('Küchen Möbel'));
+        $this->assertEquals('Message 1 (fr)', $adapter->translate('Message 1', 'fr_FR'));
+        $this->assertEquals('Message 1 (fr)', $adapter->_('Message 1', 'fr_FR'));
+    }
+
+    /**
      * Ignores a raised PHP error when in effect, but throws a flag to indicate an error occurred
      *
      * @param  integer $errno

+ 36 - 0
tests/Zend/Translate/Adapter/_files/translation_en_8375.tmx

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE tmx SYSTEM "tmx14.dtd">
+<tmx version="1.4">
+ <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence" adminlang="en-us" srclang="de-at" o-tmf="abc" creationtool="XYZTool" >
+ </header>
+ <body>
+  <tu tuid='Message 1'>
+   <tuv xml:lang="en"><seg>Message 1 (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Message 1 (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Message 2'>
+   <tuv xml:lang="en"><seg>Message 2 (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Message 2 (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Message 3'>
+   <tuv xml:lang="en"><seg>Message 3 (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Message 3 (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Message 4'>
+   <tuv xml:lang="en"><seg>Message 4 (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Message 4 (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Message 5'>
+   <tuv xml:lang="en"><seg>Message 5 (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Message 5 (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Cooking furniture'>
+   <tuv xml:lang="en"><seg>Küchen Möbel (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Küchen Möbel (fr)</seg></tuv>
+  </tu>
+  <tu tuid='Küchen Möbel'>
+   <tuv xml:lang="en"><seg>Cooking furniture (en)</seg></tuv>
+   <tuv xml:lang="fr-FR-Arab"><seg>Cooking furniture (fr)</seg></tuv>
+  </tu>
+ </body>
+</tmx>