Что такое плейсхолдеры применительно к ТМ
Если вы ни разу не сталкивались с регулярными выражениями и плейсхолдерами, такое определение из справки Smartcat может и не помочь:
Плейсхолдеры — это переменные, которыми можно заменить в тексте определенное содержимое: названия, числа, даты, изображения и т. д.
Для наглядности приведу два примера из своей практики.
Текст, извлеченный из инженерных форматов
При извлечении текста, например, из AutoCAD, информация о форматировании и специальных символах записывается не в виде тегов, а в виде последовательности символов непосредственно в строке. Примеры приведены ниже; в правом столбце показано, как соответствующая строка выглядит на чертеже.%%UEQUIPMENT NAME PLATE | EQUIPMENT 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.- Скопируем текст на перевод в файл INPUT.TXT в рабочей папке с утилитой XM.EXE.
Вид скрипта – файл RE.PAR.
[startEntity]
@bof
@eol
@eof
>
<
&
@q
'
[stopEntity]
[startMarkup]
<?xml version="1.0" encoding="utf-8"?><div><p>
</p><p>
</p></div>
>
<
&
"
'
[Options]
syncMarkup = trueВид пакетного файла.
xm -f input.txt -o. -p re.par
ren .input.txt output.xml- Вызовем утилиту xMarkup с помощью сформированного файла BAT.
- Результат (файл OUTPUT.XML) готов к загрузке в Smartcat.
Способ первый. Определение плейсхолдеров встроенными функциями Smartcat
- Загрузим результат (файл OUTPUT.XML) в нужный проект в Smartcat. Отметим пункт Использовать плейсхолдеры для импорта переменных и перейдем по ссылке Настройки плейсхолдеров.
Добавим нужные нам выражения для определения плейсхолдеров в предусмотренную для этого строку и нажмем кнопку Добавить
(%%.)|(\\[A-Z][0-9];)+|([0-9]*[A-Z]+[0-9]+[A-Z0-9]*)
Способ второй. Разметка плейсхолдеров с помощью программы xMarkup
Необходимость конвертировать исходный текст в XML подсказывает другое решение: превратить задаваемые регулярными выражениями последовательности в то, что Smartcat будет воспринимать как тэги.- Дополним файл скрипта по одной строке в разделах [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>
>
<
&
"
'
<span@spclass=@q@start@q/>
[Options]
syncMarkup = true - Загрузим результат (файл OUTPUT.XML) в Smartcat.
-
Возвращаясь к подстановке нечетких соответствий, отметим, что в этом случае заданные регулярными выражениями последовательности подставляются из текущего сегмента, а не из сохраненного в ТМ. Соответственно, значительно возрастает скорость перевода с полной защитой соответствующих данных от непреднамеренного изменения.
Возвращение исходного форматирования текста после перевода
По окончанию перевода подвергнем выгруженный из Smartcat файл обратному преобразованию с помощью утилиты xMarkup.Вид скрипта (присвоим ему имя RE_CLEAN.PAR)
[startEntity]
<span@spclass=@q
@q@sp/>
@regexp("^[\s]+")
@regexp("<((\?.+\?)|p|(\/)*div)>(\s)*")
</p>
>
<
&
"
'
[stopEntity]
[startMarkup]
@null
@null
@null
@null
@nl
>
<
&
@q
'
[Options]
syncMarkup = true
AddNewLine = false
Вид пакетного файла
copy output(ru).xml output.txtxm -f output.txt -o. -p re_clean.par