def import_tmx(self, fileobj, langmap=None): origin = force_text(os.path.basename(fileobj.name)) storage = tmxfile.parsefile(fileobj) header = next(storage.document.getroot().iterchildren( storage.namespaced("header"))) source_language_code = header.get('srclang') source_language = self.get_language_code(source_language_code, langmap) languages = {} with self.writer() as writer: for unit in storage.units: # Parse translations (translate-toolkit does not care about # languages here, it just picks first and second XML elements) translations = {} for node in unit.getlanguageNodes(): lang, text = get_node_data(unit, node) translations[lang] = text if lang not in languages: languages[lang] = self.get_language_code(lang, langmap) try: source = translations.pop(source_language_code) except KeyError: # Skip if source language is not present continue for lang, text in translations.items(): writer.add_document( source_language=source_language, target_language=languages[lang], source=source, target=text, origin=origin, category=CATEGORY_FILE, )
def import_tmx(self, request, fileobj, origin=None, langmap=None, **kwargs): if not kwargs: kwargs = {"from_file": True} try: storage = tmxfile.parsefile(fileobj) except (SyntaxError, AssertionError): report_error(cause="Failed to parse") raise MemoryImportError(_("Failed to parse TMX file!")) header = next(storage.document.getroot().iterchildren( storage.namespaced("header"))) lang_cache = {} try: source_language = Language.objects.get_by_code( header.get("srclang"), lang_cache, langmap) except Language.DoesNotExist: raise MemoryImportError(_("Failed to find source language!")) found = 0 for unit in storage.units: # Parse translations (translate-toolkit does not care about # languages here, it just picks first and second XML elements) translations = {} for node in unit.getlanguageNodes(): lang_code, text = get_node_data(unit, node) if not lang_code or not text: continue language = Language.objects.get_by_code( lang_code, lang_cache, langmap) translations[language.code] = text try: source = translations.pop(source_language.code) except KeyError: # Skip if source language is not present continue for lang, text in translations.items(): self.update_entry( source_language=source_language, target_language=Language.objects.get_by_code( lang, lang_cache, langmap), source=source, target=text, origin=origin, **kwargs, ) found += 1 return found
def import_tmx(cls, request, fileobj, langmap=None, category=None, origin=None): from weblate.memory.tasks import update_memory_task if category is None: category = CATEGORY_FILE try: storage = tmxfile.parsefile(fileobj) except (SyntaxError, AssertionError) as error: report_error(error, request, prefix='Failed to parse') raise MemoryImportError(_('Failed to parse TMX file!')) header = next(storage.document.getroot().iterchildren( storage.namespaced("header"))) source_language_code = header.get('srclang') source_language = cls.get_language_code(source_language_code, langmap) languages = {} found = 0 for unit in storage.units: # Parse translations (translate-toolkit does not care about # languages here, it just picks first and second XML elements) translations = {} for node in unit.getlanguageNodes(): lang, text = get_node_data(unit, node) if not lang or not text: continue translations[lang] = text if lang not in languages: languages[lang] = cls.get_language_code(lang, langmap) try: source = translations.pop(source_language_code) except KeyError: # Skip if source language is not present continue for lang, text in translations.items(): update_memory_task.delay( source_language=source_language, target_language=languages[lang], source=source, target=text, origin=origin, category=category, ) found += 1 return found
def import_tmx(cls, request, fileobj, langmap=None, category=None, origin=None): from weblate.memory.tasks import update_memory_task if category is None: category = CATEGORY_FILE try: storage = tmxfile.parsefile(fileobj) except (SyntaxError, AssertionError) as error: report_error(error, request, prefix='Failes to parse') raise MemoryImportError(_('Failed to parse TMX file!')) header = next( storage.document.getroot().iterchildren( storage.namespaced("header") ) ) source_language_code = header.get('srclang') source_language = cls.get_language_code(source_language_code, langmap) languages = {} found = 0 for unit in storage.units: # Parse translations (translate-toolkit does not care about # languages here, it just picks first and second XML elements) translations = {} for node in unit.getlanguageNodes(): lang, text = get_node_data(unit, node) if not lang or not text: continue translations[lang] = text if lang not in languages: languages[lang] = cls.get_language_code(lang, langmap) try: source = translations.pop(source_language_code) except KeyError: # Skip if source language is not present continue for lang, text in translations.items(): update_memory_task.delay( source_language=source_language, target_language=languages[lang], source=source, target=text, origin=origin, category=category, ) found += 1 return found
def import_tmx(self, fileobj, langmap=None): origin = force_text(os.path.basename(fileobj.name)) storage = tmxfile.parsefile(fileobj) header = next( storage.document.getroot().iterchildren( storage.namespaced("header") ) ) source_language_code = header.get('srclang') source_language = self.get_language_code(source_language_code, langmap) languages = {} with self.writer() as writer: for unit in storage.units: # Parse translations (translate-toolkit does not care about # languages here, it just picks first and second XML elements) translations = {} for node in unit.getlanguageNodes(): lang, text = get_node_data(unit, node) translations[lang] = text if lang not in languages: languages[lang] = self.get_language_code(lang, langmap) try: source = translations.pop(source_language_code) except KeyError: # Skip if source language is not present continue for lang, text in translations.items(): writer.add_document( source_language=source_language, target_language=languages[lang], source=source, target=text, origin=origin, category=CATEGORY_FILE, )