999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2018-08-13 11:35:10彭金勝
軟件 2018年7期
關鍵詞:功能模塊頁面國際化

彭金勝

?

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

彭金勝

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

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

Java Web國際化;JSON數據交換格式;JSON國際化

0 引言

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

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

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

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

1 Web應用程序國際化方案的缺陷

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

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

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

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

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

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

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

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

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

1.1 解決

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

1.1.1 開發

國際化JSON文件應遵循如下原則:

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

(2)內容按字母排序,有助于后續維護。

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

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

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

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

圖1 JSON文件內容組織示意圖

1.1.2 構建

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

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

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

(3)新建對象,用戶存儲帶入key值對應的內容。

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

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

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

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

1.1.3 使用

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

圖2 JSON文件編譯結果示意圖

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

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

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

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

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

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

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

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

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

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

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

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

1.1.4 部署

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

通過以上步驟,便實現JSON文件的國際化方案。經歷開發、構建、部署及使用后,不難看出,對比目前常見國際化方案,該方案具有如下優勢:

圖3 JSON文件獨立部署架構示意圖

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

(2)內容可根據模塊路徑按需緩存。

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

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

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

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

1.2 結果

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

2 結論

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

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

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

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

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

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

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

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

[5] 朱培源. 一種新型的Web應用程序框架的設計與實現[D]. 電子科技大學, 2017.

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

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

[8] 周娜. 基于Web的制造業電子商務平臺關鍵技術的研究與應用[D]. 南京航空航天大學, 2005.

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

[10] 李天翼, 許魯, 常致全. 一種新型的基于網絡存儲的Web集群解決方案[J]. 計算機應用研究, 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-),本科,信息科技經理,主要研究方向:大數據分析挖掘及可視化。

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

猜你喜歡
功能模塊頁面國際化
大狗熊在睡覺
聚焦港口國際化
金橋(2022年10期)2022-10-11 03:29:46
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
人民幣國際化十年紀
中國外匯(2019年12期)2019-10-10 07:26:56
從園區化到國際化
商周刊(2018年12期)2018-07-11 01:27:18
基于ASP.NET標準的采購管理系統研究
軟件導刊(2016年9期)2016-11-07 21:35:42
直銷企業國際化并不難
輸電線路附著物測算系統測算功能模塊的研究
M市石油裝備公服平臺網站主要功能模塊設計與實現
石油知識(2016年2期)2016-02-28 16:20:16
功能模塊的設計與應用研究
主站蜘蛛池模板: 日本日韩欧美| 喷潮白浆直流在线播放| 3p叠罗汉国产精品久久| 日韩午夜福利在线观看| 区国产精品搜索视频| 亚洲三级网站| 日韩无码真实干出血视频| 成人韩免费网站| 成人国产免费| 久久精品嫩草研究院| 免费国产高清视频| 日韩a级毛片| 97成人在线视频| 又黄又湿又爽的视频| 伊伊人成亚洲综合人网7777| 少妇人妻无码首页| 伊人色婷婷| 国产小视频在线高清播放| 午夜国产精品视频| 青青操国产视频| 日本影院一区| 午夜综合网| 福利视频一区| 亚洲精品波多野结衣| 毛片a级毛片免费观看免下载| 日韩视频精品在线| 亚洲 欧美 偷自乱 图片| 99青青青精品视频在线| 国产制服丝袜91在线| 中文字幕亚洲另类天堂| 亚洲欧美综合另类图片小说区| 欧美在线一二区| 蜜桃视频一区二区三区| 亚洲国产成人精品青青草原| 日韩欧美中文字幕在线精品| 国产人成网线在线播放va| 亚洲视频一区在线| 精品偷拍一区二区| 国产全黄a一级毛片| 国产欧美精品专区一区二区| 日韩毛片在线视频| 久久国产乱子伦视频无卡顿| 亚洲av无码牛牛影视在线二区| 午夜老司机永久免费看片| 亚洲永久视频| 欧美日韩精品一区二区在线线| 国产精品分类视频分类一区| 国产精品漂亮美女在线观看| 91av国产在线| 囯产av无码片毛片一级| 亚洲第一精品福利| 国产成人91精品| 国产成人精品综合| 午夜啪啪网| 狠狠色婷婷丁香综合久久韩国| 亚洲午夜福利在线| 久久99热66这里只有精品一| 国产精品一线天| 天天躁狠狠躁| 亚洲av无码人妻| 国内自拍久第一页| 日本www在线视频| 久久综合丝袜长腿丝袜| 国产三级视频网站| 国产午夜在线观看视频| 精品1区2区3区| 欧美高清国产| 在线看免费无码av天堂的| 欧美三级视频在线播放| 老司机久久99久久精品播放 | 亚洲妓女综合网995久久| 午夜影院a级片| 毛片免费试看| 亚洲AⅤ无码日韩AV无码网站| 精品视频福利| 亚洲伦理一区二区| 日韩国产精品无码一区二区三区 | 亚洲乱码在线视频| 国产精品私拍99pans大尺度 | 亚洲浓毛av| 黄色一及毛片| 五月婷婷丁香综合|