• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種新型的Web國際化解決思路及實踐

      2018-08-13 11:35:10彭金勝
      軟件 2018年7期
      關(guān)鍵詞:鍵值功能模塊頁面

      彭金勝

      ?

      一種新型的Web國際化解決思路及實踐

      彭金勝

      (中國工商銀行股份有限公司軟件開發(fā)中心,上海 201206)

      目前Web應(yīng)用程序常見的國際化方案中,大多以前端或者后端為核心,導致另一端國際化能力弱及前后端交互頻繁等問題。本文提出使用JSON作為資源文件的解決思路,前后端讀取此文件用于國際化,并且通過Hash,提供良好的緩存支持。以解決一端國際化能力弱,占用內(nèi)存空間大及前后端頻繁交互等問題。目前部分內(nèi)容已應(yīng)用于實際項目中,受到同事們的一致好評。實踐表明該方案能夠很好的解決目前常見國際化方案中存在的不足。

      Java Web國際化;JSON數(shù)據(jù)交換格式;JSON國際化

      0 引言

      目前,Web應(yīng)用程序常見的國際化方案有些已經(jīng)過時,例如以后端為核心,基于Java的properties的國際化方案,它需要在Java的Web容器當中運行,而且占用大量內(nèi)存空間;而另一些則不成熟,比如當前以前端為核心的國際化方案,jQuery等框架插件,它們與后端高頻的交互,對服務(wù)器帶來巨大壓力[1]。

      JSON作為一種輕量級數(shù)據(jù)交換格式,具有良好讀寫及跨語言平臺的能力,已經(jīng)成為數(shù)據(jù)交換的主要格式,非常適合以Java為代表的后端,及以JavaScript為前端的運行環(huán)境,而國際化正是一種前后端都需要的資源。

      基于以上當前國際化方案存在的不足,以及JSON在數(shù)據(jù)交換領(lǐng)域所展現(xiàn)出來的優(yōu)勢,本文提出使用JSON作為資源文件的解決方案,前后端讀取此文件用于國際化,并且通過Hash,提供良好的緩存支持[2]。以解決服務(wù)器壓力大,占用內(nèi)存空間大及前后端交互頻繁等問題。

      目前該方案部分內(nèi)容已應(yīng)用于實際項目中,受到同事們的一致好評。實踐表明該方案能夠很好的解決目前常見國際化方案中存在的不足。

      1 Web應(yīng)用程序國際化方案的缺陷

      現(xiàn)有Web應(yīng)用程序常用的國際化方案有很多種,大致可以分為兩類:一類是在后端負責國際化,另一類是前端負責國際化[3]。

      其中前者相對來說使用的更為廣泛,基于Java讀取相應(yīng)的properties文件(exaple_zh_CN.properties/ example_en_US.properties),以達到實現(xiàn)國際化的目的。缺陷比較明顯:

      (1)都要經(jīng)過Java的Web容器,不管是Java程序直接讀取,或者Velocity模版引擎,還是JSP里自定義標簽的方式。

      (2)文件內(nèi)容需要裝載到內(nèi)存中,占有大量內(nèi)存空間。

      (3)文件通常會按模塊切分到各個模塊中,導致難于一起整理和翻譯。

      (4)同一詞匯出現(xiàn)在多個文件中,導致系統(tǒng)整體內(nèi)容不一,并且維護困難。

      隨著前后端分離思想的出現(xiàn),越來越多的項目選擇前端靜態(tài)化,通過Nginx等前端服務(wù)器或者CDN等方式部署靜態(tài)資源,隨之而來的便是另一類:前端國際化,通常采用頁面調(diào)用JavaScript文件(example_zh_CN.js/example_en_US.js)或者使用jQuery等成熟框架的國際化插件等方式,這類方式的缺陷在于:

      (1)使后端喪失了國際化的能力,比如后端的報錯信息,生成pdf文件等。

      (2)前后端交互頻繁,給服務(wù)器造成巨大的壓力。

      1.1 解決

      JSON憑借輕量級,良好的讀寫及跨語言平臺等優(yōu)勢,快速成為最流行的數(shù)據(jù)交換格式[4]。本文利用JSON格式文件優(yōu)勢,提出以JSON存儲國際化資源的思路,以實際生產(chǎn)流程為例,一步一步實現(xiàn)前后臺分離應(yīng)用的國際化。

      1.1.1 開發(fā)

      國際化JSON文件應(yīng)遵循如下原則:

      (1)根據(jù)國家語言劃分,每種國家語言生成一份JSON文件。開發(fā)時,維護一份主文件,其它語言由主文件翻譯。

      (2)內(nèi)容按字母排序,有助于后續(xù)維護。

      (3)詞匯對應(yīng)的鍵值以頁面展現(xiàn)的英文或拼音為準,假如項目以中文為主,詞匯“搜索”對應(yīng)的鍵值應(yīng)該是“SouSuo”,假如項目以英文為主,則鍵值為“Search”。

      (4)多個單詞的鍵值用下劃線連接,比如“收件日期”的鍵值為“Received_date”。

      (5)按功能路徑分塊的方式進行組織,以便于相同的內(nèi)容可以提取到更高層級,以及按功能路徑切分文件。

      以下摘取某工程部分內(nèi)容為例,文件內(nèi)容組織如圖1所示。

      圖1 JSON文件內(nèi)容組織示意圖

      1.1.2 構(gòu)建

      國際化JSON文件通過生成Hash目錄文件“i18n_Hash_zh_CN.json”及其它Hash內(nèi)容文件的流程如下:

      (1)建立一個Map,用于存儲模塊路徑及其對應(yīng)的內(nèi)容。

      (2)進入一個JSON對象,并帶入該JSON對象對應(yīng)的key值,如果是根對象,則為空(“”)。

      (3)新建對象,用戶存儲帶入key值對應(yīng)的內(nèi)容。

      (4)循環(huán)讀取該對象下的屬性,如果屬性不以斜線(“/”)開頭,則將屬性及對應(yīng)的值添加到新建對象中。

      (5)如果屬性以斜線(“/”)開頭,則進入第(2)步,帶入當前key值加上該屬性。

      (6)將key值加上斜線(“/”)結(jié)尾與新建對象一起放入Map中

      通過以上流程便可以獲取所有的功能模塊路徑及其內(nèi)容,將內(nèi)容進行md5取值并截前8位得Hash值,再將路徑及這些Hash值寫入Hash目錄文件,最后將內(nèi)容寫入由功能模塊路徑加Hash加上語言后綴組合成的Hash內(nèi)容文件中[5-7]。由于生成出的Hash內(nèi)容文件名中的Hash值為其文件內(nèi)容,以此便保證其文件名的唯一性,可被后端服務(wù)器,前端服務(wù)器及瀏覽器等端點永久緩存,JSON文件編譯結(jié)果如圖2所示。

      1.1.3 使用

      首先要根據(jù)語言獲取相應(yīng)的Hash目錄文件,然后再根據(jù)路徑獲取相應(yīng)的一個或多個國際化JSON文件,以下以簡體中文(zh_CN)為例,如在“/dashboard”功能模塊或頁面中,根據(jù)“i18n_Hash_ zh_CN.json”,則需要獲?。?/p>

      圖2 JSON文件編譯結(jié)果示意圖

      (1)“/”對應(yīng)的4f668ad4_zh_CN.json。

      (2)“/dashboard/”對應(yīng)的92b4dee5_zh_CN.json。

      在“/user/resetpwd”功能模塊或頁面中時,則需要獲取:

      (1)“/”對應(yīng)的4f668ad4_zh_CN.json(如果已緩存則無需在獲取,在該示例中,由于“/dashboard”已加載過一次,所以此處無需再加載)。

      (2)“/user/”對應(yīng)的eeacdaac_zh_CN.json。

      (3)“/user/resetpwd/” 對應(yīng)的d21e76d5_zh_ CN.json。

      其次是獲取國際化值,與獲取Hash文件類似,如在“/dashboard”功能模塊或頁面中,需要獲取“Failed_Times”對應(yīng)的“失敗次數(shù)”:

      (1)在“/dashboard/”對應(yīng)的92b4dee5_zh_CN. json里找“Failed_Times”,找到并返回。

      當在“/user/resetpwd”功能模塊或頁面中,需要獲取“Submit”對應(yīng)的“提交”:

      (2)在“/user/resetpwd/”對應(yīng)的d21e76d5_zh_ CN.json里找“Submit”,未找到,下一步。

      (3)在“/user/”對應(yīng)的eeacdaac_zh_CN.json里找“Submit”,未找到,下一步。

      (4)在“/”對應(yīng)的4f668ad4_zh_CN.json里找“Submit”,找到并返回。

      1.1.4 部署

      國際化JSON文件可獨立部署,亦可在前端或后端服務(wù)器上部署,以下以獨立部署為例,架構(gòu)部署如圖3所示:

      通過以上步驟,便實現(xiàn)JSON文件的國際化方案。經(jīng)歷開發(fā)、構(gòu)建、部署及使用后,不難看出,對比目前常見國際化方案,該方案具有如下優(yōu)勢:

      圖3 JSON文件獨立部署架構(gòu)示意圖

      (1)不再需要Java Web容器。

      (2)內(nèi)容可根據(jù)模塊路徑按需緩存。

      (3)開發(fā)時只有一份文件,可直接發(fā)給翻譯部進行翻譯。

      (4)可通過簡單的CTRL+F來確認是否已國際化,防止同一詞匯多次出現(xiàn)。

      (5)后端擁有國際化的能力,無需再去解析JavaScript文件。

      (6)前端頁面渲染時,根據(jù)功能模塊路徑一次性按文件裝載,而不再是單個詞匯請求后臺服務(wù)。

      1.2 結(jié)果

      JSON文件國際化方案部分內(nèi)容已應(yīng)用于實際項目中,受到同事們的一致好評。因為可以按需緩存,按文件裝載,所以大大提高了服務(wù)器性能,提升用戶體驗;因為只有一份文件,僅需要跟翻譯部門講解溝通一次,就可以免去整理翻譯文檔的工作,大大縮減開發(fā)工作量;因為后端Java可以直接讀取JSON文件,而不再需要去解析JavaScript文件,有效防止了解析出錯等問題[8-10]。

      2 結(jié)論

      通過JSON文件國際化方案,可以有效解決實際應(yīng)用的多個問題,包括資源緩存,開發(fā)工作量及程序高可靠性等。

      JSON文件國際化方案,非常適用于全量發(fā)版的項目,對于增量發(fā)版的項目則不太適合,因為如果項目很大,每次國際化文件被切成多個Hash的JSON文件,由于增量發(fā)版只會增量累積,隨之而來的便是國際化JSON文件難以清理的問題。特別是7×24服務(wù)的應(yīng)用,清理成本更高。

      當然,隨著項目越來越大,JSON文件國際化方案還會遇到功能模塊路徑劃分的問題,何種路徑劃分能夠很好支撐后續(xù)的發(fā)展,而不至于越來越多的內(nèi)容往根路徑上添加,導致根路徑Hash的JSON文件內(nèi)容過多。

      當前該方案不但適用于信息的國際化,而且適用于簡單的字典值/代碼表(即下拉框數(shù)據(jù))的國際化,完整的字典值/代碼表的國際化方案正在研究當中,相對于信息的國際化,字典值/代碼表的國際化則無需嚴格的功能路徑劃分,但是卻會有字典值/代碼表過大的情況,比如車型庫等。

      [1] 冀振燕, 程虎, 梅嘉. Java語言國際化的設(shè)計與實現(xiàn)[J]. 軟件學報, 2000, 11(11): 1541-1546.

      [2] 李長春, 廖建新, 王純, 等. 軟件界面國際化及設(shè)計模式的應(yīng)用[J]. 食品科學技術(shù)學報, 2007, 25(5): 53-56.

      [3] 張愛玲, 米應(yīng)凱. 軟件系統(tǒng)國際化的設(shè)計研究[J]. 軟件工程, 2010(4): 52-53.

      [4] 潘詩瑤, 黃建明. Web應(yīng)用系統(tǒng)中的MOCK測試技術(shù)[J]. 軟件, 2016, 37(12): 214-218.

      [5] 朱培源. 一種新型的Web應(yīng)用程序框架的設(shè)計與實現(xiàn)[D]. 電子科技大學, 2017.

      [6] 王登輝. 基于工作流模式的語義Web服務(wù)組合信任度模型的研究與實現(xiàn)[D]. 華中科技大學, 2016.

      [7] 王文明, 李志安, 程懷舟. 一種新型的泵站W(wǎng)eb發(fā)布系統(tǒng)[J]. 可編程控制器與工廠自動化, 2010(5): 61-63.

      [8] 周娜. 基于Web的制造業(yè)電子商務(wù)平臺關(guān)鍵技術(shù)的研究與應(yīng)用[D]. 南京航空航天大學, 2005.

      [9] 王慶福. 網(wǎng)站建設(shè)中數(shù)據(jù)庫技術(shù)與WEB技術(shù)的應(yīng)用對比研究[J]. 軟件, 2013, 34(2): 86-87.

      [10] 李天翼, 許魯, 常致全. 一種新型的基于網(wǎng)絡(luò)存儲的Web集群解決方案[J]. 計算機應(yīng)用研究, 2003(10): 78-79+112.

      A Mew Solution and Practice of Web Internationalization

      PENG Jin-sheng

      (Industrial Commercial Bank of China Co., Ltd. Software Development Center, Shanghai 201206)

      Abstract: at present, most of common international schemes of Web applications take front or back end as core, which leads to weak international ability of other end and frequent interaction between front and back end. The article proposes solution of taking JSON as resource file, which can be read by front and back end for internationalization, and Hash provides good caching support to solve problem of weak internationalization at one end, and occupying large memory space and frequent interaction between front and back end. At present, some contents have been applied to practical projects and received good evaluation from colleagues. Practice shows the scheme can solve shortcomings of current common international solutions well.

      Java Web internationalization; JSON data interchange format; JSON internationalization

      TP274+.2

      A

      10.3969/j.issn.1003-6970.2018.07.030

      彭金勝(1988-),本科,信息科技經(jīng)理,主要研究方向:大數(shù)據(jù)分析挖掘及可視化。

      本文著錄格式:彭金勝. 一種新型的Web國際化解決思路及實踐[J]. 軟件,2018,39(7):143-145

      猜你喜歡
      鍵值功能模塊頁面
      大狗熊在睡覺
      刷新生活的頁面
      非請勿進 為注冊表的重要鍵值上把“鎖”
      一鍵直達 Windows 10注冊表編輯高招
      電腦愛好者(2017年9期)2017-06-01 21:38:08
      基于ASP.NET標準的采購管理系統(tǒng)研究
      軟件導刊(2016年9期)2016-11-07 21:35:42
      輸電線路附著物測算系統(tǒng)測算功能模塊的研究
      M市石油裝備公服平臺網(wǎng)站主要功能模塊設(shè)計與實現(xiàn)
      石油知識(2016年2期)2016-02-28 16:20:16
      功能模塊的設(shè)計與應(yīng)用研究
      同一Word文檔 縱橫頁面并存
      淺析ASP.NET頁面導航技術(shù)
      安福县| 石渠县| 绥化市| 巴楚县| 宣化县| 桦川县| 武胜县| 永靖县| 河源市| 梁山县| 琼结县| 滦南县| 任丘市| 宁强县| 大洼县| 呼伦贝尔市| 永春县| 商河县| 富阳市| 麟游县| 边坝县| 黄山市| 栾城县| 县级市| 东山县| 开远市| 武乡县| 浏阳市| 庆元县| 大方县| 托里县| 海伦市| 锦州市| 和林格尔县| 图们市| 鹤山市| 深泽县| 运城市| 惠水县| 永清县| 辰溪县|