ERPNext的翻譯機制

blank

ERPNext的翻譯機制

  1. 用戶登錄系統時獲取全域翻譯(字典),

1.1 獲取以下待翻譯文本(參考translate.get_dict fortype=="boot")

  • 遍曆已安裝app目錄獲取代碼檔('.py', '.html', '.js', '.vue')中翻譯函數(py: _(), js: __())的第一個參數
  • 從資料庫表中獲取一些全域共用訊息(編號、名稱),如左側導航功能表,單據類型,報表,角色,模組,工作區,初始化嚮導,

1.2 載入各app translations目錄下的目標語言翻譯csv文本檔(如zh.csv)為一個英文為鍵,翻譯文本為值的字典,如{『PO』:『採購訂單』}, 遍歷時以app安裝順序(參考 translate.load_lang),相同詞條,後安裝APP的內容覆蓋前面的,所以最新安裝的自定義APP中的zh.csv內容會覆蓋標準app 如frappe,erpnext中的相同詞條,此步驟結果會被緩存

1.3 第1步的待翻譯文本從上述字典中獲取翻譯內容,產生待返回翻譯字典

1.4 從app中定義的翻譯勾子程式中獲取翻譯內容,添加或更新待返回翻譯字典

1.5 從資料庫獲取使用者翻譯表的全部內容,添加或更新待返回翻譯字典

1.6 返回翻譯字典到前端網頁,載入(添加或更新)到frappe._message公用變數

1.7 js 檔案中的翻譯函數_('待翻譯文本') 基於frappe._message字典獲取翻譯結果

2. 獲取具體頁面(單據類型,報表,網頁)翻譯內容

除第1小步的獲取待翻譯文本是針對具體的頁面物件(單據類型、報表、網頁)之外,其它步驟同上述boot.

常見不能翻譯的情況

  1. 代碼中未調用翻譯函數
  2. 翻譯函數第一個參數是變數(動態文字)
  3. 翻譯詞條與源文不同
    1. 原文本首或尾有空格
    2. 原文本是含花括號{0}變數的,翻譯詞條是固定字串
    3. 原文本中含特殊字元,如回車換行,翻譯詞條沒換行
  4. 代碼中待翻譯文本未正確獲取
  5. 顯示內容屬於第三方控件,如熱力圖,甘特圖,數據表

常見翻譯錯誤

  1. 一詞多義,如commit在預算管理中是承諾,在資料庫操作時是提交

What do you think?

Written by marketer

blank

ERPNext 應用開發新手入門教程-2

blank

在? 送你個開源社區版 AirTag——GitHub 熱點速覽 v.21.21