Author: david
Date: Tue Sep 13 12:21:31 2011
New Revision: 9702

Log:
Track source file for each i18n string in notes field

Modified:
   trunk/lib/task/i18nConsolidateTask.class.php

Modified: trunk/lib/task/i18nConsolidateTask.class.php
==============================================================================
--- trunk/lib/task/i18nConsolidateTask.class.php        Tue Sep 13 11:17:51 
2011        (r9701)
+++ trunk/lib/task/i18nConsolidateTask.class.php        Tue Sep 13 12:21:31 
2011        (r9702)
@@ -79,6 +79,8 @@
 
 class sfI18nConsolidatedExtract extends sfI18nApplicationExtract
 {
+  protected $messageSource = array();
+
   public function configure()
   {
     // Override sfI18nAcpplicationExtract::configure() so we extract from
@@ -107,26 +109,80 @@
     // Now save translated strings
     foreach ($units as $key => $item)
     {
-      $consolidated->getMessageSource()->update($key, $item[0], $item[2]);
+      // Track source file in comments
+      $comment = $item[2];
+      if (isset($this->sourceFile[$key]))
+      {
+        $comment = $this->sourceFile[$key];
+      }
+
+      $consolidated->getMessageSource()->update($key, $item[0], $comment);
     }
   }
 
   public function extract()
   {
-    parent::extract();
+    // Add global templates
+    $this->extractFromPhpFiles(sfConfig::get('sf_app_template_dir'));
+
+    // Add global librairies
+    $this->extractFromPhpFiles(sfConfig::get('sf_app_lib_dir'));
+
+    // Add forms
+    $this->extractFromPhpFiles(sfConfig::get('sf_lib_dir').'/form');
+
+    // Extract from modules
+    $modules = 
sfFinder::type('dir')->maxdepth(0)->in(sfConfig::get('sf_app_module_dir'));
+    foreach ($modules as $module)
+    {
+      $this->extractFromPhpFiles(array(
+        $module.'/actions',
+        $module.'/lib',
+        $module.'/templates',
+      ));
+    }
 
     // Extract plugin strings
-    $plugins = 
sfFinder::type('dir')->maxdepth(0)->relative()->not_name('.')->in(sfConfig::get('sf_plugins_dir'));
+    $plugins = 
sfFinder::type('dir')->maxdepth(0)->not_name('.')->in(sfConfig::get('sf_plugins_dir'));
     foreach ($plugins as $plugin)
     {
-      foreach 
(sfFinder::type('dir')->maxdepth(0)->relative()->in(sfConfig::get('sf_plugins_dir').'/'.$plugin.'/modules')
 as $piModule)
+      foreach (sfFinder::type('dir')->maxdepth(0)->in($plugin.'/modules') as 
$piModule)
       {
         $this->extractFromPhpFiles(array(
-          
sfConfig::get('sf_plugins_dir').'/'.$plugin.'/modules/'.$piModule.'/actions',
-          
sfConfig::get('sf_plugins_dir').'/'.$plugin.'/modules/'.$piModule.'/lib',
-          
sfConfig::get('sf_plugins_dir').'/'.$plugin.'/modules/'.$piModule.'/templates',
+          $piModule.'/actions',
+          $piModule.'/lib',
+          $piModule.'/templates',
         ));
       }
     }
   }
+
+  /**
+   * Extracts i18n strings from PHP files.
+   *
+   * @param string $dir The PHP full path name
+   */
+  protected function extractFromPhpFiles($dir)
+  {
+    $phpExtractor = new sfI18nPhpExtractor();
+
+    $files = sfFinder::type('file')->name('*.php');
+    $messages = array();
+    foreach ($files->in($dir) as $file)
+    {
+      $extracted = $phpExtractor->extract(file_get_contents($file));
+      $messages = array_merge($messages, $extracted);
+
+      // Track source file for all messages
+      foreach ($extracted as $message)
+      {
+        if (!isset($this->sourceFile[$message]))
+        {
+          $this->sourceFile[$message] = 
str_replace(sfConfig::get('sf_web_dir'), '', $file);
+        }
+      }
+    }
+
+    $this->updateMessages($messages);
+  }
 }

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to