Автоматически исключать строки - Multilingual App Toolkit - PullRequest
0 голосов
/ 14 февраля 2019

При использовании Multilingual App Toolkit наши файлы resx и xlf содержат много мусорных , которые мы не хотим переводить (например, размер и расположение элемента управления).

VisualStudio .NET WinForms example with resx file

Есть ли способ автоматически исключить всю дополнительную информацию?

Если нет, то это единственный способ вручную просмотреть файл XLIFF с помощью многоязычногоРедактировать и изменить translatable на False?

Проблема еще хуже, если файл ресурса содержит изображения ...

enter image description here

1 Ответ

0 голосов
/ 26 февраля 2019

Через несколько дней после запроса я попытался задать тот же вопрос на официальной странице поддержки для Multilingual App Toolkit, но я также не получил ответа.

В качестве обходного пути к проблеме я написал скрипт на python, который устанавливает все свойства, отличные от .Text в файлах XLIFF, чтобы они отмечались как translate="No".Многоязычный редактор не имеет возможности установить «переводимый» как массовую операцию, и выполнение этого вручную заняло бы бесконечно.

#!/usr/bin/env python
from lxml import etree
import os


NEW_LINE = '\r\n'


def set_translatable(filepath):
    """
    Each string in the XLF file is set to translatable False unless
    it is the `.Text` attribute that we actually want translated.

    """
    doc = etree.parse(filepath)

    for d in doc.iter():
        if 'trans-unit' in d.tag:
            translate = False
            for k, v in d.items():
                if k == 'id':
                    if v.endswith('.Text'):
                        translate = True
            translate = 'yes' if translate else 'no'
            d.set('translate', translate)
    with open(filepath, 'w') as out_file:
        doc.write(out_file)


def main():
    cwd = os.getcwd()

    for subdir, dirs, files in os.walk(cwd):
        for file in files:
            if filepath.endswith('.xlf'):
                set_translatable(filepath)          


if __name__ == '__main__':
    main()

В Visual Studio мне также приходилось вручную открывать каждую форму и задаватьLocalizable свойство True, так что значения .Text сохраняются в соответствующем .resx, где Многоязычный набор инструментов приложения может их обрабатывать.

...