【问题标题】:Odoo - How to translate strings in javascript fileOdoo - 如何翻译 javascript 文件中的字符串
【发布时间】:2017-05-10 12:21:58
【问题描述】:

我正在为对 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");
});

一个视图:

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

所以字符串不会被翻译。我做错了什么?

【问题讨论】:

  • 你应该使用console.log(_t("assigned"));
  • no.. 这个 console.log 就在那里,所以我知道“odoo.define(”成功完成。
  • 您是否将其添加到 backend_asset 模板中?
  • @CherifOdoo no.. 这是我正在做的“前端”..
  • 我不是字体专家,但在后端如果你想添加新的小部件或服装小部件,你需要将你的 js 添加到前端的后端资产模板中并且不知道。你到底在做什么,你是如何将你的 js 文件包含到 html 页面中的?当您检查元素时,是否有脚本标签包含您的 js 文件?

标签: javascript openerp odoo-10


【解决方案1】:

我的一般 javascript 问题仍然存在,但至少我的翻译工作正常。

这个人对我帮助最大: https://www.odoo.com/forum/help-1/question/8-0-how-does-javascript-translation-tool-works-openerp-t-96934

工作代码:

var _t = null;

odoo.define('mymodule', function (require) {
    "use strict";
    lang = $('input[name="website_lang"]').val(); //Added this input via qweb
    var core = require('web.core');
    var session = require('web.session'); _s = session;
    var utils = require('web.utils');
    translation = require('web.translation');
    var translationDataBase = new translation.TranslationDataBase();
    var dfd = $.Deferred();
    translationDataBase.load_translations(session, ['mymodule'], lang).done(function() {
        _t = translationDataBase.build_translation_function();
        dfd.resolve(_t);
    });
});

【讨论】:

    【解决方案2】:

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

    由于 Odoo 延迟通过 URL /website/translations/ 加载 JavaScript 翻译,您可以轻松监控您的翻译是否在响应 JSON 数据中可用。就我而言,他们不是,所以我跟踪了网址的踪迹。

    最后我要做的就是将 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']
    

    这个简单的步骤将我的模块添加到网络请求响应的模块列表中,并传递了我所有的翻译字符串。

    【讨论】:

    • 这里的@classmethod 是做什么用的,为什么它不在任何课程范围内?因为它肯定在课堂之外毫无意义
    • @Salek 缺少一些标签 - 我已经更正了格式。感谢您的提示。
    • 是的,我意识到了这一点,它也对我有用——这就是我给你投票的原因!顺便说一句,你有什么想法为什么它真的有效吗?为什么模块名称之前没有出现在模组列表中?
    • 到目前为止,我可以看到这是一个未记录的功能/要求。如果您进行全局搜索,几乎每个与前端相关的模块都会实现它。不知道为什么没有提到它。
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2010-09-30
    • 2019-02-14
    • 2020-12-16
    相关资源
    最近更新 更多