Автоматически исключать строки - Multilingual App Toolkit

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

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

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

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

2 ответа

В моем случае я хотел игнорировать для каждого файла, поэтому это было полезно для меня: https://multilingualapptoolkit.uservoice.com/forums/231158-general/suggestions/13627704-add-ignore-exclude-filter-for-resx-файлы

Я в основном добавил

      <SuppressAutomaticLocalization>true</SuppressAutomaticLocalization>

в теге EmbeddedResource в файле .csproj, в результате чего:

      <ItemGroup>
  <EmbeddedResource Update="Properties\Authorization\Components_Actions.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Components_Actions.Designer.cs</LastGenOutput>
    <SuppressAutomaticLocalization>true</SuppressAutomaticLocalization>
  </EmbeddedResource>
...

Через несколько дней после запроса я попытался задать тот же вопрос на официальной странице поддержки для 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 где Multilingual App Toolkit может их обрабатывать.

Другие вопросы по тегам