摘要:默認(rèn)情況下,是英文環(huán)境,調(diào)取的是的資源其實無需翻譯。但是,如前面提到的,語言包只是包含了部分常規(guī)字串的翻譯,如果遇到?jīng)]有包含的常規(guī)字串怎么辦呢例如,本例中的語言包并沒有對,進(jìn)行翻譯,所以即使切換了語言,它們?nèi)耘f是英文。
注:本文是個人調(diào)試分析所得,非官方文檔,請酌情選用參考。文中分析的數(shù)據(jù)由https://extract.autodesk.io轉(zhuǎn)換下載而來。
談到信息本地化,個人覺得包含三個方面的內(nèi)容:
1) Forge Viewer的操作菜單名,提示字串,錯誤提示字串等
2) 原始模型結(jié)構(gòu)節(jié)點名或構(gòu)件額外屬性的名和值,例如在Navisworks中額外的附加屬性
3) 常規(guī)屬性的名和值, 即任何模型可能會出現(xiàn)的缺省屬性名和值,例如截圖中的,Item,Color, Material等
Forge在轉(zhuǎn)換原始模型的時候,對于#2中的內(nèi)容存儲到objects_attrs.json.gz之中,所以#2中提到的本地化內(nèi)容是直接可以顯示的。應(yīng)該無需額外的工作。
而談到#1 和 #3,首先Forge轉(zhuǎn)換服務(wù)會配置不同語言包,在Forge Viewer數(shù)據(jù)包層次結(jié)構(gòu)中位于:reslocales. 每種語言包中有個allstrings.json,其中包括了#1的所有字串對應(yīng)的翻譯配對,#3中部分字串的翻譯配對。Forge Viewer的JavaScript庫封裝了名為i18n的語言翻譯類,用于調(diào)用對應(yīng)語言包資源的和翻譯字串的查詢。
默認(rèn)情況下,是英文環(huán)境,調(diào)取的是reslocalesen 的資源(其實無需翻譯)。當(dāng)切換語言時,i18n會根據(jù)設(shè)置的語言,刷新i18n,調(diào)取對應(yīng)的語言包到瀏覽器內(nèi)存。而Forge Viewer怎么又去把界面上顯示出來的英文字串替換成英文呢?經(jīng)過調(diào)試分析,發(fā)現(xiàn)在大多數(shù)的界面字串的DOM元素創(chuàng)建過程中,Viewer的JavaSript庫都賦予了一個名為 data-i18n 的屬性,而i18n有個方法叫做localize,用于遍歷所有含有 data-i18n 的屬性DOM元素,根據(jù)語言包得到本地化字串,再替換div顯示的字串。
所以,如果想切換到某個語言版本,調(diào)用i18n的setLng和localize方法即可。zh-HANS是簡體中文版。
Autodesk.Viewing.i18n.setLng("zh-HANS") Autodesk.Viewing.i18n.localize()
但是,如前面提到的,語言包只是包含了部分常規(guī)字串的翻譯,如果遇到?jīng)]有包含的常規(guī)字串怎么辦呢? 例如,本例中的語言包并沒有對Item,Color, Material進(jìn)行翻譯,所以即使切換了語言,它們?nèi)耘f是英文。
首先能想到的折中辦法是:先在對應(yīng)語言包提供好翻譯,例如allstrings.json添加Item,Color, Material的本地化語言字串,不過實際測試發(fā)現(xiàn),不管用 :( 經(jīng)過調(diào)試發(fā)現(xiàn),在Viewer的JavaScript庫新建每一條屬性或?qū)傩灶悇e時,并沒有設(shè)置賦予了名為 data-i18n 的屬性,雖然代碼里是有這個分支,但無法通過簡單的方式干預(yù),設(shè)置該選項。也不建議去直接改造Viewer的JavaScript代碼 (官方對改造后的JavaScript產(chǎn)生的問題不保證給予支持)
最后,想出一個辦法:在切換語言的時候,搜索出所有屬性或?qū)傩灶悇e的DOM元素,如果沒有data-i18n 的屬性,則加上,最后再調(diào)用一次i18n.localize。此方法只需額外寫一個函數(shù)調(diào)用即可,不用改動Viewer的JavaScript代碼。只是需要在適當(dāng)?shù)臅r機(jī)觸發(fā)一下。
function swtichLanguage(lng) { //加載語言資源 Autodesk.Viewing.i18n.setLng("zh-HANS",{localizeCategory:true},function(cb){ //尋找所有屬性和屬性類別的DOM元素 Array.prototype.forEach.call (document.querySelectorAll ("div.propertyName,div.categoryName"), function (eachDOM){ //賦予"data-i18n"屬性 var if_i18n = eachDOM.getAttribute("data-i18n"); if(if_i18n === null){ var text = eachDOM.innerHTML; eachDOM.setAttribute("data-i18n", text); } }); //翻譯替換 Autodesk.Viewing.i18n.localize(); }); };
注意:
1.由于allstrings.json只在離線模式下能夠修改,所以本法不適用于在線訪問模式。已就此向開發(fā)部提交了需求
2.也和開發(fā)部提交了另外一個需求,希望在JavaScript庫中能把屬性和屬性類別也加上data-i18n屬性,而不用額外的操作
3.為了提高性能,語言包的加載對每個應(yīng)用只加載一次,假設(shè)加載后又去修改是用不了的。因此需要將此緩存的資源剔除掉,再加載。這個技術(shù)相信各位都有辦法。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82712.html
摘要:本文章的原作是的在版的里引入了一個重大的變革,開始支持載入外部擴(kuò)展,細(xì)節(jié)可以參考這篇文章重大變更。這個函數(shù)自此刻起的函數(shù)回傳值不在是布林值,取而代之的是一個實例,這表示開始支持使用非同步的方法在載入擴(kuò)展。 本文章的原作是 Autodesk ADN 的 Philippe Leefsma 在 v2.15 版的 Forge Viewer API 里引入了一個重大的變革,Viewer開始支持載...
摘要:團(tuán)隊陸續(xù)的推出了很多學(xué)習(xí)資料和樣例工程,這些資源在學(xué)習(xí)簡談做了介紹。近期,團(tuán)隊制作了一個向?qū)竭M(jìn)階教程,旨在通過一步一步的教學(xué),讓初學(xué)者熟悉有關(guān)和的用法。目前上線的有,,即將上線的是。 Autodesk Forge團(tuán)隊陸續(xù)的推出了很多學(xué)習(xí)資料和樣例工程,這些資源在Autodesk Forge 學(xué)習(xí)簡談做了介紹。而部分資源由于API本身的變動,或者代碼的變動,可能無法正常使用了,我們會逐...
摘要:團(tuán)隊陸續(xù)的推出了很多學(xué)習(xí)資料和樣例工程,這些資源在學(xué)習(xí)簡談做了介紹。近期,團(tuán)隊制作了一個向?qū)竭M(jìn)階教程,旨在通過一步一步的教學(xué),讓初學(xué)者熟悉有關(guān)和的用法。目前上線的有,,即將上線的是。 Autodesk Forge團(tuán)隊陸續(xù)的推出了很多學(xué)習(xí)資料和樣例工程,這些資源在Autodesk Forge 學(xué)習(xí)簡談做了介紹。而部分資源由于API本身的變動,或者代碼的變動,可能無法正常使用了,我們會逐...
摘要:現(xiàn)在讓我們修改這個示例讓他可以展示兩個同項目但不同版號的模型及。示例執(zhí)行結(jié)果如下這邊是這個比較模型的括展代碼英文原文 showImg(https://segmentfault.com/img/bVOmjp?w=1542&h=925); 熟悉 BIM360 Team 的朋友可能知道他有一個很牛的模型文檔版本比較的功能,但如果模型是放在 Google 云盤或是百度云盤上有可能做到嗎? Au...
閱讀 1402·2021-10-11 10:59
閱讀 3103·2019-08-30 15:54
閱讀 2724·2019-08-30 13:19
閱讀 2455·2019-08-30 13:02
閱讀 2371·2019-08-30 10:57
閱讀 3347·2019-08-29 15:40
閱讀 981·2019-08-29 15:39
閱讀 2299·2019-08-29 12:40