Files
odoo_source/addons/transifex/models/ir_translation.py
T
Xavier Morel de590816d8 [FIX] *: deprecated access to url_ utilities through werkzeug root
In 0.15 accessing werkzeug.urls functions directly through werkzeug
is deprecated, the shortcut will be removed in the eventual werkzeug
1.0.

Fix existing uses of these shortcuts. Also cleanup some imports when
they're not far from a werkzeug* import being altered.
2020-02-04 12:42:35 +00:00

87 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from configparser import ConfigParser
from os.path import join as opj
import os
import werkzeug.urls
import odoo
from odoo import models, fields
class IrTranslation(models.Model):
_inherit = 'ir.translation'
transifex_url = fields.Char("Transifex URL", compute='_get_transifex_url')
def _get_transifex_url(self):
""" Construct transifex URL based on the module on configuration """
# e.g. 'https://www.transifex.com/odoo/'
base_url = self.env['ir.config_parameter'].sudo().get_param('transifex.project_url')
tx_config_file = ConfigParser()
tx_sections = []
for addon_path in odoo.addons.__path__:
tx_path = opj(addon_path, '.tx', 'config')
if os.path.isfile(tx_path):
tx_config_file.read(tx_path)
# first section is [main], after [odoo-11.sale]
tx_sections.extend(tx_config_file.sections()[1:])
# parent directory ad .tx/config is root directory in odoo/odoo
tx_path = opj(addon_path, os.pardir, '.tx', 'config')
if os.path.isfile(tx_path):
tx_config_file.read(tx_path)
tx_sections.extend(tx_config_file.sections()[1:])
if not base_url or not tx_sections:
self.update({'transifex_url': False})
else:
base_url = base_url.rstrip('/')
# will probably be the same for all terms, avoid multiple searches
translation_languages = list(set(self.mapped('lang')))
languages = self.env['res.lang'].with_context(active_test=False).search(
[('code', 'in', translation_languages)])
language_codes = dict((l.code, l.iso_code) for l in languages)
# .tx/config files contains the project reference
# using ini files like '[odoo-master.website_sale]'
translation_modules = set(self.mapped('module'))
project_modules = {}
for module in translation_modules:
for section in tx_sections:
tx_project, tx_mod = section.split('.')
if tx_mod == module:
project_modules[module] = tx_project
for translation in self:
if not translation.module or not translation.src or translation.lang == 'en_US':
# custom or source term
translation.transifex_url = False
continue
lang_code = language_codes.get(translation.lang)
if not lang_code:
translation.transifex_url = False
continue
project = project_modules.get(translation.module)
if not project:
translation.transifex_url = False
continue
# e.g. https://www.transifex.com/odoo/odoo-10/translate/#fr/sale/42?q=text'Sale+Order'
translation.transifex_url = "%(url)s/%(project)s/translate/#%(lang)s/%(module)s/42?q=%(src)s" % {
'url': base_url,
'project': project,
'lang': lang_code,
'module': translation.module,
'src': "text:'" + werkzeug.urls.url_quote_plus(
translation.src[:50].replace("\n", "").replace("'", "")
) + "'",
}