Przeglądaj źródła

[GENERIC] Zend_Translate:

- added reload option to simplify cache handling

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18004 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 lat temu
rodzic
commit
80c385e73f

+ 10 - 0
documentation/manual/en/module_specs/Zend_Translate-Additional.xml

@@ -127,6 +127,16 @@ $translate->addTranslation('/path/to/new.csv', 'fr', $options);
                         <entry><emphasis>false</emphasis></entry>
                     </row>
                     <row>
+                        <entry>reload</entry>
+                        <entry>all</entry>
+                        <entry>
+                            When this option is set to true, then files are reloaded into the cache.
+                            This option can be used to recreate the cache, or to add translations
+                            to already cached data after the cache has already been created.
+                        </entry>
+                        <entry><emphasis>false</emphasis></entry>
+                    </row>
+                    <row>
                         <entry>scan</entry>
                         <entry>all</entry>
                         <entry>

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

@@ -66,9 +66,16 @@ abstract class Zend_Translate_Adapter {
 
     /**
      * Array with all options, each adapter can have own additional options
-     *       'clear'  => clears already loaded data when adding new files
-     *       'scan'   => searches for translation files using the LOCALE constants
-     *       'locale' => the actual set locale to use
+     *   'clear'           => when true, clears already loaded data when adding new files
+     *   'disableNotices'  => when true, omits notices from being displayed
+     *   'ignore'          => a prefix for files and directories which are not being added
+     *   'locale'          => the actual set locale to use
+     *   'log'             => a instance of Zend_Log where logs are written to
+     *   'logMessage'      => message to be logged
+     *   'logUntranslated' => when true, untranslated messages are not logged
+     *   'reload'          => reloads the cache by reading the content again
+     *   'scan'            => searches for translation files using the LOCALE constants
+     *
      * @var array
      */
     protected $_options = array(
@@ -79,6 +86,7 @@ abstract class Zend_Translate_Adapter {
         'log'             => null,
         'logMessage'      => "Untranslated message within '%locale%': %message%",
         'logUntranslated' => false,
+        'reload'          => false,
         'scan'            => null
     );
 
@@ -470,6 +478,10 @@ abstract class Zend_Translate_Adapter {
             }
         }
 
+        if ($options['reload']) {
+            $read = true;
+        }
+
         if ($read) {
             $temp = $this->_loadTranslationData($data, $locale, $options);
         }
@@ -528,10 +540,10 @@ abstract class Zend_Translate_Adapter {
         $plural = null;
         if (is_array($messageId)) {
             if (count($messageId) > 2) {
-                $number    = array_pop($messageId);
+                $number = array_pop($messageId);
                 if (!is_numeric($number)) {
                     $plocale = $number;
-                    $number       = array_pop($messageId);
+                    $number  = array_pop($messageId);
                 } else {
                     $plocale = 'en';
                 }
@@ -667,7 +679,7 @@ abstract class Zend_Translate_Adapter {
     public function isTranslated($messageId, $original = false, $locale = null)
     {
         if (($original !== false) and ($original !== true)) {
-            $locale = $original;
+            $locale   = $original;
             $original = false;
         }
 

+ 39 - 9
tests/Zend/Translate/Adapter/ArrayTest.php

@@ -62,6 +62,15 @@ class Zend_Translate_Adapter_ArrayTest extends PHPUnit_Framework_TestCase
     public function setUp()
     {
         if (Zend_Translate_Adapter_Array::hasCache()) {
+            Zend_Translate_Adapter_Array::clearCache();
+            Zend_Translate_Adapter_Array::removeCache();
+        }
+    }
+
+    public function tearDown()
+    {
+        if (Zend_Translate_Adapter_Array::hasCache()) {
+            Zend_Translate_Adapter_Array::clearCache();
             Zend_Translate_Adapter_Array::removeCache();
         }
     }
@@ -145,15 +154,16 @@ class Zend_Translate_Adapter_ArrayTest extends PHPUnit_Framework_TestCase
         $adapter->setOptions(array('testoption' => 'testkey'));
         $this->assertEquals(
             array(
-                'testoption' => 'testkey',
-                'clear' => false,
-                'scan' => null,
-                'locale' => 'en',
-                'ignore' => '.',
-                'disableNotices' => false,
+                'testoption'      => 'testkey',
+                'clear'           => false,
+                'scan'            => null,
+                'locale'          => 'en',
+                'ignore'          => '.',
+                'disableNotices'  => false,
                 'log'             => false,
                 'logMessage'      => 'Untranslated message within \'%locale%\': %message%',
-                'logUntranslated' => false),
+                'logUntranslated' => false,
+                'reload'          => false),
             $adapter->getOptions());
         $this->assertEquals('testkey', $adapter->getOptions('testoption'));
         $this->assertTrue(is_null($adapter->getOptions('nooption')));
@@ -206,7 +216,7 @@ class Zend_Translate_Adapter_ArrayTest extends PHPUnit_Framework_TestCase
     {
         require_once 'Zend/Translate.php';
         $adapter = new Zend_Translate_Adapter_Array(dirname(__FILE__) . '/_files/testarray', 'de_AT', array('scan' => Zend_Translate::LOCALE_DIRECTORY));
-        $this->assertEquals(array('de_AT' => 'de_AT', 'en_GB' => 'en_GB'), $adapter->getList());
+        $this->assertEquals(array('de_AT' => 'de_AT', 'en_GB' => 'en_GB', 'ja' => 'ja'), $adapter->getList());
         $this->assertEquals('Nachricht 8', $adapter->translate('Message 8'));
     }
 
@@ -214,7 +224,7 @@ class Zend_Translate_Adapter_ArrayTest extends PHPUnit_Framework_TestCase
     {
         require_once 'Zend/Translate.php';
         $adapter = new Zend_Translate_Adapter_Array(dirname(__FILE__) . '/_files/testarray', 'de_DE', array('scan' => Zend_Translate::LOCALE_FILENAME));
-        $this->assertEquals(array('de_DE' => 'de_DE', 'en_US' => 'en_US'), $adapter->getList());
+        $this->assertEquals(array('de_DE' => 'de_DE', 'en_US' => 'en_US', 'ja' => 'ja'), $adapter->getList());
         $this->assertEquals('Nachricht 8', $adapter->translate('Message 8'));
     }
 
@@ -295,6 +305,26 @@ class Zend_Translate_Adapter_ArrayTest extends PHPUnit_Framework_TestCase
         $this->assertEquals('testdata', $temp);
     }
 
+    public function testLoadingFilesIntoCacheAfterwards()
+    {
+        require_once 'Zend/Cache.php';
+        $cache = Zend_Cache::factory('Core', 'File',
+            array('lifetime' => 120, 'automatic_serialization' => true),
+            array('cache_dir' => dirname(__FILE__) . '/_files/'));
+
+        $this->assertFalse(Zend_Translate_Adapter_Array::hasCache());
+        Zend_Translate_Adapter_Array::setCache($cache);
+        $this->assertTrue(Zend_Translate_Adapter_Array::hasCache());
+
+        $adapter = new Zend_Translate_Adapter_Array(dirname(__FILE__) . '/_files/translation_en.php', 'en');
+        $cache   = Zend_Translate_Adapter_Array::getCache();
+        $this->assertTrue($cache instanceof Zend_Cache_Core);
+
+        $adapter->addTranslation(dirname(__FILE__) . '/_files/translation_en.php', 'ru', array('reload' => true));
+        $test = $adapter->getMessages('all');
+        $this->assertEquals(6, count($test['ru']));
+    }
+
     /**
      * Ignores a raised PHP error when in effect, but throws a flag to indicate an error occurred
      *