-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create a new module to directly find a source term on Transifex This will not make translation easier but improve the collaboration and allow easily to find a source term.
- Loading branch information
Showing
7 changed files
with
157 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# -*- coding: utf-8 -*- | ||
# Part of Odoo. See LICENSE file for full copyright and licensing details. | ||
|
||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# -*- coding: utf-8 -*- | ||
# Part of Odoo. See LICENSE file for full copyright and licensing details. | ||
|
||
{ | ||
'name': 'Transifex integration', | ||
'version': '1.0', | ||
'summary': 'Add a link to edit a translation in Transifex', | ||
'category': 'Extra Tools', | ||
'description': | ||
""" | ||
Transifex integration | ||
===================== | ||
This module will add a link to the Transifex project in the translation view. | ||
The purpose of this module is to speed up translations of the main modules. | ||
To work, Odoo uses Transifex configuration files `.tx/config` to detec the | ||
project source. Custom modules will not be translated (as not published on | ||
the main Transifex project). | ||
The language the user tries to translate must be activated on the Transifex | ||
project. | ||
""", | ||
'data': [ | ||
'data/transifex_data.xml', | ||
'data/ir_translation_view.xml', | ||
], | ||
'depends': ['base'], | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<odoo> | ||
<record id="ir_translation_view_tree_transifex" model="ir.ui.view"> | ||
<field name="name">ir.translation.transifex</field> | ||
<field name="model">ir.translation</field> | ||
<field name="inherit_id" ref="base.view_translation_tree"/> | ||
<field name="arch" type="xml"> | ||
<field name="lang" position="after"> | ||
<field name="transifex_url" | ||
widget="link_button" | ||
string="Transifex" /> | ||
</field> | ||
</field> | ||
</record> | ||
|
||
<record id="ir_translation_dialog_view_tree_transifex" model="ir.ui.view"> | ||
<field name="name">ir.translation.transifex</field> | ||
<field name="model">ir.translation</field> | ||
<field name="inherit_id" ref="base.view_translation_dialog_tree"/> | ||
<field name="arch" type="xml"> | ||
<field name="lang" position="after"> | ||
<field name="transifex_url" | ||
widget="link_button" | ||
string="Transifex" /> | ||
</field> | ||
</field> | ||
</record> | ||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<odoo noupdate="1"> | ||
|
||
<record id="transifex_project_url" model="ir.config_parameter"> | ||
<field name="key">transifex.project_url</field> | ||
<field name="value">https://www.transifex.com/odoo</field> | ||
</record> | ||
|
||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# -*- coding: utf-8 -*- | ||
# Part of Odoo. See LICENSE file for full copyright and licensing details. | ||
|
||
from . import ir_translation |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
# -*- 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 | ||
|
||
from odoo import models, fields | ||
from odoo.modules.module import ad_paths | ||
|
||
|
||
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 ad_paths: | ||
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.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.source 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=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': werkzeug.url_quote_plus(translation.source[:50]), | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.