Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 18 |
CRAP | |
0.00% |
0 / 85 |
PoItem | |
0.00% |
0 / 1 |
|
0.00% |
0 / 18 |
930 | |
0.00% |
0 / 85 |
getLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getContext | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setContext | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getSource | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setSource | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getTranslation | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setTranslation | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setPlural | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
isPlural | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getComment | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setComment | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setFromArray | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 19 |
|||
__toString | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
formatItem | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
formatPlural | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 13 |
|||
formatSingular | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
formatString | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Component\Gettext\PoItem. | |
*/ | |
namespace Drupal\Component\Gettext; | |
/** | |
* PoItem handles one translation. | |
* | |
* @todo: This class contains some really old legacy code. | |
* @see https://www.drupal.org/node/1637662 | |
*/ | |
class PoItem { | |
/** | |
* The language code this translation is in. | |
* | |
* @car string | |
*/ | |
private $_langcode; | |
/** | |
* The context this translation belongs to. | |
* | |
* @var string | |
*/ | |
private $_context = ''; | |
/** | |
* The source string or array of strings if it has plurals. | |
* | |
* @var string or array | |
* @see $_plural | |
*/ | |
private $_source; | |
/** | |
* Flag indicating if this translation has plurals. | |
* | |
* @var bool | |
*/ | |
private $_plural; | |
/** | |
* The comment of this translation. | |
* | |
* @var string | |
*/ | |
private $_comment; | |
/** | |
* The translation string or array of strings if it has plurals. | |
* | |
* @var string or array | |
* @see $_plural | |
*/ | |
private $_translation; | |
/** | |
* Gets the language code of the currently used language. | |
* | |
* @return string with langcode | |
*/ | |
function getLangcode() { | |
return $this->_langcode; | |
} | |
/** | |
* Set the language code of the current language. | |
* | |
* @param string $langcode | |
*/ | |
function setLangcode($langcode) { | |
$this->_langcode = $langcode; | |
} | |
/** | |
* Gets the context this translation belongs to. | |
* | |
* @return string $context | |
*/ | |
function getContext() { | |
return $this->_context; | |
} | |
/** | |
* Set the context this translation belongs to. | |
* | |
* @param string $context | |
*/ | |
function setContext($context) { | |
$this->_context = $context; | |
} | |
/** | |
* Gets the source string or the array of strings if the translation has | |
* plurals. | |
* | |
* @return string or array $translation | |
*/ | |
function getSource() { | |
return $this->_source; | |
} | |
/** | |
* Set the source string or the array of strings if the translation has | |
* plurals. | |
* | |
* @param string or array $source | |
*/ | |
function setSource($source) { | |
$this->_source = $source; | |
} | |
/** | |
* Gets the translation string or the array of strings if the translation has | |
* plurals. | |
* | |
* @return string or array $translation | |
*/ | |
function getTranslation() { | |
return $this->_translation; | |
} | |
/** | |
* Set the translation string or the array of strings if the translation has | |
* plurals. | |
* | |
* @param string or array $translation | |
*/ | |
function setTranslation($translation) { | |
$this->_translation = $translation; | |
} | |
/** | |
* Set if the translation has plural values. | |
* | |
* @param bool $plural | |
*/ | |
function setPlural($plural) { | |
$this->_plural = $plural; | |
} | |
/** | |
* Get if the translation has plural values. | |
* | |
* @return bool | |
*/ | |
function isPlural() { | |
return $this->_plural; | |
} | |
/** | |
* Gets the comment of this translation. | |
* | |
* @return String $comment | |
*/ | |
function getComment() { | |
return $this->_comment; | |
} | |
/** | |
* Set the comment of this translation. | |
* | |
* @param String $comment | |
*/ | |
function setComment($comment) { | |
$this->_comment = $comment; | |
} | |
/** | |
* Create the PoItem from a structured array. | |
* | |
* @param array values | |
*/ | |
public function setFromArray(array $values = array()) { | |
if (isset($values['context'])) { | |
$this->setContext($values['context']); | |
} | |
if (isset($values['source'])) { | |
$this->setSource($values['source']); | |
} | |
if (isset($values['translation'])) { | |
$this->setTranslation($values['translation']); | |
} | |
if (isset($values['comment'])){ | |
$this->setComment($values['comment']); | |
} | |
if (isset($this->_source) && | |
strpos($this->_source, LOCALE_PLURAL_DELIMITER) !== FALSE) { | |
$this->setSource(explode(LOCALE_PLURAL_DELIMITER, $this->_source)); | |
$this->setTranslation(explode(LOCALE_PLURAL_DELIMITER, $this->_translation)); | |
$this->setPlural(count($this->_source) > 1); | |
} | |
} | |
/** | |
* Output the PoItem as a string. | |
*/ | |
public function __toString() { | |
return $this->formatItem(); | |
} | |
/** | |
* Format the POItem as a string. | |
*/ | |
private function formatItem() { | |
$output = ''; | |
// Format string context. | |
if (!empty($this->_context)) { | |
$output .= 'msgctxt ' . $this->formatString($this->_context); | |
} | |
// Format translation. | |
if ($this->_plural) { | |
$output .= $this->formatPlural(); | |
} | |
else { | |
$output .= $this->formatSingular(); | |
} | |
// Add one empty line to separate the translations. | |
$output .= "\n"; | |
return $output; | |
} | |
/** | |
* Formats a plural translation. | |
*/ | |
private function formatPlural() { | |
$output = ''; | |
// Format source strings. | |
$output .= 'msgid ' . $this->formatString($this->_source[0]); | |
$output .= 'msgid_plural ' . $this->formatString($this->_source[1]); | |
foreach ($this->_translation as $i => $trans) { | |
if (isset($this->_translation[$i])) { | |
$output .= 'msgstr[' . $i . '] ' . $this->formatString($trans); | |
} | |
else { | |
$output .= 'msgstr[' . $i . '] ""' . "\n"; | |
} | |
} | |
return $output; | |
} | |
/** | |
* Formats a singular translation. | |
*/ | |
private function formatSingular() { | |
$output = ''; | |
$output .= 'msgid ' . $this->formatString($this->_source); | |
$output .= 'msgstr ' . (isset($this->_translation) ? $this->formatString($this->_translation) : '""'); | |
return $output; | |
} | |
/** | |
* Formats a string for output on multiple lines. | |
*/ | |
private function formatString($string) { | |
// Escape characters for processing. | |
$string = addcslashes($string, "\0..\37\\\""); | |
// Always include a line break after the explicit \n line breaks from | |
// the source string. Otherwise wrap at 70 chars to accommodate the extra | |
// format overhead too. | |
$parts = explode("\n", wordwrap(str_replace('\n', "\\n\n", $string), 70, " \n")); | |
// Multiline string should be exported starting with a "" and newline to | |
// have all lines aligned on the same column. | |
if (count($parts) > 1) { | |
return "\"\"\n\"" . implode("\"\n\"", $parts) . "\"\n"; | |
} | |
// Single line strings are output on the same line. | |
else { | |
return "\"$parts[0]\"\n"; | |
} | |
} | |
} |