开发odoo系统模块的时候,如果一开始就有国际化的需求,无论是模型的定义还是视图的构建,建议使用英语作为第一语言:一方面,英语本身就是一种国际化的语言;另一方面,odoo内置模型字段描述如Created by和Created on都是用英文,如果我们将中文作为第一语言,就会出现原始.po语言文件中既有中文,又有英文的尴尬场景,还需要再做一次从中文到中文的翻译。poedit截图如下:

odoo的国际化翻译大致有以下几个步骤:
- 导出模块.po文件
- 使用poedit工具进行词条翻译
- 将翻译后的.po文件放到模块的i18n文件夹下,然后执行语言添加操作
导出模块.po文件
我们打开开发者模式,通过“设置-翻译-导入/导出-导出翻译”进入如下弹窗界面:

语言选择简体中文,格式选择PO单据,然后选择我们要导出的应用,执行导出操作会得到一个zh_CN.po文件。
使用poedit工具进行词条翻译
1.下载poedit
2.安装后使用poedit翻译我们导出的po文件中的词条,如下截图:

最终效果展示
1.在开发的模块根目录中创建i18n目录,然后把翻译过保存之后的zh_CN.po文件放到i18n目录中。
2.模块在安装的时候会自动加载i18n目录中的po文件,所以在安装之后就会看到翻译的效果,如下图:

3.模块在升级的时候是不会执行po文件的重载操作的,如果是在模块的开发过程中新添加的翻译,执行以下操作即可完成po文件的重载:通过“设置-翻译-语言”导航到如下界面

单击第一条数据“简体中文”,进入到表单页面,然后单击“启动及翻译”

勾线“覆盖现有术语”,然后单击“添加”,即可完成po文件的重载

跳过的坑
因为在模块名称中使用了短横杠odoo-logistics,导致国际化翻译这个步骤一直卡壳,为什么会这样呢?参考odoo框架源码,这里标记下代码位置:

模块名称改成odoo_logistics后,就正常了;一个模块命名问题导致的卡壳,虽然花费了不少时间,不过问题总算解决了。