diff --git a/doc/reference/translations.rst b/doc/reference/translations.rst
index 81ec506df63..2acdaf48f67 100644
--- a/doc/reference/translations.rst
+++ b/doc/reference/translations.rst
@@ -37,7 +37,7 @@ translation tool like POEdit_ or by simply copying the template to a new file
called :file:`{language}.po`. Translation files should be put in
:file:`{yourmodule}/i18n/`, next to :file:`{yourmodule}.pot`, and will be
automatically loaded by Odoo when the corresponding language is installed (via
-:menuselection:`Settings --> Translations --> Load a Translation`)
+:menuselection:`Settings --> Translations --> Languages`)
.. note:: translations for all loaded languages are also installed or updated
when installing or updating a module
diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py
index 6fcd82354b6..050eba993ff 100644
--- a/odoo/addons/base/models/res_lang.py
+++ b/odoo/addons/base/models/res_lang.py
@@ -212,6 +212,20 @@ class Lang(models.Model):
langs = self.with_context(active_test=True).search([])
return sorted([(lang.code, lang.name) for lang in langs], key=itemgetter(1))
+ def toggle_active(self):
+ super().toggle_active()
+ # Automatically load translation
+ if len(self) == 1 and self.active:
+ return {
+ 'name': "Load a Translation",
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'base.language.install',
+ 'context': {'default_lang': self.code},
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'views': [[False, 'form']],
+ }
+
@api.model_create_multi
def create(self, vals_list):
self.clear_caches()
diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py
index 185e5a28dfa..711c46d4460 100644
--- a/odoo/addons/base/models/res_partner.py
+++ b/odoo/addons/base/models/res_partner.py
@@ -154,6 +154,7 @@ class Partner(models.Model):
ref = fields.Char(string='Reference', index=True)
lang = fields.Selection(_lang_get, string='Language', default=lambda self: self.env.lang,
help="All the emails and documents sent to this contact will be translated in this language.")
+ active_lang_count = fields.Integer(compute='_compute_active_lang_count')
tz = fields.Selection(_tz_get, string='Timezone', default=lambda self: self._context.get('tz'),
help="When printing documents and exporting/importing data, time values are computed according to this timezone.\n"
"If the timezone is not set, UTC (Coordinated Universal Time) is used.\n"
@@ -253,6 +254,11 @@ class Partner(models.Model):
for partner in self:
partner.display_name = names.get(partner.id)
+ def _compute_active_lang_count(self):
+ lang_count = len(self.env['res.lang'].get_installed())
+ for partner in self:
+ partner.active_lang_count = lang_count
+
@api.depends('tz')
def _compute_tz_offset(self):
for partner in self:
diff --git a/odoo/addons/base/views/res_lang_views.xml b/odoo/addons/base/views/res_lang_views.xml
index ee842a22188..7bd7c9954fe 100644
--- a/odoo/addons/base/views/res_lang_views.xml
+++ b/odoo/addons/base/views/res_lang_views.xml
@@ -5,16 +5,15 @@