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; }
/** * 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; }
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)); }
public function compilePot() { $this->prepareExport(); $path = $this->getPath(); $pot_file = $this->getPotFile(); $this->makePot($path, $pot_file); // remove headers $po = new \PO(); $po->import_from_file($pot_file); $po->export_to_file($pot_file, false); }
/** * 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; }
/** * Save the PO file and compile corresponding MO file. * * @since 1.2.0 Removed .bak creation, added destination directory generating. * @since 1.0.0 * * @uses \PO::export_to_file() to save the updated PO file. * @uses \MO::export_to_file() to compile the MO file. * * @param string $file Optional The file path/name to use. */ public function export($file = null) { // Override file property with provided filename if ($file) { $this->filename = $file; } // Fail if no filename is available if (!$this->filename) { throw new Exception('No path specified to save to.'); } // Load necessary libraries require_once ABSPATH . WPINC . '/pomo/mo.php'; $mo = new \MO(); // Create the .po and .mo filenames appropriately if (substr($this->filename, -3) == '.po') { // .po extension exists... $po_file = $this->filename; // ...replace with .mo $mo_file = substr($this->filename, 0, -3) . '.mo'; } else { // No extension, add each $po_file = $this->filename . '.po'; $mo_file = $this->filename . '.mo'; } // Copy all properties from the PO interface to the MO one foreach (get_object_vars($this->po) as $key => $val) { $mo->{$key} = $val; } // Ensure the parent directory exists wp_mkdir_p(dirname($po_file)); // Export the PO file $this->po->export_to_file($po_file); // Compile the MO file $mo->export_to_file($mo_file); }