许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Autodesk Forge Viewer信息本地化技术分析

Autodesk Forge Viewer信息本地化技术分析

阅读数 2
点赞 0
article_banner

注:本文是个人调试分析所得,非官方文档,请酌情选用参考。文中分析的数据由https://extract.autodesk.io转换下载而来。

谈到信息本地化,个人觉得包含三个方面的内容:

1) Forge Viewer的操作菜单名,提示字串,错误提示字串等


2) 原始模型结构节点名或构件额外属性的名和值,例如在Navisworks中额外的附加属性


3) 常规属性的名和值, 即任何模型可能会出现的缺省属性名和值,例如截图中的,Item,Color, Material等


Forge在转换原始模型的时候,对于#2中的内容存储到objects_attrs.json.gz之中,所以#2中提到的本地化内容是直接可以显示的。应该无需额外的工作。

而谈到#1 和 #3,首先Forge转换服务会配置不同语言包,在Forge Viewer数据包层次结构中位于:res\locales. 每种语言包中有个allstrings.json,其中包括了#1的所有字串对应的翻译配对,#3中部分字串的翻译配对。Forge Viewer的JavaScript库封装了名为i18n的语言翻译类,用于调用对应语言包资源的和翻译字串的查询。


默认情况下,是英文环境,调取的是res\locales\en 的资源(其实无需翻译)。当切换语言时,i18n会根据设置的语言,刷新i18n,调取对应的语言包到浏览器内存。而Forge Viewer怎么又去把界面上显示出来的英文字串替换成英文呢?经过调试分析,发现在大多数的界面字串的DOM元素创建过程中,Viewer的JavaSript库都赋予了一个名为 data-i18n 的属性,而i18n有个方法叫做localize,用于遍历所有含有 data-i18n 的属性DOM元素,根据语言包得到本地化字串,再替换div显示的字串。


所以,如果想切换到某个语言版本,调用i18n的setLng和localize方法即可。zh-HANS是简体中文版。

Autodesk.Viewing.i18n.setLng('zh-HANS')Autodesk.Viewing.i18n.localize()

但是,如前面提到的,语言包只是包含了部分常规字串的翻译,如果遇到没有包含的常规字串怎么办呢? 例如,本例中的语言包并没有对Item,Color, Material进行翻译,所以即使切换了语言,它们仍旧是英文。

首先能想到的折中办法是:先在对应语言包提供好翻译,例如allstrings.json添加Item,Color, Material的本地化语言字串,不过实际测试发现,不管用 :( 经过调试发现,在Viewer的JavaScript库新建每一条属性或属性类别时,并没有设置赋予了名为 data-i18n 的属性,虽然代码里是有这个分支,但无法通过简单的方式干预,设置该选项。也不建议去直接改造Viewer的JavaScript代码 (官方对改造后的JavaScript产生的问题不保证给予支持)


最后,想出一个办法:在切换语言的时候,搜索出所有属性或属性类别的DOM元素,如果没有data-i18n 的属性,则加上,最后再调用一次i18n.localize。此方法只需额外写一个函数调用即可,不用改动Viewer的JavaScript代码。只是需要在适当的时机触发一下。

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只在离线模式下能够修改,所以本法不适用于在线访问模式。已就此向开发部提交了需求

2.也和开发部提交了另外一个需求,希望在JavaScript库中能把属性和属性类别也加上data-i18n属性,而不用额外的操作

3.为了提高性能,语言包的加载对每个应用只加载一次,假设加载后又去修改是用不了的。因此需要将此缓存的资源剔除掉,再加载。这个技术相信各位都有办法。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空