国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

I18N-國際化消息和日志

2019-11-17 06:04:44
字體:
來源:轉載
供稿:網友

摘要:

    對于許多軟件開發者來說,一提到國際化(亦稱為 i18n)支持就會感到害怕。 要使編寫的代碼能夠面向外國使用者,確實需要費一翻思量,因為在現有軟件的代碼中添加國際化支持可不是一件輕而易舉的事。
對于許多軟件開發者來說,一提到國際化(亦稱為 i18n)支持就會感到害怕。 要使編寫的代碼能夠面向外國使用者,確實需要費一翻思量,因為在現有軟件的代碼中添加國際化支持可不是一件輕而易舉的事。 假如您感覺到軟件需要支持不同語言和語言環境,哪怕這種可能性很小,從一開始就做國際化項目的預備,比起項目開始后再試圖添加國際化支持也要明智得多。

    有人問“國際化”是什么意思? 國際化遠不止于將用戶界面消息翻譯成不同的語言。 它還涉及到處理不同的字符編碼、日期/時間/貨幣的顯示形式、以及跨多區域時存在的一些其他差異。

  介紹 i18nlog

    本文的目的并不在于討論那些關于國際化的瑣碎的方面,而是通過研究一個稱為 "I18N Messages and Logging" (簡稱 i18nlog) 的開源項目,來介紹引入國際化功能時需要執行的一些必要的任務
i18nlog 答應您在 java 應用程序內集成國際化的消息,這是通過向以下內容提供 API 來完成的:
+標注 Java 類以識別國際化消息
+從所有支持的語言環境資源包中獲取國際化消息
+創建特定于語言環境的異常,并在其中使用國際化的消息
+使用任何日志框架創建國際化消息日志
+自動生成特定于語言環境的資源包
+自動生成幫助及參考文檔

  定義國際化消息

    國際化軟件時一項最為乏味的工作莫過于維護資源綁定包了。 資源綁定包是包含 "name=value" 這種信息對的屬性文件 (.
    i18nlog 提供了一些用于定義資源綁定消息及其要害字字符串的標注--用于將資源
注入到 i18nlog 的自定義 Ant 任務中,您可以自動生成資源綁定包,而不必為確保屬性文件與訪問屬性文件的 Java 代碼之間的一致性作過多的工作。

    @I18NMessage 標注被放在常量上,這些常量就是資源綁定包的要害字字符串使用的常量。 使用這些常量可以迫使執行編譯時檢查;例如代碼中引入的拼寫錯誤(如常量名稱的拼寫錯誤)和使用過時消息或已刪除消息,這些錯誤在編譯時就可以被探測到。 以下是使用此標注的示例:

java 代碼
1.        @I18NMessage( "Hello, {0}. You last visited on {1,date}" )   
2.        public static final String MSG_WELCOME = "example.welcome-msg";  


    上面的示例定義了一條國際化消息。 常量的值定義了資源綁定包的要害字字符串(key string)。 標注的值是一條實際翻譯好的消息。 您可以將這些標注過的常量放到應用程序的任何類或接口中。 可以將它們放在單獨的類或接口中(將所有消息定義集中到一個地點),也可以放在使用到它們的類中。

    @I18NResourceBundle 標注用于定義存放消息的資源綁定包文件(.properties 文件)。 它可以標注整個類或接口,也可以標注特定的部分。 假如您標注了一個類或接口,則該類或接口中的所有 @I18NMessage 標注都將被存儲在該標注定義的資源綁定包中(默認情況下)。 假如只將標注放在特定的常量上,那么它就只是那個常量的綁定包。 以下是使用此標注的示例:

java 代碼
1.        @I18NResourceBundle( baseName = "messages",   
2.                             defaultLocale = "en" )  


    以上代碼的意思是,所有被 @I18NMessage 標注的相關消息都將放置在名為 messages_en.properties 綁定包文件中。 下面是一個更復雜的示例(包含一系列國際化消息的接口):

java 代碼
1.        @I18NResourceBundle( baseName = "messages",    
2.                             defaultLocale = "en" )    
3.        public interface Messages {    
4.           @I18NMessage( "Hello, {0}. You last visited on {1,date}" )    
5.           String MSG_WELCOME = "welcome-msg";    
6.          
7.           @I18NMessage( "An error occurred, please try again" )    
8.           String MSG_ERR = "error-occurred";    
9.          
10.           @I18NMessage( "The value is {0}" )    
11.           String MSG_VALUE = "value";    
12.        }  


  檢索國際化消息

    定義了國際化常量后,就可以使用 i18nlog 的核心類提供的 API:mazz.i18n.Msg。 該 API 用于裝載存放于資源綁定屬性文件中的消息。 它還用于將值作為變量參數進行傳遞,從而替換消息中的占位符(例如, {0}, {1,date})。 另外,此 API 將您從直接使用 JDK 類進行編碼的工作中解放出來,也許您需要閱讀一下 Javadoc 的 java.text.MessageFormat 部分,以獲得對 i18nlog 工作原理的初步熟悉,尤其是它如何使用本地化的數據替換占位符。

下面是 Msg 類的使用實例:

java 代碼
1.        // 使用靜態工廠方法創建一個 Msg 對象   
2.        // 假設默認綁定包的名字是 "messages"  
3.        System.out.println( Msg.createMsg( Messages.MSG_WELCOME,  
4.                                           name,  
5.                                           date ) );  



java 代碼
1.        // 使用構造函數創建一個 Msg 對象   
2.        Msg msg = new Msg( new Msg.BundleBaseName("messages") );  
3.        try {  
4.           String hello = msg.getMsg(Messages.MSG_WELCOME, name, date );  
5.           ... do something ...  
6.        }  
7.        catch (Exception e) {  
8.           throw new RuntimeException( msg.getMsg( Messages.MSG_ERR ) );  
9.        }  



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会宁县| 山丹县| 抚顺县| 江山市| 察雅县| 崇明县| 寿宁县| 苍南县| 邵武市| 天镇县| 保定市| 绥芬河市| 扎兰屯市| 都匀市| 屯留县| 津市市| 金溪县| 苗栗县| 高密市| 泸水县| 含山县| 镇巴县| 孟村| 无极县| 五家渠市| 宽甸| 通江县| 左贡县| 嘉善县| 新疆| 辽宁省| 高雄市| 康马县| 北海市| 西乌珠穆沁旗| 张家口市| 重庆市| 河津市| 泰州市| 肇州县| 青岛市|