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二次开发公司

参考文章

猜你喜欢

转载自www.cnblogs.com/odoo12/p/12499215.html
今日推荐