PoItem handles one translation.
@todo: This class contains some really old legacy code.
Expanded class hierarchy of PoItem
https://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 boolean
*/
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;
/**
* Get 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;
}
/**
* Get 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;
}
/**
* Get 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;
}
/**
* Get 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 boolean $plural
*/
function setPlural($plural) {
$this->_plural = $plural;
}
/**
* Get if the translation has plural values.
*
* @return boolean $plural
*/
function isPlural() {
return $this->_plural;
}
/**
* Get 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->_translation) > 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";
}
else {
return "\"{$parts[0]}\"\n";
}
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
PoItem:: |
private | property | The comment of this translation. | |
PoItem:: |
private | property | The context this translation belongs to. | |
PoItem:: |
private | property | The language code this translation is in. | |
PoItem:: |
private | property | Flag indicating if this translation has plurals. | |
PoItem:: |
private | property | The source string or array of strings if it has plurals. | |
PoItem:: |
private | property | The translation string or array of strings if it has plurals. | |
PoItem:: |
private | function | Format the POItem as a string. | |
PoItem:: |
private | function | Formats a plural translation. | |
PoItem:: |
private | function | Formats a singular translation. | |
PoItem:: |
private | function | Formats a string for output on multiple lines. | |
PoItem:: |
function | Get the comment of this translation. | ||
PoItem:: |
function | Get the context this translation belongs to. | ||
PoItem:: |
function | Get the language code of the currently used language. | ||
PoItem:: |
function | Get the source string or the array of strings if the translation has plurals. | ||
PoItem:: |
function | Get the translation string or the array of strings if the translation has plurals. | ||
PoItem:: |
function | Get if the translation has plural values. | ||
PoItem:: |
function | Set the comment of this translation. | ||
PoItem:: |
function | Set the context this translation belongs to. | ||
PoItem:: |
public | function | Create the PoItem from a structured array. | |
PoItem:: |
function | Set the language code of the current language. | ||
PoItem:: |
function | Set if the translation has plural values. | ||
PoItem:: |
function | Set the source string or the array of strings if the translation has plurals. | ||
PoItem:: |
function | Set the translation string or the array of strings if the translation has plurals. | ||
PoItem:: |
public | function | Output the PoItem as a string. |