mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-25 10:12:06 +02:00
Initial commit: Core packages
This commit is contained in:
commit
12c29a983b
9512 changed files with 8379910 additions and 0 deletions
|
|
@ -0,0 +1,85 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import werkzeug.urls
|
||||
from configparser import ConfigParser
|
||||
from os import pardir
|
||||
from os.path import isfile, join as opj
|
||||
|
||||
import odoo
|
||||
from odoo import models, tools
|
||||
|
||||
|
||||
class TransifexTranslation(models.AbstractModel):
|
||||
_name = "transifex.translation"
|
||||
_description = "Transifex Translation"
|
||||
|
||||
@tools.ormcache()
|
||||
def _get_transifex_projects(self):
|
||||
""" get the transifex project name for each module
|
||||
|
||||
.tx/config files contains the project reference
|
||||
first section is [main], after '[odoo-16.sale]'
|
||||
|
||||
:rtype: dict
|
||||
:return: {module_name: tx_project_name}
|
||||
"""
|
||||
tx_config_file = ConfigParser()
|
||||
projects = {}
|
||||
for addon_path in odoo.addons.__path__:
|
||||
for tx_path in (
|
||||
opj(addon_path, '.tx', 'config'),
|
||||
opj(addon_path, pardir, '.tx', 'config'),
|
||||
):
|
||||
if isfile(tx_path):
|
||||
tx_config_file.read(tx_path)
|
||||
for sec in tx_config_file.sections()[1:]:
|
||||
if len(sec.split(":")) != 6:
|
||||
# old format ['main', 'odoo-16.base', ...]
|
||||
tx_project, tx_mod = sec.split(".")
|
||||
else:
|
||||
# tx_config_file.sections(): ['main', 'o:odoo:p:odoo-16:r:base', ...]
|
||||
_, _, _, tx_project, _, tx_mod = sec.split(':')
|
||||
projects[tx_mod] = tx_project
|
||||
return projects
|
||||
|
||||
def _update_transifex_url(self, translations):
|
||||
""" Update translations' Transifex URL
|
||||
|
||||
:param translations: the translations to update, may be a recordset or a list of dicts.
|
||||
The elements of `translations` must have the fields/keys 'source', 'module', 'lang',
|
||||
and the field/key 'transifex_url' is updated on them.
|
||||
"""
|
||||
|
||||
# e.g. 'https://www.transifex.com/odoo/'
|
||||
base_url = self.env['ir.config_parameter'].sudo().get_param('transifex.project_url')
|
||||
if not base_url:
|
||||
return
|
||||
base_url = base_url.rstrip('/')
|
||||
|
||||
res_langs = self.env['res.lang'].search([])
|
||||
lang_to_iso = {l.code: l.iso_code for l in res_langs}
|
||||
if not lang_to_iso:
|
||||
return
|
||||
|
||||
projects = self._get_transifex_projects()
|
||||
if not projects:
|
||||
return
|
||||
|
||||
for translation in translations:
|
||||
if not translation['source'] or translation['lang'] == 'en_US':
|
||||
continue
|
||||
|
||||
lang_iso = lang_to_iso.get(translation['lang'])
|
||||
if not lang_iso:
|
||||
continue
|
||||
|
||||
project = projects.get(translation['module'])
|
||||
if not project:
|
||||
continue
|
||||
|
||||
# e.g. https://www.transifex.com/odoo/odoo-16/translate/#fr_FR/sale/42?q=text:'Sale+Order'
|
||||
# 42 is an arbitrary number to satisfy the transifex URL format
|
||||
source = werkzeug.urls.url_quote_plus(translation['source'][:50].replace("\n", "").replace("'", "\\'"))
|
||||
source = f"'{source}'" if "+" in source else source
|
||||
translation['transifex_url'] = f"{base_url}/{project}/translate/#{lang_iso}/{translation['module']}/42?q=text%3A{source}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue