Два варианта использования плейсхолдеров в Smartcat

Что такое плейсхолдеры применительно к ТМ
Если вы ни разу не сталкивались с регулярными выражениями и плейсхолдерами, такое определение из справки Smartcat может и не помочь:
Плейсхолдеры — это переменные, которыми можно заменить в тексте определенное содержимое: названия, числа, даты, изображения и т. д.

Для наглядности приведу два примера из своей практики.

Текст, извлеченный из инженерных форматов При извлечении текста, например, из AutoCAD, информация о форматировании и специальных символах записывается не в виде тегов, а в виде последовательности символов непосредственно в строке. Примеры приведены ниже; в правом столбце показано, как соответствующая строка выглядит на чертеже.
%%UEQUIPMENT NAME PLATEEQUIPMENT NAME PLATE (подчеркнутый текст)
TEMP.(%%DC)TEMP.(°C)
\A1;TYP.TYP. (с выравниванием надписи по центру)

Документация на промышленную электронику Walking arm (WA11) failure, XBF01DN.
Walking arm (WA11A) failure, XBF02DN.
Walking arm (WA12) failure, XBG09Q2.

Очевидно, что в обоих случаях крайне желательно, во-первых, защитить специальную информацию (которую можно определить как плейсхолдеры) от непреднамеренного изменения (например, при подстановке нечетких совпадений), и, во-вторых, сделать так, чтобы переводчик не отвлекался на не требующие перевода данные.

И то, и другое, достигается использованием регулярных выражений. К сожалению, в отличие от Memsource платформой Smartcat применение регулярных выражений для определения плейсхолдеров предусмотрено для ограниченного числа форматов (зато Smartcat не имеет в бесплатной версии ограничений на количество загружаемых файлов ни для фрилансеров, ни для LSP (Language Service Providers)). Одним из этих форматах является XML, достаточно удобный для того, чтобы в него преобразовывать списки строк (из форматов TXT и XLS(X) – в основном описанные специальные данные поступают именно в этих форматах).
Таким образом, при работе в Smartcat перед нами стоят две задачи: получить из списка строк файл XML и определить плейсхолдеры с помощью регулярных выражений.

Создание файла XML из списка строкВоспользуемся утилитой xMarkup.
  1. Скопируем текст на перевод в файл INPUT.TXT в рабочей папке с утилитой XM.EXE.
  2. Вид скрипта – файл RE.PAR. [startEntity]
    @bof
    @eol
    @eof
    >
    <
    &
    @q
    '
    [stopEntity]
    [startMarkup]
    <?xml version="1.0" encoding="utf-8"?><div><p>
    </p><p>
    </p></div>
    &gt;
    &lt;
    &amp;
    &quot;
    &apos;
    [Options]
    syncMarkup = true
  3. Вид пакетного файла.xm -f input.txt -o. -p re.par
    ren .input.txt output.xml
  4. Вызовем утилиту xMarkup с помощью сформированного файла BAT.
  5. Результат (файл OUTPUT.XML) готов к загрузке в Smartcat.


Способ первый. Определение плейсхолдеров встроенными функциями Smartcat
  1. Загрузим результат (файл OUTPUT.XML) в нужный проект в Smartcat.
    При загрузке файла XML в Smartcat выводится дополнительная панель.
    Отметим пункт Использовать плейсхолдеры для импорта переменных и перейдем по ссылке Настройки плейсхолдеров.
  2. Добавим нужные нам выражения для определения плейсхолдеров в предусмотренную для этого строку и нажмем кнопку Добавить(%%.)|(\\[A-Z][0-9];)+|([0-9]*[A-Z]+[0-9]+[A-Z0-9]*)
  3. Файл в редакторе Smartcat будет иметь следующий вид.
Данное встроенное в Smartcat решение закрывает только одну половину вопроса – защита специальных данных от непреднамеренного изменения. При этом при подстановке нечетких соответствий система вставляет значение не текущего плейсхолдера, а плейсхолдера из записанного в базу сегмента. Это крайне не удобно для переводчика, и ни о каком ускорении работы речи не идет.

Способ второй. Разметка плейсхолдеров с помощью программы xMarkupНеобходимость конвертировать исходный текст в XML подсказывает другое решение: превратить задаваемые регулярными выражениями последовательности в то, что Smartcat будет воспринимать как тэги.
  1. Дополним файл скрипта по одной строке в разделах [startEntity] и [startMarkup], использовав ту же маску регулярных выражений с определением, предусмотренным программой xMarkup.
    Вид скрипта [startEntity]
    @bof
    @eol
    @eof
    >
    <
    &
    @q
    '
    @regexp("((%%.)|(\\[A-Z][0-9\.]+;)+|([0-9]*[A-Z]+[0-9]+[A-Z0-9]*))")
    [stopEntity]
    [startMarkup]
    <?xml version="1.0" encoding="utf-8"?><div><p>
    </p><p>
    </p></div>
    &gt;
    &lt;
    &amp;
    &quot;
    &apos;
    <span@spclass=@q@start@q/>
    [Options]
    syncMarkup = true
  2. Загрузим результат (файл OUTPUT.XML) в Smartcat.
    Немного изменим настройки на выводимой при загрузке файла XML панели.
  3. Файл в редакторе будет выглядеть вот так.
    Возвращаясь к подстановке нечетких соответствий, отметим, что в этом случае заданные регулярными выражениями последовательности подставляются из текущего сегмента, а не из сохраненного в ТМ. Соответственно, значительно возрастает скорость перевода с полной защитой соответствующих данных от непреднамеренного изменения.


Возвращение исходного форматирования текста после переводаПо окончанию перевода подвергнем выгруженный из Smartcat файл обратному преобразованию с помощью утилиты xMarkup.
Вид скрипта (присвоим ему имя RE_CLEAN.PAR)[startEntity]
<span@spclass=@q
@q@sp/>
@regexp("^[\s]+")
@regexp("<((\?.+\?)|p|(\/)*div)>(\s)*")
</p>
&gt;
&lt;
&amp;
&quot;
&apos;
[stopEntity]
[startMarkup]
@null
@null
@null
@null
@nl
>
<
&
@q
'
[Options]
syncMarkup = true
AddNewLine = false
Smartcat при выгрузке перевода добавляет код языка в скобках в имя файла, однако такие имена файлов не обрабатываются утилитой xMarkup, поэтому пакетным файлом перед запуском утилиты уберем скобки из имени файла.
Вид пакетного файлаcopy output(ru).xml output.txt
xm -f output.txt -o. -p re_clean.par
Результат будет записан в файл .OUTPUT.TXT.