lithium\g11n\catalog\adapter\Gettext::_compilePo()
Compiles data into portable object (PO) format.
To improve portability accross libraries the header is generated according
to the format of the output of xgettext
. This means using the same names for
placeholders as well as including an empty entry. The empty entry at the
beginning aids in parsing the file as it attracts the preceding comments and
following metadata when parsed which could otherwise be mistaken as a continued
translation. The only difference in the header format is the initial header which
just features one line of text.
Parameters
-
resource
$stream
-
array
$data
Returns
booleanSource
protected function _compilePo($stream, array $data) {
$output[] = '# This file is distributed under the same license as the PACKAGE package.';
$output[] = '#';
$output[] = 'msgctxt ""';
$output[] = 'msgid ""';
$output[] = 'msgstr ""';
$output[] = '"Project-Id-Version: PACKAGE VERSION\n"';
$output[] = '"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"';
$output[] = '"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"';
$output[] = '"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"';
$output[] = '"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"';
$output[] = '"MIME-Version: 1.0\n"';
$output[] = '"Content-Type: text/plain; charset=UTF-8\n"';
$output[] = '"Content-Transfer-Encoding: 8bit\n"';
$output[] = '"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"';
$output[] = '';
$output = implode("\n", $output) . "\n";
fwrite($stream, $output);
foreach ($data as $key => $item) {
$output = array();
$item = $this->_prepareForWrite($item);
foreach ($item['occurrences'] as $occurrence) {
$output[] = "#: {$occurrence['file']}:{$occurrence['line']}";
}
foreach ($item['comments'] as $comment) {
$output[] = "#. {$comment}";
}
foreach ($item['flags'] as $flag => $value) {
$output[] = "#, {$flag}";
}
if (isset($item['context'])) {
$output[] = "msgctxt \"{$item['context']}\"";
}
$output[] = "msgid \"{$item['ids']['singular']}\"";
if (isset($item['ids']['plural'])) {
$output[] = "msgid_plural \"{$item['ids']['plural']}\"";
foreach ((array) $item['translated'] ?: array(null, null) as $key => $value) {
$output[] = "msgstr[{$key}] \"{$value}\"";
}
} else {
if (is_array($item['translated'])) {
$item['translated'] = array_pop($item['translated']);
}
$output[] = "msgstr \"{$item['translated']}\"";
}
$output[] = '';
$output = implode("\n", $output) . "\n";
fwrite($stream, $output);
}
return true;
}