Add comments when dumping po files

This commit is contained in:
François-Xavier de Guillebon 2019-04-06 16:34:11 +02:00
parent f551f2daae
commit 31b3a55787
No known key found for this signature in database
GPG Key ID: 4C7866C1D8FE86CE
3 changed files with 56 additions and 1 deletions

View File

@ -39,6 +39,18 @@ class PoFileDumper extends FileDumper
} else {
$newLine = true;
}
$metadata = $messages->getMetadata($source, $domain);
if (isset($metadata['comments'])) {
$output .= $this->formatComments($metadata['comments']);
}
if (isset($metadata['flags'])) {
$output .= $this->formatComments(implode(',', (array) $metadata['flags']), ',');
}
if (isset($metadata['sources'])) {
$output .= $this->formatComments(implode(' ', (array) $metadata['sources']), ':');
}
$output .= sprintf('msgid "%s"'."\n", $this->escape($source));
$output .= sprintf('msgstr "%s"'."\n", $this->escape($target));
}
@ -58,4 +70,15 @@ class PoFileDumper extends FileDumper
{
return addcslashes($str, "\0..\37\42\134");
}
private function formatComments($comments, string $prefix = ''): ?string
{
$output = null;
foreach ((array) $comments as $comment) {
$output .= sprintf('#%s %s'."\n", $prefix, $comment);
}
return $output;
}
}

View File

@ -20,7 +20,26 @@ class PoFileDumperTest extends TestCase
public function testFormatCatalogue()
{
$catalogue = new MessageCatalogue('en');
$catalogue->add(['foo' => 'bar', 'bar' => 'foo']);
$catalogue->add(['foo' => 'bar', 'bar' => 'foo', 'foo_bar' => 'foobar', 'bar_foo' => 'barfoo']);
$catalogue->setMetadata('foo_bar', [
'comments' => [
'Comment 1',
'Comment 2',
],
'flags' => [
'fuzzy',
'another',
],
'sources' => [
'src/file_1',
'src/file_2:50',
],
]);
$catalogue->setMetadata('bar_foo', [
'comments' => 'Comment',
'flags' => 'fuzzy',
'sources' => 'src/file_1',
]);
$dumper = new PoFileDumper();

View File

@ -9,3 +9,16 @@ msgstr "bar"
msgid "bar"
msgstr "foo"
# Comment 1
# Comment 2
#, fuzzy,another
#: src/file_1 src/file_2:50
msgid "foo_bar"
msgstr "foobar"
# Comment
#, fuzzy
#: src/file_1
msgid "bar_foo"
msgstr "barfoo"