Updated package.xml (includes locale files). Made translation optional.
authorGunnar Wrobel <p@rdus.de>
Mon, 18 Oct 2010 12:46:47 +0000 (14:46 +0200)
committerGunnar Wrobel <p@rdus.de>
Mon, 18 Oct 2010 12:49:21 +0000 (14:49 +0200)
For Horde_Cli I think we should indeed allow to avoid using dependency
injection as that might be too much overhead in some cases. So calling
initTranslation() will try to create the translation factory in case
it exists and has not been provided to the init() call.

framework/Cli/lib/Horde/Cli.php
framework/Cli/package.xml

index 74b3dfd..d8f7bb1 100644 (file)
 class Horde_Cli
 {
     /**
+     * The location of the data directory which contains locale information.
+     * This contains @data_dir@ if the package has not been installed via
+     * PEAR.
+     */
+    const LOCALE_DIR = '@data_dir@/locale';
+
+    /**
      * Are we running on a console?
      *
      * @var boolean
@@ -128,20 +135,9 @@ class Horde_Cli
     /**
      * Detect the current environment (web server or console) and sets
      * internal values accordingly.
-     *
-     * The constructor must not be called after init().
-     *
-     * @param Horde_Translation $dict  A translation handler implementing
-     *                                 Horde_Translation.
      */
-    public function __construct($dict = null)
+    public function __construct()
     {
-        if ($dict) {
-            $this->_dict = $dict;
-        } else {
-            $this->_dict = new Horde_Translation_Gettext('Horde_Cli', dirname(__FILE__) . '/../../locale');
-        }
-
         $this->_console = $this->runningFromCLI();
 
         if ($this->_console) {
@@ -335,7 +331,7 @@ class Horde_Cli
         }
         $this->writeln($this->red('===================='));
         $this->writeln();
-        $this->writeln($this->red($this->_dict->t("Fatal Error:")));
+        $this->writeln($this->red($this->_t("Fatal Error:")));
         $this->writeln($this->red($error));
         $this->writeln();
         $this->writeln((string)$backtrace);
@@ -369,7 +365,7 @@ class Horde_Cli
                 foreach ($choices as $key => $choice) {
                     $this->writeln($this->indent('(' . $this->bold($key) . ') ' . $choice));
                 }
-                $this->writeln($this->_dict->t("Type your choice: "), true);
+                $this->writeln($this->_t("Type your choice: "), true);
                 @ob_flush();
 
                 // Get the user choice.
@@ -380,7 +376,7 @@ class Horde_Cli
                 if (isset($choices[$response])) {
                     return $response;
                 } else {
-                    $this->writeln($this->red(sprintf($this->_dict->t("\"%s\" is not a valid choice."), $response)));
+                    $this->writeln($this->red(sprintf($this->_t("\"%s\" is not a valid choice."), $response)));
                 }
             } else {
                 @ob_flush();
@@ -450,20 +446,18 @@ class Horde_Cli
      * none. Also initialize a few variables in $_SERVER that aren't present
      * from the CLI.
      *
-     * You must not call init() statically before calling the constructor.
-     * Either use the singleton() method to retrieve a Horde_Cli object after
-     * calling init(), or don't call init() statically.
-     *
-     * @param Horde_Translation $dict  A translation handler implementing
-     *                                 Horde_Translation.
+     * @param Horde_Translation_Factory $t  A translation factory that
+     *                                      generates a Horde_Translation
+     *                                      instance.
      *
      * @return Horde_Cli  A Horde_Cli instance.
      */
-    static public function init($dict = null)
+    static public function init(Horde_Translation_Factory $t = null)
     {
         /* Run constructor now because it requires $_SERVER['SERVER_NAME'] to
          * be empty if called with a CGI SAPI. */
-        $cli = new self($dict);
+        $cli = new self();
+        $cli->initTranslation($t);
 
         @set_time_limit(0);
         ob_implicit_flush(true);
@@ -488,6 +482,46 @@ class Horde_Cli
     }
 
     /**
+     * Try to initialize the translation system.
+     *
+     * @param Horde_Translation_Factory $t  A translation factory that
+     *                                      generates a Horde_Translation
+     *                                      instance.
+     *
+     * @return Horde_Cli  A Horde_Cli instance.
+     */
+    public function initTranslation(Horde_Translation_Factory $t = null)
+    {
+        if ($t === null && class_exists('Horde_Translation_Factory_Gettext')) {
+            $t = new Horde_Translation_Factory_Gettext();
+        }
+        if ($t !== null) {
+            $this->_dict = $t->createTranslation('Horde_Cli', self::LOCALE_DIR, dirname(__FILE__) . '/../../locale');
+        } else {
+            $this->_dict = false;
+        }
+    }
+
+    /**
+     * Returns the translation of a message.
+     *
+     * @param string $message  The string to translate.
+     *
+     * @return string  The string translation, or the original string if no
+     *                 translation exists.
+     */
+    private function _t($message)
+    {
+        if ($this->_dict === false) {
+            return $message;
+        } else if ($this->_dict === null) {
+            $this->initTranslation();
+            return $this->_t($message);
+        }
+        return $this->_dict->t($message);
+    }
+
+    /**
      * Make sure we're being called from the command line, and not via
      * the web.
      *
index d323cae..28ccb02 100644 (file)
@@ -16,8 +16,8 @@
   <email>jan@horde.org</email>
   <active>yes</active>
  </lead>
- <date>2010-08-15</date>
- <time>15:33:56</time>
+ <date>2010-10-18</date>
+ <time>14:33:41</time>
  <version>
   <release>0.2.0</release>
   <api>0.2.0</api>
    </dir> <!-- /doc -->
    <dir name="lib">
     <dir name="Horde">
-     <file name="Cli.php" role="php" />
+     <file name="Cli.php" role="php">
+      <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
+     </file>
     </dir> <!-- /lib/Horde -->
    </dir> <!-- /lib -->
+   <dir name="locale">
+    <dir name="ar">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ar/LC_MESSAGES -->
+    </dir> <!-- /locale/ar -->
+    <dir name="bg">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/bg/LC_MESSAGES -->
+    </dir> <!-- /locale/bg -->
+    <dir name="bs">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/bs/LC_MESSAGES -->
+    </dir> <!-- /locale/bs -->
+    <dir name="ca">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ca/LC_MESSAGES -->
+    </dir> <!-- /locale/ca -->
+    <dir name="cs">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/cs/LC_MESSAGES -->
+    </dir> <!-- /locale/cs -->
+    <dir name="da">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/da/LC_MESSAGES -->
+    </dir> <!-- /locale/da -->
+    <dir name="de">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/de/LC_MESSAGES -->
+    </dir> <!-- /locale/de -->
+    <dir name="el">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/el/LC_MESSAGES -->
+    </dir> <!-- /locale/el -->
+    <dir name="en">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/en/LC_MESSAGES -->
+    </dir> <!-- /locale/en -->
+    <dir name="es">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/es/LC_MESSAGES -->
+    </dir> <!-- /locale/es -->
+    <dir name="et">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/et/LC_MESSAGES -->
+    </dir> <!-- /locale/et -->
+    <dir name="eu">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/eu/LC_MESSAGES -->
+    </dir> <!-- /locale/eu -->
+    <dir name="fa">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/fa/LC_MESSAGES -->
+    </dir> <!-- /locale/fa -->
+    <dir name="fi">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/fi/LC_MESSAGES -->
+    </dir> <!-- /locale/fi -->
+    <dir name="fr">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/fr/LC_MESSAGES -->
+    </dir> <!-- /locale/fr -->
+    <dir name="gl">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/gl/LC_MESSAGES -->
+    </dir> <!-- /locale/gl -->
+    <dir name="he">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/he/LC_MESSAGES -->
+    </dir> <!-- /locale/he -->
+    <dir name="hr">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/hr/LC_MESSAGES -->
+    </dir> <!-- /locale/hr -->
+    <dir name="hu">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/hu/LC_MESSAGES -->
+    </dir> <!-- /locale/hu -->
+    <dir name="id">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/id/LC_MESSAGES -->
+    </dir> <!-- /locale/id -->
+    <dir name="is">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/is/LC_MESSAGES -->
+    </dir> <!-- /locale/is -->
+    <dir name="it">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/it/LC_MESSAGES -->
+    </dir> <!-- /locale/it -->
+    <dir name="ja">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ja/LC_MESSAGES -->
+    </dir> <!-- /locale/ja -->
+    <dir name="km">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/km/LC_MESSAGES -->
+    </dir> <!-- /locale/km -->
+    <dir name="ko">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ko/LC_MESSAGES -->
+    </dir> <!-- /locale/ko -->
+    <dir name="lt">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/lt/LC_MESSAGES -->
+    </dir> <!-- /locale/lt -->
+    <dir name="lv">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/lv/LC_MESSAGES -->
+    </dir> <!-- /locale/lv -->
+    <dir name="mk">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/mk/LC_MESSAGES -->
+    </dir> <!-- /locale/mk -->
+    <dir name="nb">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/nb/LC_MESSAGES -->
+    </dir> <!-- /locale/nb -->
+    <dir name="nl">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/nl/LC_MESSAGES -->
+    </dir> <!-- /locale/nl -->
+    <dir name="nn">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/nn/LC_MESSAGES -->
+    </dir> <!-- /locale/nn -->
+    <dir name="pl">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/pl/LC_MESSAGES -->
+    </dir> <!-- /locale/pl -->
+    <dir name="pt">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/pt/LC_MESSAGES -->
+    </dir> <!-- /locale/pt -->
+    <dir name="pt_BR">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/pt_BR/LC_MESSAGES -->
+    </dir> <!-- /locale/pt_BR -->
+    <dir name="ro">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ro/LC_MESSAGES -->
+    </dir> <!-- /locale/ro -->
+    <dir name="ru">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/ru/LC_MESSAGES -->
+    </dir> <!-- /locale/ru -->
+    <dir name="sk">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/sk/LC_MESSAGES -->
+    </dir> <!-- /locale/sk -->
+    <dir name="sl">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/sl/LC_MESSAGES -->
+    </dir> <!-- /locale/sl -->
+    <dir name="sv">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/sv/LC_MESSAGES -->
+    </dir> <!-- /locale/sv -->
+    <dir name="tr">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/tr/LC_MESSAGES -->
+    </dir> <!-- /locale/tr -->
+    <dir name="uk">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/uk/LC_MESSAGES -->
+    </dir> <!-- /locale/uk -->
+    <dir name="zh_CN">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/zh_CN/LC_MESSAGES -->
+    </dir> <!-- /locale/zh_CN -->
+    <dir name="zh_TW">
+     <dir name="LC_MESSAGES">
+      <file name="Horde_Cli.mo" role="data" />
+      <file name="Horde_Cli.po" role="data" />
+     </dir> <!-- /locale/zh_TW/LC_MESSAGES -->
+    </dir> <!-- /locale/zh_TW -->
+    <file name="Horde_Cli.pot" role="data" />
+   </dir> <!-- /locale -->
   </dir> <!-- / -->
  </contents>
  <dependencies>
     <name>Support</name>
     <channel>pear.horde.org</channel>
    </package>
+  </required>
+  <optional>
    <package>
     <name>Translation</name>
     <channel>pear.horde.org</channel>
    </package>
-   <extension>
-    <name>gettext</name>
-   </extension>
-  </required>
+  </optional>
  </dependencies>
  <phprelease>
   <filelist>
@@ -129,7 +391,7 @@ Add &apos;default&apos; parameter to Horde_CLI::prompt().
     <release>beta</release>
     <api>beta</api>
    </stability>
-   <date>2010-08-15</date>
+   <date>2010-10-18</date>
    <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
    <notes>
 * Horde_CLI:: -&gt; Horde_Cli::