导出可翻译的条款
在你的模块的一些条款是作为一个结果的“隐式翻译”,即使你没有对翻译做任何具体的工作,你可以导出你的模块的可译性条款和可以找到进行翻译工作的内容。
翻译导出通过管理接口执行,通过登录到后端接口和打开 设置 ‣ 翻译 ‣ 导入/导出 ‣ 导出翻译
- 将语言保留到默认值(新语言/空模板)
- 选择 PO 文件格式
- 选择你的模块
- 点击导出按钮并下载文件
这将给你一个叫yourmodule.pot的文件,它应该移动到yourmodule/i18n/
目录。 这个文件是一个PO模版,它简单列出可翻译的字符串并从中可以创建实际的翻译文件(PO文件) 。PO文件可以使用msginit创建,用一个专门的翻译工具如POEdit或者通过简单的复制模版到一个叫的新文件language.po中。翻译文件应该放到yourmodule/i18n/
,紧邻yourmodule.pot
,并当相应的语言被安装时将被Odoo自动的加载 (通过 设置 ‣ 翻译 ‣ 加载翻译)
注
在安装或更新模块时,也会安装或更新所有加载语言的翻
隐式导出Odoo自动从"data"-type内容导出翻译字符串:
- 在非QWeb视图中,所有文本节点导出,以及
string
,help
,sum
,confirm
和placeholder
等属性的内容 - QWeb模版(包括服务器端和客户端),所有文本节点将导出除了在t-translation="off"块中,
title
,alt
,label
andplaceholder
等属性的内容也导出 -
对于
Field
, 除非它们的模型使用_translate = False标志:- 它们的
string
和help
属性导出 - 如果
selection
显示并是一个列表(或元组),导出它 - 如果它们的
translate
属性设置为True
,所有现有的值(在所有记录中)都是导出的
- 它们的
_constraints
和_sql_constraints
的帮助/错误信息将导出
当谈到在Python代码和JavaScript代码更“必要”的情况下,Odoo不能自动导出翻译条款,因此这些条款必须显示的标注以导出。这是通过在函数调用中封装一个字面字符串来完成的。
在Python中,封装的函数是 odoo._()
:
title = _("Bank Accounts")
在JavaScript中,封装的函数通常是odoo.web._t()
:
title = _t("Bank Accounts")
警告
只有文字字符串可以标记为导出,而不是表达式或变量。对于字符串格式的情况,这意味着格式字符串必须被标记,而不是格式化字符串:
# bad, the extract may work but it will not translate the text correctly
_("Scheduled meeting with %s" % invitee.name)
# good
_("Scheduled meeting with %s") % invitee.name
ps:有翻译不当之处,欢迎留言指正。
原文地址:https://www.odoo.com/documentation/10.0/reference/translations.html