Odoo 14模块自动更新时如何实现翻译内容的自动更新/加载?
Odoo.sh 自定义模块翻译自动更新解决方案
问题根因
你之前编写的post_init_hook仅执行了语言安装逻辑,没有触发自定义模块的翻译重载,且overwrite=False参数不会覆盖已存在的翻译项,因此无法生效。
可用实现方案
方案1:优化post_init_hook逻辑
直接调用Odoo底层的翻译加载接口,不需要走transient model(向导模型,这也是你之前出现瞬态模块状态重置警告的原因之一),代码参考如下:
# coding: utf-8 from odoo import api, SUPERUSER_ID from odoo.tools import reload_translations def post_init_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) # 1. 确认目标语言已安装,未安装则先执行安装逻辑 target_lang = 'de_DE' installed_lang = env['res.lang'].search([('code', '=', target_lang), ('active', '=', True)]) if not installed_lang: env['res.lang'].load_lang(target_lang) # 2. 重载指定自定义模块的翻译,overwrite设为True才会覆盖现有翻译 # 把your_custom_module替换为你自己的自定义模块标识 reload_translations(cr, target_lang, ['your_custom_module'], overwrite=True) # 若需要更新所有已安装模块的翻译,可替换上一行代码为: # reload_translations(cr, target_lang, None, overwrite=True)
方案2:配置Odoo.sh启动参数(更轻量化)
Odoo.sh支持通过项目配置文件设置启动参数,直接在你项目根目录的odoo.cfg里添加以下配置,每次构建启动时就会自动重载指定语言的翻译:
load_language = de_DE overwrite_existing_translations = True
注意事项
- 若仅需要更新自定义模块的翻译,不要使用全局翻译重载逻辑,避免覆盖Odoo官方模块的手动翻译修改
- 测试阶段可将overwrite设为True,上线后如果存在用户手动修改翻译项的场景,可根据需求调整为False,仅加载新增的翻译项
内容的提问来源于stack exchange,提问作者BerDev
相关产品推荐
相关产品推荐

