예제 #1
0
 function xgettext($project, $dir, $output_file, $placeholders = array(), $excludes = array(), $includes = array())
 {
     $meta = array_merge($this->meta['default'], $this->meta[$project]);
     $placeholders = array_merge($meta, $placeholders);
     $meta['output'] = $this->realpath_missing($output_file);
     $placeholders['year'] = date('Y');
     $placeholder_keys = array_map(create_function('$x', 'return "{".$x."}";'), array_keys($placeholders));
     $placeholder_values = array_values($placeholders);
     foreach ($meta as $key => $value) {
         $meta[$key] = str_replace($placeholder_keys, $placeholder_values, $value);
     }
     $originals = $this->extractor->extract_from_directory($dir, $excludes, $includes);
     $pot = new PO();
     $pot->entries = $originals->entries;
     $pot->set_header('Project-Id-Version', $meta['package-name'] . ' ' . $meta['package-version']);
     $pot->set_header('Report-Msgid-Bugs-To', $meta['msgid-bugs-address']);
     $pot->set_header('POT-Creation-Date', gmdate('Y-m-d H:i:s+00:00'));
     $pot->set_header('MIME-Version', '1.0');
     $pot->set_header('Content-Type', 'text/plain; charset=UTF-8');
     $pot->set_header('Content-Transfer-Encoding', '8bit');
     $pot->set_header('PO-Revision-Date', date('Y') . '-MO-DA HO:MI+ZONE');
     $pot->set_header('Last-Translator', 'FULL NAME <EMAIL@ADDRESS>');
     $pot->set_header('Language-Team', 'LANGUAGE <*****@*****.**>');
     $pot->set_comment_before_headers($meta['comments']);
     $pot->export_to_file($output_file);
     return true;
 }
예제 #2
0
 /**
  * POT generator
  *
  * @param string $project "woocommerce" or "woocommerce-admin"
  * @return bool true on success, false on error
  */
 public function generate_pot($project = 'woocommerce')
 {
     // Unknown project
     if (empty($this->projects[$project])) {
         return false;
     }
     // Project config
     $config = $this->projects[$project];
     // Extract translatable strings from the WooCommerce plugin
     $originals = $this->extractor->extract_from_directory($this->woocommerce_path, $config['excludes'], $config['includes']);
     // Build POT file
     $pot = new PO();
     $pot->entries = $originals->entries;
     $pot->set_header('Project-Id-Version', 'WooCommerce ' . $this->woocommerce_version() . ' ' . $config['title']);
     $pot->set_header('Report-Msgid-Bugs-To', 'https://github.com/woothemes/woocommerce/issues');
     $pot->set_header('POT-Creation-Date', gmdate('Y-m-d H:i:s+00:00'));
     $pot->set_header('MIME-Version', '1.0');
     $pot->set_header('Content-Type', 'text/plain; charset=UTF-8');
     $pot->set_header('Content-Transfer-Encoding', '8bit');
     $pot->set_header('PO-Revision-Date', gmdate('Y') . '-MO-DA HO:MI+ZONE');
     $pot->set_header('Last-Translator', 'FULL NAME <EMAIL@ADDRESS>');
     $pot->set_header('Language-Team', 'LANGUAGE <EMAIL@ADDRESS>');
     // Write POT file
     $result = $pot->export_to_file($config['file']);
     // Add plugin header
     if ($project == 'woocommerce-admin') {
         $potextmeta = new PotExtMeta();
         $potextmeta->append($this->woocommerce_path . 'woocommerce.php', $config['file']);
     }
     return $result;
 }
예제 #3
0
 function export_as_po()
 {
     if (!isset($this->project) || !$this->project) {
         $this->project = GP::$project->get($this->project_id);
     }
     // TODO: rename locale column to locale_slug and use freely $this->locale as the locale object
     $locale = GP_Locales::by_slug($this->locale);
     $po = new PO();
     // TODO: add more meta data in the project: language team, report URL
     // TODO: last updated for a translation set
     $po->set_header('PO-Revision-Date', gmdate('Y-m-d H:i:s+0000'));
     $po->set_header('MIME-Version', '1.0');
     $po->set_header('Content-Type', 'text/plain; charset=UTF-8');
     $po->set_header('Content-Transfer-Encoding', '8bit');
     $po->set_header('Plural-Forms', "nplurals={$locale->nplurals}; plural={$locale->plural_expression};");
     $po->set_header('X-Generator', 'GlotPress/' . gp_get_option('version'));
     $entries = GP::$translation->for_translation($this->project, $this, 'no-limit', array('status' => 'current'));
     foreach ($entries as $entry) {
         $po->add_entry($entry);
     }
     $po->set_header('Project-Id-Version', $this->project->name);
     return $po->export();
 }
예제 #4
0
 /**
  * POT generator
  *
  * @param string $project "redux" or "redux-admin"
  * @return bool true on success, false on error
  */
 public function generate_pot($project = 'redux')
 {
     // Unknown project
     if (empty($this->projects[$project])) {
         return false;
     }
     // Project config
     $config = $this->projects[$project];
     // Extract translatable strings from the ReduxFramework plugin
     $originals = $this->extractor->extract_from_directory($this->redux_path, $config['excludes'], $config['includes']);
     // Build POT file
     $pot = new PO();
     $pot->entries = $originals->entries;
     $pot->set_header('Project-Id-Version', 'Redux Framework ' . $this->redux_version() . ' ' . $config['title']);
     $pot->set_header('Report-Msgid-Bugs-To', 'https://github.com/ReduxFramework/ReduxFramework/issues');
     $pot->set_header('POT-Creation-Date', gmdate('Y-m-d H:i:s+00:00'));
     $pot->set_header('MIME-Version', '1.0');
     $pot->set_header('Content-Type', 'text/plain; charset=UTF-8');
     $pot->set_header('Content-Transfer-Encoding', '8bit');
     $pot->set_header('PO-Revision-Date', gmdate('Y') . '-MO-DA HO:MI+ZONE');
     $pot->set_header('Last-Translator', 'Dovy Paukstys <*****@*****.**>');
     $pot->set_header('Language-Team', 'ReduxFramework <*****@*****.**>');
     $pot->set_header('Language', 'en_US');
     $pot->set_header('Plural-Forms', 'nplurals=2; plural=(n != 1);');
     $pot->set_header('esc_html_x;_c;_nc', '');
     $pot->set_header('_nx_noop;_ex;esc_attr__;esc_attr_e;esc_attr_x;esc_html__;esc_html_e;', '');
     $pot->set_header('X-Poedit-KeywordsList', '__;_e;__ngettext;_n;__ngettext_noop;_n_noop;_x;_nx;');
     $pot->set_header('X-Poedit-Basepath', '../../');
     $pot->set_header('X-Poedit-SourceCharset', 'UTF-8');
     $pot->set_header('X-Poedit-SearchPath-0', 'ReduxCore');
     $pot->set_header('X-Poedit-SearchPath-1', 'ReduxCore/languages');
     $pot->set_header('X-Poedit-SearchPath-2', '.');
     // Write POT file
     $result = $pot->export_to_file($config['file']);
     // Add plugin header
     if ($project == 'redux-admin') {
         $potextmeta = new PotExtMeta();
         $potextmeta->append($this->redux_path . 'redux-framework.php', $config['file']);
     }
     return $result;
 }
예제 #5
0
 function test_export_to_file()
 {
     $po = new PO();
     $entry = new Translation_Entry(array('singular' => 'baba'));
     $entry2 = new Translation_Entry(array('singular' => 'dyado'));
     $po->set_header('Project-Id-Version', 'WordPress 2.6-bleeding');
     $po->set_header('POT-Creation-Date', '2008-04-08 18:00+0000');
     $po->add_entry($entry);
     $po->add_entry($entry2);
     $temp_fn = $this->temp_filename();
     $po->export_to_file($temp_fn, false);
     $this->assertEquals($po->export(false), file_get_contents($temp_fn));
     $temp_fn2 = $this->temp_filename();
     $po->export_to_file($temp_fn2);
     $this->assertEquals($po->export(), file_get_contents($temp_fn2));
 }