亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種基于J2EE的WEB系統(tǒng)的國際化方案設(shè)計(jì)

        2015-03-27 07:18:36中國長江三峽集團(tuán)公司羅惠恒
        電子世界 2015年21期
        關(guān)鍵詞:配置文件服務(wù)器端頁面

        中國長江三峽集團(tuán)公司 李 哲 羅惠恒 周 容

        1 引言

        軟件國際化(Inter nat ional ization, 又稱I18N),是指在軟件設(shè)計(jì)和文檔開發(fā)過程中,為了代碼設(shè)計(jì)與功能實(shí)現(xiàn)能處理多種語言和文化習(xí)俗,從而創(chuàng)建不同語言版本時(shí),不需要重新設(shè)計(jì)原程序代碼的軟件工程方法。

        軟件本地化(Local izat ion,又稱L10N),是指將一個(gè)軟件產(chǎn)品按特定國家/地區(qū)或語言市場的需要進(jìn)行加工,使之滿足特定市場上的用戶對(duì)語言和文化的特殊要求的軟件生成活動(dòng)。即針對(duì)某一地域所支持的編碼字符集、語言和地域習(xí)慣為軟件建立符合本地要求的信息的過程[1]。

        主流的J2EE的表現(xiàn)層框架如Spr ing MVC、St r ut s等對(duì)國際化或多或少有相應(yīng)的解決方案。但上述方案并不能適配所有場景,隨著RESTFUL風(fēng)格的興起,越來越多的數(shù)據(jù)展示和格式化工作直接交給了前端模板或組件,這需要客戶端Javascr ipt(簡稱JS)腳本國際化的支持。本文介紹了一種針對(duì)基于J2EE三層架構(gòu)[2]WEB項(xiàng)目的多語言解決方案,有效解決了國際化過程中的相關(guān)問題。

        2 國際化的背景及過程

        多語言的網(wǎng)站根據(jù)語言的組織方式可以分為有如下的兩種構(gòu)成類型:

        (1)單站點(diǎn)類型。不同語言的網(wǎng)站作為一個(gè)站點(diǎn),然后采用各種手段實(shí)現(xiàn)頁面的多語言。利用如第三方插件翻譯、針對(duì)不同語言頁面分目錄、動(dòng)態(tài)內(nèi)容產(chǎn)生[3]等方式實(shí)現(xiàn)國際化。

        (2)多站點(diǎn)類型。不同語言的網(wǎng)站作為多個(gè)站點(diǎn),保存在不同的服務(wù)器。服務(wù)器之間不存在任何聯(lián)系,即一系列內(nèi)容相關(guān)的網(wǎng)站集合。

        采用單站點(diǎn)模式[4]可以有效減少不必要的服務(wù)器開銷、降低開發(fā)及維護(hù)成本適用于大多數(shù)企業(yè)的信息系統(tǒng)建設(shè)。由于界面的風(fēng)格以及展示的功能相對(duì)固定,翻譯的精細(xì)化程度相對(duì)較高,采用動(dòng)態(tài)內(nèi)容產(chǎn)生作的手段可以在保證功能的前提下,有效減少開發(fā)前端代碼的工作量。

        動(dòng)態(tài)內(nèi)容產(chǎn)生模式進(jìn)行國際化主要包含兩個(gè)步驟:一是對(duì)語言的解析,二是根據(jù)所解析的語言進(jìn)行本地化內(nèi)容填充。下面以基于J2EE的三層架構(gòu)的WEB系統(tǒng)為例對(duì)其流程進(jìn)行說明:

        服務(wù)器在接收到請(qǐng)求后首先進(jìn)行語言解析,依據(jù)請(qǐng)求中包含的參數(shù)確定出響應(yīng)頁面的語言種類。然后依據(jù)所解析的語言種類,在不同層次完成國際化的工作。

        一部分UI頁面直接在表現(xiàn)層的對(duì)模板(JSP)進(jìn)行編譯時(shí)完成;一部分UI頁面通過JS、CSS在客戶端瀏覽器渲染時(shí)完成。

        3 國際化方案的設(shè)計(jì)

        3.1 語言解析規(guī)則的設(shè)計(jì)

        由于JS對(duì)于國際化的支持相對(duì)Java較弱,所以擬將語言解析放在服務(wù)器端完成。J2SE中用地區(qū)(l ocal e)的概念代表用戶選擇的顯示語言以及日期、時(shí)間、貨幣等方面的格式化約定,這里選擇將該值作為解析的結(jié)果。

        通常基于MVC的表現(xiàn)層框架都提供了幾種默認(rèn)的地區(qū)解析器。例如在Spr ing MVC中,通過攔截器的方式配置地區(qū)解析器,默認(rèn)通過HTTP請(qǐng)求頭部解析區(qū)域acceptl anguage設(shè)置l ocal e。對(duì)語言解析的方式可以通過配置id為l ocal eResol ver的bean對(duì)象進(jìn)行修改,實(shí)現(xiàn)方式包括:根據(jù)session解析、根據(jù)cookie解析、固定地區(qū)等,當(dāng)有特殊要求時(shí)也可通過自定義方式實(shí)現(xiàn)。

        圖1 語言參數(shù)解析流程圖

        在根據(jù)session解析的方式中,標(biāo)識(shí)語言的參數(shù)作為session的一個(gè)屬性保存。該參數(shù)會(huì)隨著會(huì)話的結(jié)束而丟失。在根據(jù)cookie解析的方式中,標(biāo)識(shí)語言的參數(shù)會(huì)在cookie中長期保存更加符合現(xiàn)實(shí)中的應(yīng)用場景。對(duì)于沒有采用MVC框架的表現(xiàn)層,可以借鑒框架的結(jié)構(gòu)自定義過濾器(f il ter)來完成對(duì)語言的解析工作。

        如圖1所示,解析完成后,表現(xiàn)層的控制器可以獲取該值,并將其關(guān)聯(lián)到對(duì)應(yīng)線程的上下文中傳遞給業(yè)務(wù)邏輯層進(jìn)而完成業(yè)務(wù)動(dòng)態(tài)數(shù)據(jù)國際化。

        為了實(shí)現(xiàn)主動(dòng)切換語言的功能,需要提供一個(gè)服務(wù)直接修改地區(qū)判據(jù)。具體實(shí)現(xiàn)可以通過一個(gè)控制器修改cookie中的參數(shù)。

        3.2 服務(wù)器端的國際化設(shè)計(jì)

        服務(wù)器端的國際化包含兩個(gè)方面:消息等靜態(tài)數(shù)據(jù)的國際化和動(dòng)態(tài)數(shù)據(jù)的國際化。

        基于MVC的表現(xiàn)層框架通常對(duì)J2EE中的消息機(jī)制進(jìn)行了加強(qiáng),已經(jīng)實(shí)現(xiàn)在解析出l ocal e對(duì)象后自動(dòng)加載對(duì)應(yīng)語言名稱后綴的消息配置文件的功能??刂破鞲鶕?jù)請(qǐng)求參數(shù)調(diào)用不同的視圖(JSP)和模型組合并成返回的UI頁面。視圖中的消息預(yù)先定義在不同語言的消息配置文件中,依據(jù)l ocal e調(diào)用不同的消息配置文件,將其填充進(jìn)UI頁面。

        對(duì)于沒有采用MVC框架的項(xiàng)目,同樣可以利用JTSL的消息機(jī)制,但須自行完成不同種語言的標(biāo)簽庫的加載工作。這里可以通過將這一部分工作直接放在語言解析過濾器中實(shí)現(xiàn),通過代碼:Conf ig.set(r equest, Conf ig.FMT_LOCALE,l ocal e)修改JSTL的配置對(duì)象Conf ig即可。

        動(dòng)態(tài)數(shù)據(jù)的國際化較為復(fù)雜,依賴于業(yè)務(wù)邏輯層將語言作為參數(shù)進(jìn)行處理。一般需要對(duì)數(shù)據(jù)訪問層以及數(shù)據(jù)庫層進(jìn)行修改。常見的方案是根據(jù)語言參數(shù)在關(guān)系數(shù)據(jù)庫中按照單表或分表方式對(duì)不同語言的數(shù)據(jù)進(jìn)行存儲(chǔ),可以采用基于AOP的動(dòng)態(tài)數(shù)據(jù)國際化方案[5]實(shí)現(xiàn)。

        3.3 客戶端的國際化設(shè)計(jì)

        在瀏覽器進(jìn)行頁面渲染時(shí),JS控件、前端模板(EJS)等對(duì)所展示數(shù)據(jù)進(jìn)行內(nèi)容填充、格式化時(shí)需要完成國際化操作。

        通用的JS控件一般都包含獨(dú)立的本地化文件,采用多個(gè)文件分散管理標(biāo)簽的方式雖然簡單,但是沒有達(dá)到與后臺(tái)標(biāo)簽的統(tǒng)一管理的目的。因此,可以選擇采用在前端實(shí)現(xiàn)通用的標(biāo)簽加載器的方式進(jìn)行改進(jìn)并達(dá)到上述目的,如圖2所示。

        圖2 i18n標(biāo)簽加載器的工作流程

        由于語言的解析工作已在服務(wù)器端完成,頁面在加載時(shí)僅需根據(jù)l ocal e參數(shù)向服務(wù)器請(qǐng)求不同的JS、CSS文件。在開始渲染之前,利用一個(gè)通用的i18n標(biāo)簽加載器發(fā)出Aj ax請(qǐng)求從服務(wù)器端獲取對(duì)應(yīng)l ocal e的標(biāo)簽文件(.pr oper t ies),并按照各個(gè)UI控件的需求由i18n加載器轉(zhuǎn)換為特定的JS對(duì)象供UI組件使用。

        此外對(duì)于貨幣、時(shí)間等信息的國際化,一部分利用JSTL標(biāo)簽在服務(wù)器端處理,還有一部分必須在前端完成處理的利用For mat Js、Moment Js等通用格式化組件進(jìn)行。

        3.4 標(biāo)簽維護(hù)方案的設(shè)計(jì)

        由于本方案采用唯一的配置文件管理頁面上幾乎所有的靜態(tài)標(biāo)簽(消息),配置文件的體積會(huì)隨著系統(tǒng)的增大而不斷擴(kuò)大,不利于提高運(yùn)行和維護(hù)的效率。為了解決上述問題,需要建立通用的標(biāo)簽命名規(guī)則和標(biāo)簽控制界面。

        擬采用統(tǒng)一的命名方式: <應(yīng)用名>_<標(biāo)簽類型>_<標(biāo)簽名稱>。企業(yè)內(nèi)部根據(jù)系統(tǒng)名稱確定唯一的<應(yīng)用名>,<標(biāo)簽類型>分為m(message/消息)和l(l abel/標(biāo)簽),<標(biāo)簽名稱>盡量采用標(biāo)簽顯示值得英文單詞駝峰形式(可根據(jù)情況選取縮寫)。

        為了減少標(biāo)簽的數(shù)量,規(guī)定m類型標(biāo)簽區(qū)分大小寫,l類型不區(qū)分。對(duì)l類型的標(biāo)簽的格式化通過設(shè)置CSS3的t ext-t r ansf or m或者JS函數(shù)進(jìn)行。

        建另外,需要立統(tǒng)一的標(biāo)簽管理頁面,并采用如spr ing中提供的動(dòng)態(tài)加載資源文件的模式(Rel oadabl eR esour ceBundl eMessageSour ce)加載消息配置文件。后期用戶如果對(duì)WEB界面上的任意標(biāo)簽值不滿意,可以通過的標(biāo)簽管理界面查詢標(biāo)簽并修改,并且能夠?qū)崟r(shí)地看到效果,避免用戶直接接觸到配置文件。

        4 結(jié)語

        本文通過對(duì)現(xiàn)有國際化方案的比較和分析,針對(duì)企業(yè)基于J2EE三層結(jié)構(gòu)的信息系統(tǒng)設(shè)計(jì)了一整套國際化方案,并提出利用統(tǒng)一的資源文件管理前后端標(biāo)簽,并創(chuàng)建標(biāo)簽管理頁面進(jìn)行后續(xù)維護(hù)。該方案已在公司內(nèi)部的信息系統(tǒng)項(xiàng)目中得到驗(yàn)證。

        [1]董俊龍,王武魁.淺議基于JSF的Java國際化編程及其實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2009,25:170-171.

        [2]陸榮幸,郁洲,阮永良,等.J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,20:144-146.

        [3]周中雨,呂琳琳.J2EE平臺(tái)下WEB應(yīng)用國際化的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2006,09(9):69-71.

        [4]張菲菲,薛賀,李建良.多語言Web網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2008,5:43-45.

        [5]胡泊.基于JSF的國際化框架的設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2009.

        猜你喜歡
        配置文件服務(wù)器端頁面
        大狗熊在睡覺
        刷新生活的頁面
        提示用戶配置文件錯(cuò)誤 這樣解決
        搭建簡單的Kubernetes集群
        互不干涉混用Chromium Edge
        忘記ESXi主機(jī)root密碼怎么辦
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        在Windows中安裝OpenVPN
        網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
        同一Word文檔 縱橫頁面并存
        日本夜爽爽一区二区三区| 国产成品精品午夜视频| 日本中文字幕一区二区视频| 青青草视频在线观看入口| 成视频年人黄网站免费视频| 亚洲精品国产av成拍色拍| 国产人成亚洲第一网站在线播放| 日韩人妖一区二区三区| av熟妇一区二区三区| 久激情内射婷内射蜜桃| 国产在线一区观看| 日韩精品一二区在线视频| 人妻熟女翘屁股中文字幕| 国产精品成人aaaaa网站| 国产精品二区在线观看| 激情五月天俺也去综合网| 中文字幕亚洲视频三区| 一个少妇的淫片免费看| 麻豆果冻传媒在线观看| 国产成人无码免费网站| 中文字幕国产精品中文字幕| 亚洲乱码一区二区三区在线观看 | 无码人妻一区二区三区免费手机| av天堂一区二区三区精品| 丰满人妻一区二区三区蜜桃| 熟妇人妻无码中文字幕老熟妇| 亚洲精品一区二区三区大桥未久| 国产精品国产自线拍免费| 国产一级黄色片在线播放| 麻豆婷婷狠狠色18禁久久| 日韩欧美亚洲综合久久影院d3| 亚洲视频在线播放免费视频| 国产一区亚洲二区三区极品| 凹凸在线无码免费视频| 999精品全免费观看视频| 国产精品黑丝美女av| 日本真人边吃奶边做爽动态图| 国产在线无码一区二区三区| 中文字幕日韩人妻高清在线| 国产免费二区三区视频| 骚片av蜜桃精品一区|