Odoo12-翻譯重寫-個性化模塊覆蓋源碼字段的翻譯(i18n)

場景

當我們有一個字段

# 源碼 analytic 模塊
"""py代碼"""
code = fields.Char(string='Reference', index=True, track_visibility='onchange')

"""po代碼"""
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_account__code
msgid "Reference"
msgstr "參考"

現在我們需要將Reference翻譯成 “編碼參照”

# 個性化 new_module 模塊
"""py代碼"""
# 繼承_get_import_cursor方法 將繼承模塊的翻譯替換 啓用
class IrTranslation(models.Model):
    _inherit = 'ir.translation'

    def _get_import_cursor(self):
        context = self._context.copy()
        context['overwrite'] = True
        self = self.with_context(context)
        return super(IrTranslation, self)._get_import_cursor()

"""po代碼 覆蓋原翻譯"""
#. module: analytic
#: model:ir.model.fields,field_description:analytic.field_account_analytic_account__code
msgid "Reference"
msgstr "編碼參照"

其實這個與我們config文件中的 --i18n-overwrite => config[‘overwrite_existing_translations’] 的配置內容相同。

這樣處理後,我們需要升級我們的個性化模塊 new_module ,升級完成後,翻譯覆蓋成功。
值得注意的是:1. 加載翻譯不會生效 2. 升級模塊後翻譯覆蓋成功,但是如果再次加載翻譯,覆蓋的翻譯會被還原。

討論:如何將源碼的翻譯替換掉,並且還能拿持久化,如果有好的建議請您指點!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章