本系列背景介绍

Odoo 是一个基于Python语言构建的开源软件,面向企业应用的CRM,ERP等领域,其目标是对标SAP,Oracle等大型软件提供商,但却通过仅仅一个平台满足企业所有管理的业务需求。

本系列文章针对Odoo 14版,从系统安装,开发环境配置,代码结构,主要功能升级,源码赏析,Anodoo对Odoo的关键扩展等角度,预先给大家介绍即将在2020年发布的这一最新版本。

本篇概述

       Odoo在本地化方面非常成熟,一套系统,不同国家不同语言都可以使用。针对系统中保存的数据,都可以实现多语言支持。本文在介绍Odoo14的时候,同时将这个体系向大家做一个介绍。

Odoo官方是怎么做好本地化工作

Odoo已经发展十几年,具备非常成熟的架构和功能。在本地化方面也是非常成熟的,中国的用户完全不用担心。现有包括官方的,以及中国多个社区现有的翻译成果已经可以很好地支持中文,如果自己定制,还可以基于Odoo的翻译架构轻松地进一步优化。Anodoo的目标之一就是基于Odoo,通过翻译优化,定制出一个完全面向国人的CRM,除了操作习惯,完全的中文化也是之一。

Odoo的官方本地化工作基于Transifex。关于Transifex,具体请访问:http://www.transifex.com。(建议注册和登录体验一下)。目前在Transifex上的翻译工作有几千人,其中中文的翻译有近300人,足以看出Odoo在中国的发展。

如何参与到Odoo 14官方的翻译工作贡献中国人的力量

通过上图可以看到Odoo在上面维护了当前多个可用版本的本地化项目,包括2020年发布的Odoo14。具体地址是:https://www.transifex.com/odoo/odoo-master/ 。你可以点击翻译查看如何参与。有多种方式,包括注册和登录后在线翻译,也可以下载PO,并使用poedit等编辑工具进行修改和维护。

由于Transifex提供了和Github整合的方案,Odoo应该是将自己的Github库和Transifex进行了对接的。同时,从源码上,也看到Odoo和Gengo,Transifex等平台有对接的模块,有兴趣的可以好好研究,学习一下Odoo是如何做好本地化工作的。

如何在项目中做好Odoo本地化

由于Odoo是源码开放的免费产品,所以很多人都会基于源码发布,或多或少都会做一些定制。那么针对中文的翻译可以说是很重要的一环。

那如何做好Odoo的中文翻译呢,参考我的Anodoo项目,我会参与到Odoo官方的翻译项目中,这样可以将我项目中的一些翻译提交到官网,同时,为了确保那些未被官方收录的翻译能应用在自己项目的上,所以会在Transifex上创建一个自己的翻译项目,维护好自己的PO文件,供Anodoo的使用者使用。

如果大家使用Odoo13,除了使用官方已经随产品发布提供的PO文件之外,也可以到Transifex中下载最新的包,通过文本比较工具,快速将好的翻译同步到自己的项目PO中,并保持半年或一年一次的同步频率。自己的项目中一旦修改了PO文件,就需要维护好这些文件了。

项目中对于一些翻译的修改还可以通过直接后台修改记录(ir_translation)的方式直接修改。这种修改的好处是快捷,但缺点是需要备份。

总结一下,最好的办法,是平时在后台数据库即时修改,并定期将数据库做了更新的部分定义同步PO文件,也可以将官方和中国其他平台社区提供的PO改进一并同步到自己的PO中,在一并更新到自己的系统。Anodoo由于是对外提供的CRM产品,所以会基于这个方法,同步维护好这些PO,从而实现在官方的基础上,对中文翻译改进。

Odoo的本地化设置

Odoo的本地化设置功能是非常丰富的。包括设置系统加载支持的语言,如英语,汉语等。可以通过多种方式如CSV,PO等导入翻译文件,也可以导出进行编辑。修改后,再导入。可以通过“已翻译术语”,查看所有的翻译记录,并如上文所提到的,在这里快捷修改翻译中文。

针对使用者,Odoo在个人喜好中可以修改自己的语言。管理员可以设置所有用户的默认语言为汉语,也可以在用户管理中设置其他单个用户的不同语言。

       针对对外发布的网站,同样可以设置网站可以使用那些语言发布。对于多语言的网站,访问者通过切换语言,可以查看自己喜欢的语言版本。这个可以通过Odoo面向全球一百多个国家的官网查看使用效果。

Odoo本地化的相关源码

Odoo的模块化做的非常好,同样,在每一个模块下的i18n目录,都提供了不同语言的翻译文件,如中文的zh_CN.po文件。针对PO的文件格式,这里不重点描述。Odoo会通过注释,将翻译对应哪个模块Module,哪个模型Model,哪个字段Field等都进行备注,所以,开发人员可以按照这个格式去查找,或者创建翻译条目。

以下是一段PO代码,便于你的理解

#. module: crm
#: model:ir.model.fields.field_description:crm.field_crm_lead_expected_revenue
msgid “Prorated Revenue”
msgstr “按比例分摊收入”
在base模块中,Odoo通过ir_translation.py对翻译的所有条目进行管理,也就是系统会将PO中的数据导入到这里,然后在前台渲染是通过同步到内存后进行快速读取。Anodoo的做法是针对后台修改的记录,都会在这个表新增的标注字段上做好标注,并定期将这些数据同步到PO中,再随版本发布或对外单独提供更新。

Odoo同样,提供了针对Gengo,Transifex的扩展,从而实现和这些平台的对接,有兴趣的可以具体研究。

结语

       Odoo的中文化非常成熟,这也解除了国人使用这一国外开源产品的顾虑。中国人使用外国产品,如何做好中文化是基础,所以这也是为什么把这个主题放在系列的第三篇文章中介绍,希望对你们有帮助。