## 国际化
每个模块可以在i18n目录提供自己的翻译,通过文件命名为lang.po,郎是语言区域设置代码,或语言和国家的不同组合时(如pt.po或pt_br。PO)。翻译将自动加载的所有可用语言Odoo。开发商总是用英语创造一个模块时,然后出口模块上使用的锅口特征Odoo gettext(设置翻译进出口出口翻译不指定语言),以创建模块模板锅文件,然后导出翻译PO文件。许多IDE的编辑和合并订单/锅文件插件或模式。
Tip
GNU gettext格式(便携式 对象)用Odoo集成到发射台,使其成为一个在线协同翻译平台。
~~~ tree
|- idea/ # The module directory
|- i18n/ # Translation files
| - idea.pot # Translation Template (exported from Odoo)
| - fr.po # French translation
| - pt_BR.po # Brazilian Portuguese translation
| (...)
~~~
Tip
默认情况下,Odoo锅出口仅提取物在Python代码在XML文件或内部字段定义的标签,但任何Python字符串可以翻译这种方式,它与周围的` OpenERP功能。_() `(例如` _(“Label”)`)
练习
翻译模块
选择你的Odoo安装第二语言。翻译你的模块利用Odoo设施。
1. 创建一个目录 `openacademy/i18n/`
2. 安装任何你想要的语言 ( 行政翻译的官方翻译)
3. 同步翻译的术语(行政翻译应用同步翻译)
4. 创建一个模板翻译文件,通过导出(管理翻译-导入/导出翻译)而不指定语言,保存在 `openacademy/i18n/`
5. 通过导出(行政管理翻译、导入/导出翻译)和指定一个翻译文件,创建一个翻译文件。把它保存在 `openacademy/i18n/`
6. 打开输出文件(翻译有一个基本的文本编辑器或专用PO文件编辑器如[ poedit ](http://poedit.net/)和翻译失踪
7. 在 `models.py`,为函数添加一个导入语句 `openerp._` 标记丢失字符串翻译
8. 重复3-6步骤
*openacademy/models.py*
~~~ python
# -*- coding: utf-8 -*-
from datetime import timedelta
from openerp import models, fields, api, exceptions, _
class Course(models.Model):
_name = 'openacademy.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"))
~~~