[Translation] Adding the ability do load <notes> in xliff2.0
This commit is contained in:
parent
67abb80498
commit
b0cdb53d67
@ -8,6 +8,7 @@ CHANGELOG
|
|||||||
* Added `TranslationExtractorPass`
|
* Added `TranslationExtractorPass`
|
||||||
* Added `TranslatorPass`
|
* Added `TranslatorPass`
|
||||||
* Added <notes> section to the Xliff 2.0 dumper.
|
* Added <notes> section to the Xliff 2.0 dumper.
|
||||||
|
* Improved Xliff 2.0 loader to load <notes> section.
|
||||||
* Added `TranslationWriterInterface`
|
* Added `TranslationWriterInterface`
|
||||||
* Deprecated `TranslationWriter::writeTranslations` in favor of `TranslationWriter::write`
|
* Deprecated `TranslationWriter::writeTranslations` in favor of `TranslationWriter::write`
|
||||||
|
|
||||||
|
@ -127,7 +127,8 @@ class XliffFileLoader implements LoaderInterface
|
|||||||
|
|
||||||
$xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0');
|
$xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0');
|
||||||
|
|
||||||
foreach ($xml->xpath('//xliff:unit/xliff:segment') as $segment) {
|
foreach ($xml->xpath('//xliff:unit') as $unit) {
|
||||||
|
$segment = $unit->segment;
|
||||||
$source = $segment->source;
|
$source = $segment->source;
|
||||||
|
|
||||||
// If the xlf file has another encoding specified, try to convert it because
|
// If the xlf file has another encoding specified, try to convert it because
|
||||||
@ -144,6 +145,18 @@ class XliffFileLoader implements LoaderInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($unit->notes)) {
|
||||||
|
$metadata['notes'] = array();
|
||||||
|
foreach ($unit->notes->note as $noteNode) {
|
||||||
|
$note = array();
|
||||||
|
foreach ($noteNode->attributes() as $key => $value) {
|
||||||
|
$note[$key] = (string) $value;
|
||||||
|
}
|
||||||
|
$note['content'] = (string) $noteNode;
|
||||||
|
$metadata['notes'][] = $note;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$catalogue->setMetadata((string) $source, $metadata, $domain);
|
$catalogue->setMetadata((string) $source, $metadata, $domain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,12 +93,17 @@ class XliffFileDumperTest extends TestCase
|
|||||||
$catalogue = new MessageCatalogue('en_US');
|
$catalogue = new MessageCatalogue('en_US');
|
||||||
$catalogue->add(array(
|
$catalogue->add(array(
|
||||||
'foo' => 'bar',
|
'foo' => 'bar',
|
||||||
|
'baz' => 'biz',
|
||||||
));
|
));
|
||||||
$catalogue->setMetadata('foo', array('notes' => array(
|
$catalogue->setMetadata('foo', array('notes' => array(
|
||||||
array('category' => 'state', 'content' => 'new'),
|
array('category' => 'state', 'content' => 'new'),
|
||||||
array('category' => 'approved', 'content' => 'true'),
|
array('category' => 'approved', 'content' => 'true'),
|
||||||
array('category' => 'section', 'content' => 'user login', 'priority' => '1'),
|
array('category' => 'section', 'content' => 'user login', 'priority' => '1'),
|
||||||
)));
|
)));
|
||||||
|
$catalogue->setMetadata('baz', array('notes' => array(
|
||||||
|
array('id' => 'x', 'content' => 'x_content'),
|
||||||
|
array('appliesTo' => 'target', 'category' => 'quality', 'content' => 'Fuzzy'),
|
||||||
|
)));
|
||||||
|
|
||||||
$dumper = new XliffFileDumper();
|
$dumper = new XliffFileDumper();
|
||||||
|
|
||||||
|
@ -188,4 +188,44 @@ class XliffFileLoaderTest extends TestCase
|
|||||||
// target attributes
|
// target attributes
|
||||||
$this->assertEquals(array('target-attributes' => array('order' => 1)), $catalogue->getMetadata('bar', 'domain1'));
|
$this->assertEquals(array('target-attributes' => array('order' => 1)), $catalogue->getMetadata('bar', 'domain1'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testLoadVersion2WithNoteMeta()
|
||||||
|
{
|
||||||
|
$loader = new XliffFileLoader();
|
||||||
|
$resource = __DIR__.'/../fixtures/resources-notes-meta.xlf';
|
||||||
|
$catalogue = $loader->load($resource, 'en', 'domain1');
|
||||||
|
|
||||||
|
$this->assertEquals('en', $catalogue->getLocale());
|
||||||
|
$this->assertEquals(array(new FileResource($resource)), $catalogue->getResources());
|
||||||
|
$this->assertSame(array(), libxml_get_errors());
|
||||||
|
|
||||||
|
// test for "foo" metadata
|
||||||
|
$this->assertTrue($catalogue->defines('foo', 'domain1'));
|
||||||
|
$metadata = $catalogue->getMetadata('foo', 'domain1');
|
||||||
|
$this->assertNotEmpty($metadata);
|
||||||
|
$this->assertCount(3, $metadata['notes']);
|
||||||
|
|
||||||
|
$this->assertEquals('state', $metadata['notes'][0]['category']);
|
||||||
|
$this->assertEquals('new', $metadata['notes'][0]['content']);
|
||||||
|
|
||||||
|
$this->assertEquals('approved', $metadata['notes'][1]['category']);
|
||||||
|
$this->assertEquals('true', $metadata['notes'][1]['content']);
|
||||||
|
|
||||||
|
$this->assertEquals('section', $metadata['notes'][2]['category']);
|
||||||
|
$this->assertEquals('1', $metadata['notes'][2]['priority']);
|
||||||
|
$this->assertEquals('user login', $metadata['notes'][2]['content']);
|
||||||
|
|
||||||
|
// test for "baz" metadata
|
||||||
|
$this->assertTrue($catalogue->defines('baz', 'domain1'));
|
||||||
|
$metadata = $catalogue->getMetadata('baz', 'domain1');
|
||||||
|
$this->assertNotEmpty($metadata);
|
||||||
|
$this->assertCount(2, $metadata['notes']);
|
||||||
|
|
||||||
|
$this->assertEquals('x', $metadata['notes'][0]['id']);
|
||||||
|
$this->assertEquals('x_content', $metadata['notes'][0]['content']);
|
||||||
|
|
||||||
|
$this->assertEquals('target', $metadata['notes'][1]['appliesTo']);
|
||||||
|
$this->assertEquals('quality', $metadata['notes'][1]['category']);
|
||||||
|
$this->assertEquals('Fuzzy', $metadata['notes'][1]['content']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,15 @@
|
|||||||
<target>bar</target>
|
<target>bar</target>
|
||||||
</segment>
|
</segment>
|
||||||
</unit>
|
</unit>
|
||||||
|
<unit id="uqWglk0">
|
||||||
|
<notes>
|
||||||
|
<note id="x">x_content</note>
|
||||||
|
<note appliesTo="target" category="quality">Fuzzy</note>
|
||||||
|
</notes>
|
||||||
|
<segment>
|
||||||
|
<source>baz</source>
|
||||||
|
<target>biz</target>
|
||||||
|
</segment>
|
||||||
|
</unit>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
Reference in New Issue
Block a user