Как добавить цель в файл XLIFF, используя объектную модель XLIFF 2.0? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть документ 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) для выполнения следующих действий:

  1. Считать значение элемента «Источник» (в этом фрагменте это будет слово «Исправить!»)
  2. Отправить значение переводчику машинного языка (Bing, Google и др. * 1029). *. - У меня все хорошо, только для объяснений)
  3. Запишите полученное значение обратно в 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. что мне нужно было бы поместить обратно в файл. Как только я получу нужное значение, как мне добавить переведенный текст в качестве целевого элемента обратно в сегмент в Единице?

Все идеи приветствуются и заранее благодарны -

Тор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...