首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

OpenERP (Odoo) 彈出提示窗口完整指南:osv.except_osv 國際化與變量嵌入

     編輯:關於C

OpenERP/Odoo 開發中,osv.except_osv 是中斷流程並向用戶顯示錯誤/警告彈窗的標準方式。本文總結三大用法:基本異常拋出、業務邏輯攔截、提示語國際化與變量嵌入。

核心導入

from openerp.tools.translate import _
from openerp.osv import except_osv

用法一:基本拋出

raise except_osv(_('Error!'), _('Error Message.'))
  • 兩個參數:標題、內容,均用 _() 包裹支持翻譯。
  • 拋出即中斷當前事務,回滾數據庫操作,彈窗顯示。

用法二:業務邏輯攔截(實戰模式)

def __assistant_depmanager_prove(self, cr, uid, ids, context=None):
    for qjd in self.browse(cr, uid, ids, context=context):
        if qjd.shenqr.user_id.id == uid:
            raise except_osv(_('Warning!'), _('you cannot prove yourself'))
            return False
        elif qjd.tians > 1:
            raise except_osv(_('Warning!'), _('There are not enough access'))
            return False
    return True

在模型方法中驗證業務規則,不合規直接 raise,代碼清晰、事務安全。

用法三:提示語國際化(.po 文件配置)

Python 代碼中用 _('msgid'),提取工具生成 .po 文件:

#. module: qingjia
#: code:addons/qingjia/qingjia.py:0
#, python-format
msgid "Warning!"
msgstr "提示!"

#. module: qingjia
#: code:addons/qingjia/qingjia.py:0
#, python-format
msgid "you cannot prove yourself"
msgstr "您不能審批您自己的請假單"

運行時根據用戶語言自動顯示對應翻譯。

用法四:提示語嵌入變量(含翻譯)

raise except_osv(_('Error!'),
    _('Your uid is "%s", name is "%s", the state is "%s"') %
    (_(uid), _('王小波'), _(result.state)))

關鍵點:

  • 格式化字符串用 % 操作符,占位符 %s。
  • 變量值若需翻譯(如狀態名),同樣用 _(var) 包裹。
  • .po 文件中 msgid 必須與格式化字符串**完全一致**(含引號、標點)。
#. module: qingjia
#: code:addons/qingjia/qingjia.py:0
#, python-format
msgid "Your uid is \"%s\" ,name is \"%s\",the state is \"%s\""
msgstr "你的用戶id是:'%s',姓名是:'%s',請假單狀態是:'%s'"

狀態字段翻譯聯動

模型定義 state 選項時同步標記翻譯:

state = fields.Selection([
    ('draft', _('Draft')),
    ('wait_prove', _('待批的')),
    ('proved', _('Proved')),
], string='Status')

.po 文件補全:

msgid "wait_prove"
msgstr "待批的"

運行時彈窗將顯示中文狀態名。

效果圖示例

基本彈窗 帶變量彈窗

最佳實踐清單

  1. **所有用戶可見字符串必須用 _() 包裹**,無例外。
  2. **業務驗證盡早攔截**(create/write/flow 方法中),拋出具體可操作的錯誤信息。
  3. msgid **使用完整英文句子**,避免拼接片段導致翻譯上下文缺失。
  4. **變量嵌入時區分「需翻譯值」與「純數據值」**,前者用 _(var),後者直接 %s。
  5. 定期運行 i18n-export 更新 .po 文件,納入版本控制。

總結

osv.except_osv 是 OpenERP 異常處理的基石:**拋出即回滾、信息即國際化、變量即可嵌入**。規範使用可構建專業、多語言友好的企業級應用體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved