Odoo-如何翻译javascript文件中的字符串

2022-03-12 00:00:00 javascript openerp odoo-10

我正在为缺乏对做Javascript的理解而苦苦挣扎。Odoo文档非常糟糕,我有另一个关于这个主题的问题,这里没有答案:Odoo10 - How to do javascript

我希望我在这件事上会有更多的运气。

我现在尝试做的事情:

var _t = null;
odoo.define('mymodule.translate', function (require) {
"use strict";
    var translation = require('web.translation');
    _t = translation._t;
    console.log("_t assigned");
});

A视图:

app.categoriesView = Backbone.View.extend({
    tagName: 'div',
    className: 'categoriesView',
    template: _.template($('#categories_list_template').html()),
    initialize: function() {
        this.title = _t('OUR PRODUCTS');
        console.log("Initilized title: "+this.title);
    },
});

PO文件:

#. module: mymodule
#: code:addons/mymodule/static/js/views.js:8
#, python-format
msgid "OUR PRODUCTS"
msgstr "PRODUKTI"

我没有收到任何错误,Firebug控制台仅显示:

_t assigned
Initilized title: OUR PRODUCTS

这样字符串就不会被翻译。我做错了什么?


解决方案

以防有人也遇到这个问题,并且非常确定她/他做的都是正确的,这里有一个提示,可以帮助我解决问题:

当Odoo lazy通过URL/WebSite/Translations/加载JavaScript的翻译时,您可以很容易地监控您的翻译是否在响应JSON数据中可用。在我的情况下,它们不是,所以我跟踪了url的踪迹。

最后,我所要做的就是将ir.http的一个子项添加到我的模块中,该模块将模块名添加到翻译响应中:

# -*- coding: utf-8 -*-
from odoo import models


class IrHttp(models.AbstractModel):
    _inherit = 'ir.http'

    @classmethod
    def _get_translation_frontend_modules_name(cls):
        mods = super(IrHttp, cls)._get_translation_frontend_modules_name()
        return mods + ['MyModuleName']

这一简单步骤将我的模块添加到Web请求响应的模块列表中,并交付所有翻译后的字符串。

相关文章