Merge the changes to GlotPress's POMO from upstream to WordPress's copy.
Fixes #34748 git-svn-id: https://develop.svn.wordpress.org/trunk@35714 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
16797d1814
commit
e4f5801383
@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* Contains Translation_Entry class
|
* Contains Translation_Entry class
|
||||||
*
|
*
|
||||||
* @version $Id: entry.php 718 2012-10-31 00:32:02Z nbachiyski $
|
* @version $Id: entry.php 1157 2015-11-20 04:30:11Z dd32 $
|
||||||
* @package pomo
|
* @package pomo
|
||||||
* @subpackage entry
|
* @subpackage entry
|
||||||
*/
|
*/
|
||||||
@ -49,7 +49,7 @@ class Translation_Entry {
|
|||||||
foreach ($args as $varname => $value) {
|
foreach ($args as $varname => $value) {
|
||||||
$this->$varname = $value;
|
$this->$varname = $value;
|
||||||
}
|
}
|
||||||
if (isset($args['plural'])) $this->is_plural = true;
|
if (isset($args['plural']) && $args['plural']) $this->is_plural = true;
|
||||||
if (!is_array($this->translations)) $this->translations = array();
|
if (!is_array($this->translations)) $this->translations = array();
|
||||||
if (!is_array($this->references)) $this->references = array();
|
if (!is_array($this->references)) $this->references = array();
|
||||||
if (!is_array($this->flags)) $this->flags = array();
|
if (!is_array($this->flags)) $this->flags = array();
|
||||||
@ -68,10 +68,10 @@ class Translation_Entry {
|
|||||||
* @return string|bool the key or false if the entry is empty
|
* @return string|bool the key or false if the entry is empty
|
||||||
*/
|
*/
|
||||||
function key() {
|
function key() {
|
||||||
if (is_null($this->singular)) return false;
|
if ( null === $this->singular || '' === $this->singular ) return false;
|
||||||
|
|
||||||
// Prepend context and EOT, like in MO files
|
// Prepend context and EOT, like in MO files
|
||||||
$key = is_null($this->context)? $this->singular : $this->context.chr(4).$this->singular;
|
$key = !$this->context? $this->singular : $this->context.chr(4).$this->singular;
|
||||||
// Standardize on \n line endings
|
// Standardize on \n line endings
|
||||||
$key = str_replace( array( "\r\n", "\r" ), "\n", $key );
|
$key = str_replace( array( "\r\n", "\r" ), "\n", $key );
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* Class for working with MO files
|
* Class for working with MO files
|
||||||
*
|
*
|
||||||
* @version $Id: mo.php 718 2012-10-31 00:32:02Z nbachiyski $
|
* @version $Id: mo.php 1157 2015-11-20 04:30:11Z dd32 $
|
||||||
* @package pomo
|
* @package pomo
|
||||||
* @subpackage mo
|
* @subpackage mo
|
||||||
*/
|
*/
|
||||||
@ -124,7 +124,7 @@ class MO extends Gettext_Translations {
|
|||||||
//TODO: warnings for control characters
|
//TODO: warnings for control characters
|
||||||
$exported = $entry->singular;
|
$exported = $entry->singular;
|
||||||
if ($entry->is_plural) $exported .= chr(0).$entry->plural;
|
if ($entry->is_plural) $exported .= chr(0).$entry->plural;
|
||||||
if (!is_null($entry->context)) $exported = $entry->context . chr(4) . $exported;
|
if ($entry->context) $exported = $entry->context . chr(4) . $exported;
|
||||||
return $exported;
|
return $exported;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ class MO extends Gettext_Translations {
|
|||||||
*/
|
*/
|
||||||
function export_translations($entry) {
|
function export_translations($entry) {
|
||||||
//TODO: warnings for control characters
|
//TODO: warnings for control characters
|
||||||
return implode(chr(0), $entry->translations);
|
return $entry->is_plural ? implode(chr(0), $entry->translations) : $entry->translations[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,14 +2,16 @@
|
|||||||
/**
|
/**
|
||||||
* Class for working with PO files
|
* Class for working with PO files
|
||||||
*
|
*
|
||||||
* @version $Id: po.php 718 2012-10-31 00:32:02Z nbachiyski $
|
* @version $Id: po.php 1158 2015-11-20 04:31:23Z dd32 $
|
||||||
* @package pomo
|
* @package pomo
|
||||||
* @subpackage po
|
* @subpackage po
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/translations.php';
|
require_once dirname(__FILE__) . '/translations.php';
|
||||||
|
|
||||||
|
if ( ! defined( 'PO_MAX_LINE_LEN' ) ) {
|
||||||
define('PO_MAX_LINE_LEN', 79);
|
define('PO_MAX_LINE_LEN', 79);
|
||||||
|
}
|
||||||
|
|
||||||
ini_set('auto_detect_line_endings', 1);
|
ini_set('auto_detect_line_endings', 1);
|
||||||
|
|
||||||
@ -97,7 +99,7 @@ class PO extends Gettext_Translations {
|
|||||||
* @param string $string the string to format
|
* @param string $string the string to format
|
||||||
* @return string the poified string
|
* @return string the poified string
|
||||||
*/
|
*/
|
||||||
function poify($string) {
|
public static function poify($string) {
|
||||||
$quote = '"';
|
$quote = '"';
|
||||||
$slash = '\\';
|
$slash = '\\';
|
||||||
$newline = "\n";
|
$newline = "\n";
|
||||||
@ -128,8 +130,8 @@ class PO extends Gettext_Translations {
|
|||||||
* @param string $string PO-formatted string
|
* @param string $string PO-formatted string
|
||||||
* @return string enascaped string
|
* @return string enascaped string
|
||||||
*/
|
*/
|
||||||
function unpoify($string) {
|
public static function unpoify($string) {
|
||||||
$escapes = array('t' => "\t", 'n' => "\n", '\\' => '\\');
|
$escapes = array('t' => "\t", 'n' => "\n", 'r' => "\r", '\\' => '\\');
|
||||||
$lines = array_map('trim', explode("\n", $string));
|
$lines = array_map('trim', explode("\n", $string));
|
||||||
$lines = array_map(array('PO', 'trim_quotes'), $lines);
|
$lines = array_map(array('PO', 'trim_quotes'), $lines);
|
||||||
$unpoified = '';
|
$unpoified = '';
|
||||||
@ -149,6 +151,10 @@ class PO extends Gettext_Translations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Standardise the line endings on imported content, technically PO files shouldn't contain \r
|
||||||
|
$unpoified = str_replace( array( "\r\n", "\r" ), "\n", $unpoified );
|
||||||
|
|
||||||
return $unpoified;
|
return $unpoified;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +166,7 @@ class PO extends Gettext_Translations {
|
|||||||
* @param string $string prepend lines in this string
|
* @param string $string prepend lines in this string
|
||||||
* @param string $with prepend lines with this string
|
* @param string $with prepend lines with this string
|
||||||
*/
|
*/
|
||||||
function prepend_each_line($string, $with) {
|
public static function prepend_each_line($string, $with) {
|
||||||
$php_with = var_export($with, true);
|
$php_with = var_export($with, true);
|
||||||
$lines = explode("\n", $string);
|
$lines = explode("\n", $string);
|
||||||
// do not prepend the string on the last empty line, artefact by explode
|
// do not prepend the string on the last empty line, artefact by explode
|
||||||
@ -180,7 +186,7 @@ class PO extends Gettext_Translations {
|
|||||||
* @param string $char character to denote a special PO comment,
|
* @param string $char character to denote a special PO comment,
|
||||||
* like :, default is a space
|
* like :, default is a space
|
||||||
*/
|
*/
|
||||||
function comment_block($text, $char=' ') {
|
public static function comment_block($text, $char=' ') {
|
||||||
$text = wordwrap($text, PO_MAX_LINE_LEN - 3);
|
$text = wordwrap($text, PO_MAX_LINE_LEN - 3);
|
||||||
return PO::prepend_each_line($text, "#$char ");
|
return PO::prepend_each_line($text, "#$char ");
|
||||||
}
|
}
|
||||||
@ -193,28 +199,59 @@ class PO extends Gettext_Translations {
|
|||||||
* @return false|string PO-style formatted string for the entry or
|
* @return false|string PO-style formatted string for the entry or
|
||||||
* false if the entry is empty
|
* false if the entry is empty
|
||||||
*/
|
*/
|
||||||
function export_entry(&$entry) {
|
public static function export_entry(&$entry) {
|
||||||
if (is_null($entry->singular)) return false;
|
if ( null === $entry->singular || '' === $entry->singular ) return false;
|
||||||
$po = array();
|
$po = array();
|
||||||
if (!empty($entry->translator_comments)) $po[] = PO::comment_block($entry->translator_comments);
|
if (!empty($entry->translator_comments)) $po[] = PO::comment_block($entry->translator_comments);
|
||||||
if (!empty($entry->extracted_comments)) $po[] = PO::comment_block($entry->extracted_comments, '.');
|
if (!empty($entry->extracted_comments)) $po[] = PO::comment_block($entry->extracted_comments, '.');
|
||||||
if (!empty($entry->references)) $po[] = PO::comment_block(implode(' ', $entry->references), ':');
|
if (!empty($entry->references)) $po[] = PO::comment_block(implode(' ', $entry->references), ':');
|
||||||
if (!empty($entry->flags)) $po[] = PO::comment_block(implode(", ", $entry->flags), ',');
|
if (!empty($entry->flags)) $po[] = PO::comment_block(implode(", ", $entry->flags), ',');
|
||||||
if (!is_null($entry->context)) $po[] = 'msgctxt '.PO::poify($entry->context);
|
if ($entry->context) $po[] = 'msgctxt '.PO::poify($entry->context);
|
||||||
$po[] = 'msgid '.PO::poify($entry->singular);
|
$po[] = 'msgid '.PO::poify($entry->singular);
|
||||||
if (!$entry->is_plural) {
|
if (!$entry->is_plural) {
|
||||||
$translation = empty($entry->translations)? '' : $entry->translations[0];
|
$translation = empty($entry->translations)? '' : $entry->translations[0];
|
||||||
|
$translation = PO::match_begin_and_end_newlines( $translation, $entry->singular );
|
||||||
$po[] = 'msgstr '.PO::poify($translation);
|
$po[] = 'msgstr '.PO::poify($translation);
|
||||||
} else {
|
} else {
|
||||||
$po[] = 'msgid_plural '.PO::poify($entry->plural);
|
$po[] = 'msgid_plural '.PO::poify($entry->plural);
|
||||||
$translations = empty($entry->translations)? array('', '') : $entry->translations;
|
$translations = empty($entry->translations)? array('', '') : $entry->translations;
|
||||||
foreach($translations as $i => $translation) {
|
foreach($translations as $i => $translation) {
|
||||||
|
$translation = PO::match_begin_and_end_newlines( $translation, $entry->plural );
|
||||||
$po[] = "msgstr[$i] ".PO::poify($translation);
|
$po[] = "msgstr[$i] ".PO::poify($translation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return implode("\n", $po);
|
return implode("\n", $po);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function match_begin_and_end_newlines( $translation, $original ) {
|
||||||
|
if ( '' === $translation ) {
|
||||||
|
return $translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
$original_begin = "\n" === substr( $original, 0, 1 );
|
||||||
|
$original_end = "\n" === substr( $original, -1 );
|
||||||
|
$translation_begin = "\n" === substr( $translation, 0, 1 );
|
||||||
|
$translation_end = "\n" === substr( $translation, -1 );
|
||||||
|
|
||||||
|
if ( $original_begin ) {
|
||||||
|
if ( ! $translation_begin ) {
|
||||||
|
$translation = "\n" . $translation;
|
||||||
|
}
|
||||||
|
} elseif ( $translation_begin ) {
|
||||||
|
$translation = ltrim( $translation, "\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $original_end ) {
|
||||||
|
if ( ! $translation_end ) {
|
||||||
|
$translation .= "\n";
|
||||||
|
}
|
||||||
|
} elseif ( $translation_end ) {
|
||||||
|
$translation = rtrim( $translation, "\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $translation;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $filename
|
* @param string $filename
|
||||||
* @return boolean
|
* @return boolean
|
||||||
@ -400,7 +437,7 @@ class PO extends Gettext_Translations {
|
|||||||
* @param string $s
|
* @param string $s
|
||||||
* @return sring
|
* @return sring
|
||||||
*/
|
*/
|
||||||
function trim_quotes($s) {
|
public static function trim_quotes($s) {
|
||||||
if ( substr($s, 0, 1) == '"') $s = substr($s, 1);
|
if ( substr($s, 0, 1) == '"') $s = substr($s, 1);
|
||||||
if ( substr($s, -1, 1) == '"') $s = substr($s, 0, -1);
|
if ( substr($s, -1, 1) == '"') $s = substr($s, 0, -1);
|
||||||
return $s;
|
return $s;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Classes, which help reading streams of data from files.
|
* Classes, which help reading streams of data from files.
|
||||||
* Based on the classes from Danilo Segan <danilo@kvota.net>
|
* Based on the classes from Danilo Segan <danilo@kvota.net>
|
||||||
*
|
*
|
||||||
* @version $Id: streams.php 718 2012-10-31 00:32:02Z nbachiyski $
|
* @version $Id: streams.php 1157 2015-11-20 04:30:11Z dd32 $
|
||||||
* @package pomo
|
* @package pomo
|
||||||
* @subpackage streams
|
* @subpackage streams
|
||||||
*/
|
*/
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* Class for a set of entries for translation and their associated headers
|
* Class for a set of entries for translation and their associated headers
|
||||||
*
|
*
|
||||||
* @version $Id: translations.php 718 2012-10-31 00:32:02Z nbachiyski $
|
* @version $Id: translations.php 1157 2015-11-20 04:30:11Z dd32 $
|
||||||
* @package pomo
|
* @package pomo
|
||||||
* @subpackage translations
|
* @subpackage translations
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user