Автоматически исключать строки - 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 может их обрабатывать.