/**
  * Extracts i18n strings.
  *
  * This class must be implemented by subclasses.
  */
 public function extract()
 {
     // Extract from PHP files to find __() calls in actions/ lib/ and templates/ directories
     $moduleDir = sfConfig::get('sf_app_module_dir') . '/' . $this->module;
     $this->extractFromPhpFiles(array($moduleDir . '/actions', $moduleDir . '/lib', $moduleDir . '/templates'));
     // Extract from generator.yml files
     $generator = $moduleDir . '/config/generator.yml';
     if (file_exists($generator)) {
         $yamlExtractor = new sfI18nYamlGeneratorExtractor();
         $this->updateMessages($yamlExtractor->extract(file_get_contents($generator)));
     }
     // Extract from validate/*.yml files
     $validateFiles = glob($moduleDir . '/validate/*.yml');
     if (is_array($validateFiles)) {
         foreach ($validateFiles as $validateFile) {
             $yamlExtractor = new sfI18nYamlValidateExtractor();
             $this->updateMessages($yamlExtractor->extract(file_get_contents($validateFile)));
         }
     }
 }
$e = new sfI18nYamlGeneratorExtractor();
$t->ok($e instanceof sfI18nExtractorInterface, 'sfI18nYamlGeneratorExtractor implements the sfI18nExtractorInterface interface');
// ->extract();
$t->diag('->extract()');
$content = <<<EOF
generator:
  param:
    config:
      fields:
        name: { name: "Global Field Name", help: "Global Help for Name" }
      list:
        title: List title
        fields:
          name: { name: "List Field Name", help: "List Help for Name" }
      edit:
        title: Edit title
        display:
          NONE: []
          First category: []
          Last category: []
        fields:
          name: { name: "Edit Field Name", help: "Edit Help for Name" }
EOF;
$t->is($e->extract($content), array('List title', 'Edit title', 'Global Field Name', 'Global Help for Name', 'List Field Name', 'List Help for Name', 'Edit Field Name', 'Edit Help for Name', 'First category', 'Last category'), '->extract() extracts strings from generator.yml files');
$content = <<<EOF
generator:
  param:
    edit:
      display: [first_name, last_name]
EOF;
$t->is($e->extract($content), array(), '->extract() extracts strings from generator.yml files');
        name: { name: "Global Field Name", help: "Global Help for Name" }
      list:
        title: List title
        fields:
          name: { name: "List Field Name", help: "List Help for Name" }
      edit:
        title: Edit title
        display:
          NONE: []
          First category: []
          Last category: []
        fields:
          name: { name: "Edit Field Name", help: "Edit Help for Name" }
EOF;

$t->is($e->extract($content), array(
  'List title',
  'Edit title',
  'Global Field Name',
  'Global Help for Name',
  'List Field Name',
  'List Help for Name',
  'Edit Field Name',
  'Edit Help for Name',
  'First category',
  'Last category',
), '->extract() extracts strings from generator.yml files');

$content = <<<EOF
generator:
  param: