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

        ?

        某調(diào)度平臺(tái)國(guó)際化語(yǔ)言的解決方案

        2012-03-15 11:00:06
        電子世界 2012年19期
        關(guān)鍵詞:配置文件字符菜單

        一、引言

        目前該系統(tǒng)的國(guó)際化的背景主要來(lái)自兩個(gè)方面,其一,系統(tǒng)只支持中文,無(wú)法接收、處理、發(fā)送其他語(yǔ)言字符集;其二,由于面向的不同的國(guó)家地區(qū)有著不同的使用習(xí)慣,例如時(shí)間、日期、貨幣的表達(dá)方式,閱讀順序(從左到右或從右到左)等,因此必須要對(duì)軟件進(jìn)行改動(dòng),使之能夠處理不同的語(yǔ)言文字,提供本地語(yǔ)言信息,支持不同的使用習(xí)慣等。而這種修改如果變動(dòng)大量的源代碼,這就違背了軟件工程中組件以及重用的思想,會(huì)造成升級(jí)困難,伸縮性差,不易維護(hù),成本升高等一系列問(wèn)題。

        1.軟件的國(guó)際化

        軟件的國(guó)際化(Internationalization),是指不對(duì)軟件系統(tǒng)使用者做任何假設(shè)的開(kāi)發(fā)方法。這包括了使用者的語(yǔ)言,文字編碼方式,習(xí)慣數(shù)據(jù)表達(dá)方式,書(shū)寫(xiě)方向,宗教信仰等。經(jīng)國(guó)際化方法開(kāi)發(fā)的軟件可以按特定的地域環(huán)境要求改變自身的表現(xiàn)行為,而這僅僅需要軟件后期施工人員作少許的配置變更,而不是更改大量的程序源代碼。由于不需要重新編譯,從而降低了對(duì)施工人員的技術(shù)要求,更利于開(kāi)發(fā)團(tuán)隊(duì)作為一個(gè)有機(jī)整體進(jìn)行分工運(yùn)作。采用了國(guó)際化開(kāi)發(fā)方法,系統(tǒng)的本地化就變得較為簡(jiǎn)單。

        一個(gè)真正國(guó)際化的軟件應(yīng)該滿足:(1)數(shù)據(jù)的透明性,能處理各種類型的語(yǔ)言。(2)編碼的獨(dú)立性,系統(tǒng)對(duì)所處理字符的編碼方式不作任何限制。(3)單一的源程序,并支持地域數(shù)據(jù)庫(kù)。系統(tǒng)的源程序只有一個(gè)版本,該版本經(jīng)編譯、連接后,在運(yùn)行時(shí)能根據(jù)不同的地域數(shù)據(jù)庫(kù)處理與地域相關(guān)的數(shù)據(jù)。在同一系統(tǒng)中,存在多個(gè)地域數(shù)據(jù)庫(kù),用戶可選擇任一個(gè)地域數(shù)據(jù)庫(kù)。(4)遵循相關(guān)的國(guó)際標(biāo)準(zhǔn),保證程序的可移植性。

        2.現(xiàn)狀

        該調(diào)度平臺(tái)國(guó)際化語(yǔ)言的開(kāi)發(fā),從語(yǔ)言翻譯的內(nèi)容上看可分為四個(gè)部分:人機(jī)界面、數(shù)據(jù)庫(kù)表、程序輸出和配置文件。

        1)人機(jī)界面語(yǔ)言翻譯,是指界面上標(biāo)題欄、菜單欄、工具欄、狀態(tài)欄、界面內(nèi)的文字標(biāo)簽、各種對(duì)話框和屬性框中的文字翻譯(由用戶錄入的畫(huà)面文件內(nèi)容一般不存在語(yǔ)言翻譯的問(wèn)題),這部分的語(yǔ)言翻譯有比較成熟的QT國(guó)際化方案的支持,目前已經(jīng)在開(kāi)發(fā)當(dāng)中;

        2)數(shù)據(jù)庫(kù)表的語(yǔ)言翻譯,主要考慮的是數(shù)據(jù)字典表,如表名表、域名表、菜單表(由用戶錄入的表內(nèi)容一般不存在語(yǔ)言翻譯的問(wèn)題);

        3)程序輸出的語(yǔ)言翻譯,這里的輸出即是指打印在后臺(tái)屏幕或文件中的日志輸出,也是指保存到實(shí)時(shí)庫(kù)或商用庫(kù)中的寫(xiě)庫(kù)輸出,同時(shí)也是指一個(gè)應(yīng)用程序到另一個(gè)應(yīng)用程序的交互輸出;

        4)配置文件的語(yǔ)言翻譯,程序輸出指的是輸出的源頭來(lái)源于程序本身,這里指的是輸出的源頭來(lái)源于配置文件,所以也必須把好配置文件這一關(guān)口,才能使得整個(gè)系統(tǒng)得到全方位的語(yǔ)言翻譯。

        二、軟件國(guó)際化的現(xiàn)行做法

        1.QT國(guó)際化

        QT提供了國(guó)際化語(yǔ)言的支持,其語(yǔ)言翻譯的過(guò)程是:(1)提取源代碼中的待翻譯文本;(2)翻譯人員對(duì)提取的文本進(jìn)行語(yǔ)言翻譯并形成翻譯文件;(3)程序運(yùn)行時(shí)將加載該翻譯文件并動(dòng)態(tài)查找對(duì)應(yīng)的翻譯文本進(jìn)行替換。

        QT提供了三種相關(guān)的工具:Lupdate是文本提取工具,提取的文本存放在翻譯文件.ts中;Linguist是翻譯人員使用的翻譯工具,對(duì).ts文件的內(nèi)容進(jìn)行翻譯;Lrelease對(duì)翻譯文件.ts進(jìn)行壓縮,形成高壓縮比的.qm文件。若要使程序源碼中的一個(gè)字符串能夠被Lupdate所提取,必須將這個(gè)字符串放在QT提供的一個(gè)靜態(tài)函數(shù)tr()中,才能夠被Lupdate工具識(shí)別并提取出來(lái)。如: saveButton-〉setText(tr)"保存"))。運(yùn)行時(shí)如果翻譯文件中有翻譯字符,則tr()將嘗試使用翻譯字符來(lái)替換字符串文字,否則它將使用原文本。

        此方法的缺點(diǎn)在于只適合應(yīng)用于qt環(huán)境,無(wú)法在C++環(huán)境中使用。

        2.Mac國(guó)際化

        Mac OS X操作系統(tǒng)是一個(gè)國(guó)際化的操作系統(tǒng)。Mac的國(guó)際化通過(guò)束(bundle)來(lái)實(shí)現(xiàn)的。

        束是Mac OS X中重要的文件組織形式,里面分開(kāi)存放了本地化與非本地化資源。束(bundle)是在文件系統(tǒng)中存放可執(zhí)行代碼及與該代碼有關(guān)軟件資源的一種目錄。束目錄包含資源,資源包括諸如圖像、聲音以及某些軟件使用的本地化字符串等。束(bundle)可包含多個(gè)資源組,每一組按語(yǔ)言、地區(qū)以及平臺(tái)對(duì)資源進(jìn)行分組整合。通過(guò)將這些資源組和可執(zhí)行代碼集合成一個(gè)單一的包,就能創(chuàng)建一個(gè)可在任何被支持的平臺(tái)上正常運(yùn)行的應(yīng)用程序、框架或插件的版本。通過(guò)使用此模型,能根據(jù)用戶的語(yǔ)言預(yù)置參數(shù)自動(dòng)地本地化應(yīng)用程序的人機(jī)界面。

        Mac OS X中束分為三種類型:1)應(yīng)用程序(application),應(yīng)用程序包是一個(gè)包含了那些對(duì)于啟動(dòng)應(yīng)用程序所必需的資源(包括應(yīng)用程序可執(zhí)行文件)的束。2)框架(framework)框架是一個(gè)包含了動(dòng)態(tài)共享庫(kù)和與該庫(kù)相關(guān)的所有資源(例如:頭文件、圖像以及文檔)的束。3)可加載束(loadable bundle)象應(yīng)用程序一樣,可加載束通常包含可執(zhí)行代碼以及相關(guān)的資源。

        系統(tǒng)根據(jù)需要針對(duì)不同語(yǔ)言、國(guó)家或文化區(qū)域來(lái)定制或本地化束。實(shí)際上,束在運(yùn)行時(shí)究竟使用哪一組本地化資源是由用戶決定的。

        3.NET國(guó)際化

        圖1

        圖2

        .NET通過(guò)CLR來(lái)實(shí)現(xiàn)國(guó)際化。當(dāng)基于.NET開(kāi)發(fā)的應(yīng)用程序啟動(dòng)時(shí),CLR(CommonLanguage Runtime)將原程序的執(zhí)行分成了兩個(gè)步驟:首先CLR會(huì)對(duì)托管原代碼進(jìn)行即時(shí)編譯,轉(zhuǎn)化為IL(Interm ediate Language),然后CLR會(huì)根據(jù)系統(tǒng)開(kāi)發(fā)人員指定的國(guó)家或地區(qū)設(shè)置,從資源包中獲取相應(yīng)的資源文件,最終顯示在系統(tǒng)的表現(xiàn)界面上。下圖展現(xiàn)了在.NET中實(shí)現(xiàn)國(guó)際化與本地化的流程,如圖1。

        表1

        4.Unix國(guó)際化

        Unix國(guó)際化可以分成三個(gè)部分,如圖2所示。

        (1)內(nèi)核的國(guó)際化

        該層次是指對(duì)操作系統(tǒng)的基本組成部分,如設(shè)備管理、文件系統(tǒng)進(jìn)行改造,使之具有獨(dú)立于具體語(yǔ)言行為的能力。一種典型的實(shí)現(xiàn)方法是在內(nèi)核中采用基于ISO 10646.1標(biāo)準(zhǔn)的寬字符作為字符表示形式。

        (2)開(kāi)發(fā)系統(tǒng)的國(guó)際化

        開(kāi)發(fā)系統(tǒng)一般是指系統(tǒng)為應(yīng)用軟件開(kāi)發(fā)所提供的系統(tǒng)調(diào)用、系統(tǒng)函數(shù)及相關(guān)的工具,它是應(yīng)用軟件國(guó)際化的基礎(chǔ),也是國(guó)際化的難點(diǎn)和重點(diǎn)。在UNIX開(kāi)發(fā)系統(tǒng)的國(guó)際化中,需要對(duì)原有的部分函數(shù)進(jìn)行改造或再開(kāi)發(fā),如字符分類和轉(zhuǎn)換函數(shù),字符串處理函數(shù),正則表達(dá)式處理函數(shù),輸入輸出函數(shù),與時(shí)間、數(shù)字表示相關(guān)的函數(shù)及寬字符與多字節(jié)字符的轉(zhuǎn)換函數(shù)等。一般方法是在保留單字節(jié)處理函數(shù)的同時(shí),提供寬字節(jié)字符的處理函數(shù)。

        (3)實(shí)用程序的國(guó)際化

        實(shí)用程序國(guó)際化的基本任務(wù)是:在程序中廢除各種基于語(yǔ)言的假定,如字符表示(通常假定為ASCII),日期和時(shí)間的表示,排序方法,貨幣單位,數(shù)字表示方法等,使相關(guān)的處理能獨(dú)立于語(yǔ)言,并根據(jù)運(yùn)行環(huán)境而動(dòng)態(tài)變化。提取提示信息,形成消息類文件。把軟件中的提示信息抽取后形成消息類文件,能使提示信息的翻譯和改變獨(dú)立于源程序。

        三、某調(diào)度系統(tǒng)國(guó)際化的解決方案

        1.數(shù)據(jù)庫(kù)表語(yǔ)言翻譯

        應(yīng)用程序中除了界面程序需要國(guó)際化外,通常還有較多獲取數(shù)據(jù)庫(kù)中表中文名、域中文名、菜單名和菜單顯示值的代碼,獲取的中文名要么輸出到前臺(tái)界面上顯示,要么輸出到后臺(tái)上打印。因此需要從數(shù)據(jù)源頭上進(jìn)行控制,本部分主要考慮的是數(shù)據(jù)字典表的語(yǔ)言翻譯,如表名表、域名表、菜單表,由用戶錄入的表內(nèi)容一般不存在語(yǔ)言翻譯的問(wèn)題。

        對(duì)于數(shù)據(jù)字典表,一個(gè)顯而易見(jiàn)的方案是增加對(duì)應(yīng)的域用于描述本地化語(yǔ)言,如表信息表中,有表英文名、表中文名,也應(yīng)該建立對(duì)應(yīng)的表法文名、表葡萄牙名、表阿拉伯名等字段,域信息表和菜單表同樣也應(yīng)該有此類似的字段。但系統(tǒng)源碼庫(kù)中獲取table_name_chn的代碼多達(dá)300多處,獲取column_name_chn的代碼多達(dá)400多處,獲取菜單名的地方也非常多,如果采用這種擴(kuò)展域的方式,意味著這些源碼都必須進(jìn)行改動(dòng),工作量比較大,并且每增加一種語(yǔ)言,數(shù)據(jù)庫(kù)表結(jié)構(gòu)都將進(jìn)行改動(dòng),不利于程序的穩(wěn)定和后期的維護(hù)。

        經(jīng)過(guò)多方咨詢,一個(gè)比較實(shí)際的方案是將數(shù)據(jù)字典表中的中文字段的內(nèi)容直接寫(xiě)成本地化語(yǔ)言,如表中文名字段中存儲(chǔ)的內(nèi)容就直接是表法文名、或者是表葡萄牙名、或者是表阿拉伯名,域信息表和菜單表也同樣如此。為了便于我們工程上對(duì)照維護(hù),再增加一個(gè)中文對(duì)照域,如表信息表中增加一個(gè)域“表中文對(duì)照名”,該域僅僅用于工程人員對(duì)照識(shí)別,同樣域信息表中增加一個(gè)域“域中文對(duì)照名”、菜單表中增加“菜單中文對(duì)照名”、“顯示值中文對(duì)照名”。這樣一來(lái),源碼中用到table_name_chn、column_name_chn的地方可以無(wú)需更改。但采用這種方案對(duì)“一套系統(tǒng)同時(shí)顯示多種語(yǔ)言”的功能實(shí)現(xiàn)有較大難度。

        2.程序輸出語(yǔ)言翻譯

        除人機(jī)界面上的語(yǔ)言翻譯外,程序后臺(tái)輸出中的語(yǔ)言翻譯也是系統(tǒng)中一個(gè)非常重要的部分。這里的輸出即是指打印在后臺(tái)屏幕或文件中的日志輸出,也是指保存到實(shí)時(shí)庫(kù)或商用庫(kù)中的寫(xiě)庫(kù)輸出,同時(shí)也是指一個(gè)應(yīng)用程序到另一個(gè)應(yīng)用程序的交互輸出。這部分的內(nèi)容在源碼中大量出現(xiàn)。

        目前采用的一個(gè)方案是直接在各自應(yīng)用程序中判斷當(dāng)前語(yǔ)言環(huán)境變量后采用if{}else{}的方式來(lái)實(shí)現(xiàn)國(guó)際化的后臺(tái)輸出,這種方式改動(dòng)的地方較多,工作量比較大。

        事實(shí)上,按照QT的翻譯原理,完全可以自行設(shè)計(jì)開(kāi)發(fā)一個(gè)公用的動(dòng)態(tài)庫(kù)進(jìn)行翻譯。詳細(xì)設(shè)計(jì)方案如下:

        1)源碼中統(tǒng)一用DYN_LANG函數(shù)來(lái)標(biāo)示所有的待翻譯文本;

        2)開(kāi)發(fā)一個(gè)文本提取程序find_dyn_lang,用于提取源碼中所有用DYN_LANG標(biāo)示的文本,并形成.lang文件;

        3)翻譯人員對(duì).lang文件進(jìn)行語(yǔ)言翻譯,.lang文件格式如表1。

        也可以按照語(yǔ)種的不同存在不同的文件中。

        4)DYN_LANG函數(shù)實(shí)現(xiàn)如下,簡(jiǎn)單的偽代碼:

        char * DYN_LANG(const char *src_lang)

        {從環(huán)境變量中讀取當(dāng)前設(shè)置的語(yǔ)言變量;打開(kāi).lang文件;查找對(duì)應(yīng)的替換字符串;//這里需要考慮查找效率return dst_lang;}

        3.配置文件語(yǔ)言翻譯

        配置文件作為程序輸入的一個(gè)源頭,也必須對(duì)其進(jìn)行翻譯才能使得系統(tǒng)得到全方位的語(yǔ)言翻譯,如下登陸對(duì)話框中,來(lái)自于配置文件中的登陸時(shí)長(zhǎng)的中文字符,無(wú)論是QT的解決方案還是自行設(shè)計(jì)的DYN_LANG解決方案都無(wú)法提取其內(nèi)容。

        由于這部分的內(nèi)容不是很多,可采用多個(gè)配置文件的方式,如user_login_en.ini、user_login_zh.ini、user_login_fr.ini。

        程序?qū)崿F(xiàn)上判斷當(dāng)前設(shè)置的語(yǔ)言變量,打開(kāi)對(duì)應(yīng)的配置文件即可。

        4.需要進(jìn)一步解決的問(wèn)題

        1)程序中有字符串拼接是按照中文規(guī)則拼接的,如告警的內(nèi)容,如果換成英文語(yǔ)法,可能需要調(diào)整;

        2)程序中對(duì)一些中文字符串查找或比較的代碼需要小心處理。如“故障告警行為”,中文搜索“故障”兩個(gè)漢字可以匹配,如果換成英文,一個(gè)是英文的形容詞,一個(gè)是英文名詞,將無(wú)法匹配,影響程序后續(xù)運(yùn)行邏輯;

        3)程序中的字符串長(zhǎng)度需要仔細(xì)核對(duì),如char str[5]=”刷新”,翻譯后的”refresh”將會(huì)使長(zhǎng)度越界。同樣,在界面上設(shè)計(jì)好的按鈕長(zhǎng)度翻譯成英文后,按鈕長(zhǎng)度可能不夠用。

        [1]崔啟亮.軟件本地化成為市場(chǎng)新金礦[J].IT 時(shí)代周刊,2004(20):18-19.

        [2]馬應(yīng)章.“國(guó)際化”“本地化”相輔相成[J].中國(guó)計(jì)算機(jī)用戶,1999(7):25-26.

        [3]Hirtle S C,Jonides J.Evidence of Hierarchies in Cognitive Maps.Memory &Cognition,1985,13(3):208-217.

        [4]王華偉,崔啟亮.軟件本地化——本地化行業(yè)透視與實(shí)務(wù)指南[M].北京:保捷環(huán)球北京公司電子出版社,2005:10-12.

        [5]孟巖.蘋果Mac OS X,技術(shù)重構(gòu)的成功典范[J].程序員,2005(6):44-45.

        猜你喜歡
        配置文件字符菜單
        提示用戶配置文件錯(cuò)誤 這樣解決
        尋找更強(qiáng)的字符映射管理器
        中國(guó)新年菜單
        搭建簡(jiǎn)單的Kubernetes集群
        互不干涉混用Chromium Edge
        字符代表幾
        一種USB接口字符液晶控制器設(shè)計(jì)
        電子制作(2019年19期)2019-11-23 08:41:50
        消失的殖民村莊和神秘字符
        忘記ESXi主機(jī)root密碼怎么辦
        本月菜單
        美食堂(2017年1期)2017-01-13 01:37:42
        日本一区二区不卡精品| 中文字幕人妻丝袜乱一区三区| 醉酒后少妇被疯狂内射视频| 亚洲成a人片在线播放观看国产| 亚洲人妻中文字幕在线视频| 精品国产av一区二区三四区| 亚洲av日韩一区二区| 少妇人妻综合久久中文字幕| 1000部夫妻午夜免费| 日本口爆吞精在线视频| 国产亚洲精品高清视频| 最新中文字幕亚洲一区| 狠狠色噜噜狠狠狠777米奇| 国产成人a人亚洲精品无码| 国产av无码专区亚洲av手机麻豆 | 亚洲色欲久久久久综合网| 麻豆密入视频在线观看| 国产av一区仑乱久久精品| 国产亚洲精品久久情侣| 亚洲中文字幕久久精品无码a| 中文字幕无码不卡一区二区三区 | 中文字幕日本女优在线观看| 乳乱中文字幕熟女熟妇| 一本无码中文字幕在线观| 94久久国产乱子伦精品免费| 国产国拍亚洲精品永久不卡| 国产精品国产三级国产专区51区 | 午夜福利视频一区二区二区| 免费观看交性大片| 久久精品熟女亚洲av香蕉| 脱了老师内裤猛烈进入| 国产一卡2卡3卡四卡国色天香| 欧美 亚洲 国产 日韩 综AⅤ| 国语对白三级在线观看| 亚洲国产精品一区二区久久恐怖片| 免费高清av一区二区三区| 国产成人av一区二区三区无码| 亚洲一区二区国产精品视频| 二区视频在线免费观看| 中文字幕在线日亚洲9| 久久成人麻豆午夜电影|