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二次開發公司

參考文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM