You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
2.4 KiB
Python

8 months ago
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import base64
import logging
import operator
from tempfile import TemporaryFile
from os.path import splitext
from odoo import api, fields, models, tools, sql_db, _
from odoo.exceptions import UserError
from odoo.tools.translate import TranslationImporter
_logger = logging.getLogger(__name__)
class BaseLanguageImport(models.TransientModel):
_name = "base.language.import"
_description = "Language Import"
name = fields.Char('Language Name', required=True)
code = fields.Char('ISO Code', size=6, required=True,
help="ISO Language and Country code, e.g. en_US")
data = fields.Binary('File', required=True, attachment=False)
filename = fields.Char('File Name', required=True)
overwrite = fields.Boolean('Overwrite Existing Terms',
default=True,
help="If you enable this option, existing translations (including custom ones) "
"will be overwritten and replaced by those in this file")
def import_lang(self):
Lang = self.env["res.lang"]
for overwrite, base_lang_imports in tools.groupby(self, operator.itemgetter('overwrite')):
translation_importer = TranslationImporter(self.env.cr)
for base_lang_import in base_lang_imports:
if not Lang._activate_lang(base_lang_import.code):
Lang._create_lang(base_lang_import.code, lang_name=base_lang_import.name)
try:
with TemporaryFile('wb+') as buf:
buf.write(base64.decodebytes(base_lang_import.data))
fileformat = splitext(base_lang_import.filename)[-1][1:].lower()
translation_importer.load(buf, fileformat, base_lang_import.code)
except Exception as e:
_logger.exception('File unsuccessfully imported, due to format mismatch.')
raise UserError(
_('File %r not imported due to format mismatch or a malformed file.'
' (Valid formats are .csv, .po, .pot)\n\nTechnical Details:\n%s') % \
(base_lang_import.filename, tools.ustr(e))
)
translation_importer.save(overwrite=overwrite)
return True