You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 06:39:04