compiere消息翻译

and_zej 贡献于2017-03-21

作者 wenrui  创建于2007-07-14 01:50:00   修改者wenrui  修改于2007-07-16 10:06:00字数3285

文档摘要:Compiere支持多囯語言,只要提供改種語言的語言包,將語言包導入到系統,就可以使用該种語言登入使用系統了。Compiere默認使用的是英文,在安裝compiere時,它還會將操作系統的語言保存到Compiere.properties内。
关键词:

Message Compiere支持多囯語言,只要提供改種語言的語言包,將語言包導入到系統,就可以使用該种語言登入使用系統了。Compiere默認使用的是英文,在安裝compiere時,它還會將操作系統的語言保存到Compiere.properties内。 我們知道如何翻譯一個字段,即翻譯窗口的字段,對應的window會有Window Translation,tab有Tab Translation,Field有Field Translation。Translation tabs默認是隱藏的,如果要顯示,方法是去菜單Tools->Preference,鈎選Show Translation Tabs。已經導入的語言顯示在Translation tab中。 如果你還不知道如何翻譯這些系統内置的表,請參考翻譯文檔,因爲今天我們要討論的是Message window。 Message window 我們知道系統的字段如何翻譯,但是我們經常踫到一些系統提示消息,或動態的文本,我們還會自己開發Form,Dailog等等,我們也要寫一些彈出消息,這些信息如何翻譯呢?這個時候,就需要用到Message window了。我們在開發的時候,一定要想到我們的消息,字段等不能hardcode,要注意翻譯問題。 Message window有兩個頁簽,Message tab和Translation tab,同樣,需要在Preference中鈎選了Show Translation tabs,Translation tab才會顯示。 Message tab翻譯compiere默認語言的message,也就是英語了。Search Key是唯一標識,代表消息名,在Message Text/Message Tip輸入消息提示内容,Message Tip的内容會放到Message Text下面,因此可以在Message Text輸入關鍵信息,Message Tip輸入詳細信息。 在Translation tab,每條明細代表一種語言,被導入的語言會顯示這裡,可以在Message Text和Message Tip輸入該語言的翻譯内容。 代碼應用 調用message 翻譯的方法很簡單,只要調用Msg class的getMsg()方法,getMsg方法是靜態方法。如:Msg.getMsg(getCtx(), "ProductNotOnPriceList")。傳入的第二個參數,是Message Key,也就是Message window的search key.因此,在開發中會加入一些靜態的消息或字段,都要注意翻譯問題,即是否要調用Msg.getMsg().如果傳入的Message key在message中找不到,就直接拿message key作爲消息内容。 打開Msg類,會看到很多getMsg的重載方法。 歸類1 public static String getMsg (String ad_language, String AD_Message) 這是一個核心方法,所有的getMsg()方法最終調用它取得消息翻譯。 public static String getMsg (Properties ctx, String AD_Message) 直接調用getMsg (String ad_language, String AD_Message),是最常用的方法,它的Properties參數裏,就包含了ad_language,也就是ad_language是從Properties中取得,就是當前系統使用的語言了。 public static String getMsg (Language language, String AD_Message) 如果要取得特定語言的翻譯,而不是當前系統使用語言的翻譯,就調用這個方法了。 歸類2 public static String getMsg (String ad_language, String AD_Message, boolean getText) 它與歸類1不同的是多了一個boolean參數,getMsg (Properties ctx, String AD_Message, boolean getText)和getMsg (Language language, String AD_Message, boolean getText) 最終調用,通過它取得翻譯,boolean參數表示是否取得Message Text的翻譯内容,如果只需要Message Tip不想要Message Text,可通過這個方法達到。 public static String getMsg (Properties ctx, String AD_Message, boolean getText) 直接調用getMsg (String ad_language, String AD_Message, boolean getText),Properties中包含了當前登入使用的語言。 public static String getMsg (Language language, String AD_Message, boolean getText) 最終調用getMsg (String ad_language, String AD_Message, boolean getText),通過特指的語言來翻譯。 歸類3 public static String getMsg (String ad_language, String AD_Message, Object[] args) 歸類3與歸類1不同的是多Object參數,這是核心方法,getMsg(Properties ctx, String AD_Message, Object[] args) 和getMsg(Language language, String AD_Message, Object[] args)最終調用它取得翻譯内容。使用這個方法可以實現動態翻譯,是通過Object參數來實現的,我們下面詳細討論。 public static String getMsg(Properties ctx, String AD_Message, Object[] args) 直接調用getMsg (String ad_language, String AD_Message, Object[] args),Properties中包含了當前登入使用的語言。 public static String getMsg(Language language, String AD_Message, Object[] args) 最終調用getMsg (String ad_language, String AD_Message, Object[] args),通過特指的語言來翻譯。 讓我們看看3個歸類的核心方法定義以及調用層次結構 從這3個核心方法,可以看出歸類2和歸類3的核心方法都先調用歸類1的核心方法,然後根據歸類1的核心方法的返回結果,再做一些額外的處理,即處理第3個參數。 而歸類1的核心方法,通過調用lookup(),getMsgMap(),initMsg()一些列的方法,實現找到Message中的翻譯,initMsg()去數據庫查詢到Message. 明白了如何建立一個Message以及Message的用意,可以來看看效果。示例ProductNotOnPriceList的message,在保存訂單明細時,如果產品沒有訂單指定的價格表,將不能保存,並彈出消息提示 儅我們以英文登入時,取Message tab的Message text和Message Tip: 用簡體中文簦入的效果,取的是Translation tab語言為Chinese (China)的Message Text和Message Tip: 在歸類3的getMsg()方法式我們說過,只要Message符合規範,getMsg (String ad_language, String AD_Message, Object[] args)可以實現動態翻譯。 第3個參數是一個對象數組,下例中[0], [1], [2] [3]的内容會依次被傳入的args數組替代,下標便是從0開始,因此,定義的Message請嚴格按照這種規範,如下例。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档