Odoo国际化翻译方法及示例介绍
Posted odoo12
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Odoo国际化翻译方法及示例介绍相关的知识,希望对你有一定的参考价值。
本文主要介绍了odoo国际化翻译使用的方法及示例
国际化翻译方法
每个模块的翻译文件放在该模块目录下i18n目录里。模块内相关字符串一般用英语写成,然后通过翻译模板导出功能(Settings ? Translations ? Import/Export ? Export Translation)导出一个翻译模板pot文件。翻译人员使用翻译软件(poedit)进行翻译后,产生对应语言po文件,再放入i18n目录下供odoo加载。po文件的文件名规则一般由对应语言缩写或语言_国家组成,如中文为zh.po或zh_CN.po
目录结构例
|- idea/ # The module directory
|- i18n/ # Translation files
| - idea.pot # Translation Template (exported from Odoo)
| - fr.po # French translation
| - pt_BR.po # Brazilian Portuguese translation
| (...)
翻译生成规则odoo默认对xml里的lable或py文件field里的string生成翻译或通过odoo._()函数, 即gettext函数生成翻译项。
翻译示例
为odoogoedu翻译中文
1 创建目录odoogoedu/i18n/
2 加载中文语言 ( Administration ? Translations ? Load an Official Translation) 添加中文(后续更新请勾选覆盖术语)
3 同步翻译术语 (Administration ? Translations ? Application Terms ? Synchronize Translations)选择中文生成对应的翻译条目,供导出使用(同时更新导出pot和po数据)(注意,如果只是改了模块中的翻译字符串,不需要更新模块,在这里同步即可,py文件需要重启)
4 导出模块翻译模板 ( Administration ? Translations -> Import/Export ? Export Translation) 选择空语言,模板
5 导出中文翻译文件 ( Administration ? Translations ? Import/Export ? Export Translation) 每次导出前先同步一下翻译术语
6 翻译po文件
7 在model.py中使用_() 函数包裹需要翻译的字符串重复2-6生成新的翻译段
odoo12中Synchronize Translations变为Generate Missing Terms,可以直接导出中文模板在poedit里翻译
odoogoedu/models.py
# -*- coding: utf-8 -*-
from datetime import timedelta
from odoo import models, fields, api, exceptions, _
class Course(models.Model):
_name = ‘odoogoedu.course‘
default = dict(default or {})
copied_count = self.search_count(
[(‘name‘, ‘=like‘, _(u"Copy of {}%").format(self.name))])
if not copied_count:
new_name = _(u"Copy of {}").format(self.name)
else:
new_name = _(u"Copy of {} ({})").format(self.name, copied_count)
default[‘name‘] = new_name
return super(Course, self).copy(default)
if self.seats < 0:
return {
‘warning‘: {
‘title‘: _("Incorrect ‘seats‘ value"),
‘message‘: _("The number of available seats may not be negative"),
},
}
if self.seats < len(self.attendee_ids):
return {
‘warning‘: {
‘title‘: _("Too many attendees"),
‘message‘: _("Increase seats or remove excess attendees"),
},
}
def _check_instructor_not_in_attendees(self):
for r in self:
if r.instructor_id and r.instructor_id in r.attendee_ids:
raise exceptions.ValidationError(_("A session‘s instructor can‘t be an attendee"))
补充说明
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。
翻译软件 https://poedit.net/
odoo官方模块翻译协作网站 https://www.transifex.com/odoo/public/
gettext简介: GNU gettext是翻译项目的重要一步,它提供了一个工作框架,由一些集成的工具和文档组成,帮助程序员、翻译人员和最终用户实现程序的国际化和本地化。用 Gettext的方式实现多语言得到了广泛的支持,著名的博客程序wordpress的国际化就是用的GNU gettext。大致原理: GNU gettext使用PO或MO文件来实现国际化和本地化。PO的意思是Portable Object,是一种文本结构,可以方便的由人们阅读和修改。MO是Machine Object的简写,MO文件是PO文件的二进制形态。一般来说,一个PO或MO文件对应于一种语言,如果一个程序要支持多种语言,每一种语言都需要自己 的PO或MO文件。
如何获得最好Odoo二次开发服务?星辉信息科技,专业Odoo二次开发公司
以上是关于Odoo国际化翻译方法及示例介绍的主要内容,如果未能解决你的问题,请参考以下文章