web (tagged with `openerp-web`) translations are loaded in the backend, in
`odoo.addons.web.controllers.main.WebClient.translation(mods=None, lang=None)`
method (through `/web/webclient/translations` controller).
In website, the controller `/website/translations` is called used, fetching
the translations from modules with the (fragile) clause `name ilike 'website'`
This commit fixes two bugs:
1. Install `website_sale`, activate discussion on products
-> the chatter is not translated as the portal translations not loaded in the
`/website/translations` controller
2. Install `helpdesk` but not `website`, go to portal view of a ticket
-> the heldesk chatter is not translated as the `/website/translations`
controller is not called (only provided by the website module)
This patch implements a modular approach to translate the web resources of the
right modules only.
The controller /website/translation is moved to http_routing and each module
override the new _get_translation_frontend_modules_domain method to adds its
translatable module
Closes #23618
Fixes #23610
24 lines
829 B
Python
24 lines
829 B
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import odoo
|
|
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.osv import expression
|
|
from odoo.addons.web.controllers.main import WebClient, Home
|
|
|
|
class Routing(Home):
|
|
|
|
@http.route('/website/translations', type='json', auth="public", website=True)
|
|
def get_website_translations(self, lang, mods=None):
|
|
Modules = request.env['ir.module.module'].sudo()
|
|
IrHttp = request.env['ir.http'].sudo()
|
|
domain = IrHttp._get_translation_frontend_modules_domain()
|
|
modules = Modules.search(
|
|
expression.AND([domain, [('state', '=', 'installed')]])
|
|
).mapped('name')
|
|
if mods:
|
|
modules += mods
|
|
return WebClient().translations(mods=modules, lang=lang)
|