Browse Source

consolidate duplicate code from I18n into TranslatorRegistry

Schlaefer 10 years ago
parent
commit
4a65d92fd2
2 changed files with 17 additions and 13 deletions
  1. 2 10
      src/I18n/I18n.php
  2. 15 3
      src/I18n/TranslatorRegistry.php

+ 2 - 10
src/I18n/I18n.php

@@ -118,19 +118,11 @@ class I18n
     public static function translator($name = 'default', $locale = null, callable $loader = null)
     {
         if ($loader !== null) {
-            $packages = static::translators()->getPackages();
             $locale = $locale ?: static::locale();
 
-            if ($name !== 'default') {
-                $loader = function () use ($loader) {
-                    $package = $loader();
-                    if (!$package->getFallback()) {
-                        $package->setFallback('default');
-                    }
-                    return $package;
-                };
-            }
+            $loader = static::translators()->setLoaderFallback($name, $loader);
 
+            $packages = static::translators()->getPackages();
             $packages->set($name, $locale, $loader);
             return;
         }

+ 15 - 3
src/I18n/TranslatorRegistry.php

@@ -212,6 +212,20 @@ class TranslatorRegistry extends TranslatorLocator
             };
         }
 
+        $loader = $this->setLoaderFallback($name, $loader);
+
+        $this->packages->set($name, $locale, $loader);
+        return parent::get($name, $locale);
+    }
+
+    /**
+     * set lookup fallback for loader
+     *
+     * @param string $name The name of the fallback domain
+     * @param callable $loader invokable loader
+     * @return callable loader
+     */
+    public function setLoaderFallback($name, callable $loader) {
         if ($name !== 'default') {
             $loader = function () use ($loader) {
                 $package = $loader();
@@ -221,8 +235,6 @@ class TranslatorRegistry extends TranslatorLocator
                 return $package;
             };
         }
-
-        $this->packages->set($name, $locale, $loader);
-        return parent::get($name, $locale);
+        return $loader;
     }
 }