У меня есть документ XLIFF, который выглядит следующим образом:
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" srcLang="en-US" version="2.0" xml:space="preserve">
<file canResegment="no" id="Test_x0020_File">
<unit canResegment="no" id="6TkImOYdyao" type="DocumentState">
<originalData>
<data id="generic_1">
<Style FlowDirection="LeftToRight" LeadingMargin="0" TrailingMargin="0" FirstLineMargin="0" /></Style>
</data>
<data id="span_2">
<Style FontFamily="Arial" FontSize="21" FontIsBold="True" /></Style>
</data>
</originalData>
<segment canResegment="no">
<source>
<pc id="block_0">
<ph dataRef="generic_1" id="generic_1"/>
<pc dataRefStart="span_2" id="span_2">Correct!</pc>
</pc>
</source>
</segment>
</unit>
Я хочу использовать объектную модель XLIFF 2.0 (https://github.com/Microsoft/XLIFF2-Object-Model) для выполнения следующих действий:
- Считать значение элемента «Источник» (в этом фрагменте это будет слово «Исправить!»)
- Отправить значение переводчику машинного языка (Bing, Google и др. * 1029). *. - У меня все хорошо, только для объяснений)
- Запишите полученное значение обратно в XLIFF в качестве целевого элемента (вот где я застрял)
Я думаю, что с использованием вышеупомянутого «вспомогательного класса» было бы проще, чем кодировать решение XMLReader / XMLWriter.
Я посмотрел примеры, включенные в модель на странице GitHub, но Я не уверен, как добавить нужное значение (переведенный текст) обратно в существующий файл в качестве целевого элемента.
Вот что у меня есть для # 1 - я предполагаю, что есть лучший способ сделать это как код просто идет по дереву, пока не найдет «PlainText», который Значение, которое я хочу получить от исходного элемента:
//Processing for XLF file...
string file = "F:\\Projects\\Translate\\Test File.xlf";
using (IO.FileStream stream = new IO.FileStream(file, IO.FileMode.Open, IO.FileAccess.Read))
{
XliffDocument document;
XliffReader reader;
reader = new XliffReader();
document = reader.Deserialize(stream);
bool checkIfSource = false;
foreach (XliffElement g in document.CollapseChildren<XliffElement>())
{
if (g is Source)
{
checkIfSource = true;
}
if (g is PlainText)
{
if (checkIfSource == true)
{
PlainText pt = (PlainText)g;
//Call code to get translation
//To Do: Insert translated text back into XLIFF document
}
}
Хотя подход работает для получения значения, я не думаю, что этого достаточно для получения идентификатора устройства и т. д. c. что мне нужно было бы поместить обратно в файл. Как только я получу нужное значение, как мне добавить переведенный текст в качестве целевого элемента обратно в сегмент в Единице?
Все идеи приветствуются и заранее благодарны -
Тор