关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

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生成翻译或通过openerp._()函数, 即gettext函数生成翻译项。   练习 为openacademy翻译中文 1 创建目录openacademy/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生成新的翻译段   openacademy/models.py
# -*- 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"))
  参考 https://www.odoo.com/documentation/8.0/howtos/backend.html#internationalization   i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。 翻译软件 https://poedit.net/ odoo官方模块翻译协作网站 https://www.transifex.com/odoo/public/  
转载请注明出处
分享到: 更多 (0)

评论 0