无法在Odoo 10中的Qweb条件中翻译术语。如何做到这一点?

时间:2018-04-23 09:15:47

标签: xml odoo odoo-10 qweb

我试图翻译Qweb报告中出现的特定字词,但其行为与预期完全不同。

如果您在Odoo 10中安装标准sale模块,请查看其销售订单报告(XML ID = report_saleorder_document)。其代码位于report文件夹,文件sale_report_templates.xml。您将找到以下行:

<td><span t-esc="amount_by_group[0] or 'Taxes'"/></td>

如您所见,有一个文字字符串 Taxes ,如果您选择的语言与英语不同,则必须翻译。尝试将单词翻译成尚未翻译的语言。

就我而言,我试图将这个词翻译成加利西亚语,其中 Taxes 的翻译是空的:

#. module: sale
#: model:ir.model.fields,field_description:sale.field_sale_order_amount_tax
#: model:ir.model.fields,field_description:sale.field_sale_order_line_price_tax
#: model:ir.model.fields,field_description:sale.field_sale_order_line_tax_id
#: model:ir.ui.view,arch_db:sale.report_invoice_layouted
#: model:ir.ui.view,arch_db:sale.report_saleorder_document
msgid "Taxes"
msgstr "Impostos"

但重启服务后,更新sale模块,加载加利西亚语翻译覆盖条款,同步条款,更新浏览器,删除cookie,甚至更新base模块,都没有发生任何事情。

然后我在PostgreSQL中进行了以下查询:

  

SELECT id,lang,src,name,module,value,res_id FROM ir_translation WHERE src =&#39; Taxes&#39; AND lang =&#39; gl_ES&#39; ORDER BY id DESC;

   id   | lang  |  src  |               name                |  module  |    value    | res_id 
--------+-------+-------+-----------------------------------+----------+-------------+--------
 123634 | gl_ES | Taxes | account.account.tag,applicability | account  | Taxes       |      0
 121625 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    364
 121624 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    428
 121619 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    414
 121618 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    415
 121617 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    441
 120817 | gl_ES | Taxes | ir.ui.menu,name                   | account  | Taxes       |    108
 113387 | gl_ES | Taxes | ir.model.fields,field_description | account  | Taxes       |   2878
 113385 | gl_ES | Taxes | ir.model.fields,field_description | account  | Taxes       |   2700
 111845 | gl_ES | Taxes | ir.actions.act_window,name        | account  | Taxes       |    158
 111431 | gl_ES | Taxes | account.tax.group,name            | account  | Taxes       |      1
  47094 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Taxes       |    430
  46953 | gl_ES | Taxes | ir.ui.view,arch_db                | purchase | Impostos    |    746
  46952 | gl_ES | Taxes | ir.model.fields,field_description | purchase | Impostos    |   5045
  46951 | gl_ES | Taxes | ir.model.fields,field_description | purchase | Impostos    |   4992
  45544 | gl_ES | Taxes | ir.ui.view,arch_db                | sale     | Impostos    |    554
  45543 | gl_ES | Taxes | ir.ui.view,arch_db                | sale     | Impostos    |    556
  45542 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4128
  45541 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4120
  45540 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4085
(20 rows)

我意识到问题在于我可能需要翻译account模块(我不明白,因为这个术语在sale模块中),所以我去了到account模块的加利西亚语翻译文件并更新它:

#. module: account
#: selection:account.account.tag,applicability:0
#: model:account.tax.group,name:account.tax_group_taxes
#: model:ir.actions.act_window,name:account.action_tax_form
#: model:ir.model.fields,field_description:account.field_account_invoice_line_invoice_line_tax_ids
#: model:ir.model.fields,field_description:account.field_account_move_line_tax_ids
#: model:ir.ui.menu,name:account.menu_action_tax_form
#: model:ir.ui.view,arch_db:account.account_planner
#: model:ir.ui.view,arch_db:account.invoice_form
#: model:ir.ui.view,arch_db:account.invoice_supplier_form
#: model:ir.ui.view,arch_db:account.report_invoice_document
#: model:ir.ui.view,arch_db:account.view_account_config_settings
#: model:ir.ui.view,arch_db:account.view_move_line_form
msgid "Taxes"
msgstr "Impostos"

但是同样的问题,所以我再次做同样的查询,结果就是这样:

   id   | lang  |  src  |               name                |  module  |    value    | res_id 
--------+-------+-------+-----------------------------------+----------+-------------+--------
 123634 | gl_ES | Taxes | account.account.tag,applicability | account  | Impostos    |      0
 121625 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    364
 121624 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    428
 121619 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    414
 121618 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    415
 121617 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    441
 120817 | gl_ES | Taxes | ir.ui.menu,name                   | account  | Impostos    |    108
 113387 | gl_ES | Taxes | ir.model.fields,field_description | account  | Impostos    |   2878
 113385 | gl_ES | Taxes | ir.model.fields,field_description | account  | Impostos    |   2700
 111845 | gl_ES | Taxes | ir.actions.act_window,name        | account  | Impostos    |    158
 111431 | gl_ES | Taxes | account.tax.group,name            | account  | Taxes       |      1
  47094 | gl_ES | Taxes | ir.ui.view,arch_db                | account  | Impostos    |    430
  46953 | gl_ES | Taxes | ir.ui.view,arch_db                | purchase | Impostos    |    746
  46952 | gl_ES | Taxes | ir.model.fields,field_description | purchase | Impostos    |   5045
  46951 | gl_ES | Taxes | ir.model.fields,field_description | purchase | Impostos    |   4992
  45544 | gl_ES | Taxes | ir.ui.view,arch_db                | sale     | Impostos    |    554
  45543 | gl_ES | Taxes | ir.ui.view,arch_db                | sale     | Impostos    |    556
  45542 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4128
  45541 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4120
  45540 | gl_ES | Taxes | ir.model.fields,field_description | sale     | Impostos    |   4085
(20 rows)

所以我认为问题出在这个翻译上:

111431 | gl_ES | Taxes | account.tax.group,name            | account  | Taxes

确实如此。如果我通过PostgreSQL中的查询修改此翻译,那么当我打印销售订单报告时,我可以看到翻译成加利西亚语的单词。

但我的问题是:我需要做些什么来通过PO文件翻译该术语而不执行查询?

令人讨厌,因为在西班牙语这样的语言中这个词通过PO文件很好地翻译了...我认为这个问题很容易复制,所以如果有人尝试的话,我会很感激,了解正在发生的事情并向我解释。

1 个答案:

答案 0 :(得分:0)

我看到你所描述的问题,看起来确实有点令人惊讶。

无论我尝试了什么,我都无法通过更改gl.po文件或创建自己的gl.po文件来更新该术语。我 能够通过该方法更新其他术语,这表明由于某种原因,这可能是该特定术语的错误。

话虽如此,您可以通过用户界面手动更新该术语。

  1. 激活开发者模式
  2. 转到设置&gt;翻译&gt;申请条款&gt;翻译条款
  3. 搜索:
    • 来源期限 =税收
    • 翻译字段 = account.tax.group,名称
  4. 翻译价值更新为 Impostos (或您喜欢的任何内容)
  5. 如果您特别需要一种自动方式来处理此问题而不能依赖手动过程,那么您可以修改_get_tax_amount_by_group的工作方式。

    @api.multi
    def _get_tax_amount_by_group(self):
        ...
        from openerp.tools.translate import translate
        res = map(lambda l: (translate(self._cr, 'ir.ui.view,arch_db', 'model', self.partner_id.lang, l[0].name), l[1]), res)
        ...