lithium\g11n\catalog\adapter\Gettext::_compilePo PHP Method

_compilePo() protected method

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.
protected _compilePo ( resource $stream, array $data ) : boolean
$stream resource
$data array
return boolean
    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;
    }