石鑫华视觉论坛

 找回密码
 注册会员
查看: 252|回复: 0

[原创] LabVIEW利用标题实现多国语言界面,有的成功,有的失败

[复制链接]
  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 3387 天

    连续签到: 9 天

    [LV.Master]2000FPS

     楼主| 发表于 2024-3-1 15:01:09 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    LabVIEW的控件的标签在程序运行时是不可以修改的。但是标题却是可以在运行时实时修改的。因此我们可以在设计VI的时候,隐藏掉标签Label,显示标题Caption。以标题的内容作为界面元素,这样我们可以通过代码修改各个控件的标题实现多国语言的切换。这种方法当界面上的控件比较多时相对比较复杂,因为每个控件都需要修改标题。这里介绍一个VIPM中的工具——JKI Simple Localization,为我们提供基于修改标题的原理、实现不同语言切换的方法。
    首先,打开VI Pacakge Manager ( VIPM ) , 搜索JKI Simple Localization​,选中JKI Simple Localization,确认安装到的LabVIEW版本,然后点击Install安装。安装的时候VIPM会自动提示安装相关的其它工具包,许可协议都点确认。
       image1.png
    JKI Simple Localization
    image2.png
    JKI Simple Localization必要的依赖工具包
             依赖工具包,全选,不要取消。可以看到其中有Unicode语言相关的工具包。点击Continue继续:
    image3.png
    下载添加资源
    image4.png
    安装过程中的许可协议
             全部点击Yes同意接受。
    image5.png
    安装完成
             安装完成后,点击Finish完成。
    image6.png
    JKI Simple Localization
             JKI Simple Localization已经安装到选择的LabVIEW2020的32位版本中。关闭VIPM。打开LabVIEW2020的32位中文版:
    image7.png
    JKI Tools选板
    LabVIEW程序框图中出现了JKI Tools函数选板,里面可以看到还有一个JKI Simple Localization的子选板:
    image8.png
    JKI Simple Localization的子选板
             工具包中,有一个Localization Demo的演示程序,可以先来看一下这个演示程序,可以打开后直接运行:
    image9.png
    运行默认显示英语
    image10.png
    荷兰语?
    image11.png
    中文
    image12.png
    程序框图初始化
    image13.png
    程序框图事超时
    image14.png
    前面板关闭
    image15.png
    日期和时间
    image16.png
    增量控件
    image17.png
    切换语言
    image18.png
    显示对话框
    image19.png
    退出
             在初始化过程中,加载了语言文件Dictionary.json,这是一个词典文件。JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,可以自行搜索更多详细信息。可以打开查看上面的演示程序的目录,在其目录下打到自带的JSON文件:
    image20.png
    Localization DemoJKI_Simple_Localization.vi的位置
    image21.png
    Dictionary.json词典文件位置
    image22.png
    Dictionary.json文件中的具体内容
             从Dictionary.json文件中的具体内容,以及切换语言显示的效果来看,中文明显翻译不正确,出工具包的人中文应该还不如我们的英文水平,可以完全是机翻的。Exit翻译成出口好像也没有问题,虽然我们知道这里应该是退出。
             接下来,直接创建一个带事件响应的vi(包含语言值改变事件以及停止事件)“LabVIEW利用标题实现多国语言界面示例.vi”,包含了词典中的描述的几个控件(实际操作时,先创建VI,再根据VI的控件修改词典):
    image23.png
    Stop值改变事件
    image24.png
    Language值改变事件
    image25.png
    所有控件的标签隐藏掉并显示标题
             在需要设置多国语言的VI中,点击工具》JKI Simple Localization》Localize This VI…选项,将会生成相应的词典文件:
    image26.png
    对当前VI中的控件生成本地化语言词典
    image27.png
    保存词典文件
    image28.png
    输入语言对话框
             保存语言词典时,要求输入语言。例如当前语言是简单中文,增加语言是English。点击OK确定生成词典。
    image29.png
    多国语言1.JSON
    image30.png
    多国语言2.JSON
             JSON词典文件其实很简单,如果按照ini文件来说,那就是两个段。第一段是Languages用于指定当前文件具体包含哪些语言类型。这里的值,也就是语言控件中具体可用的值。然后第二段是Phrase Dictionary短语词典,每个控件对应一个键,键值使用数组来表示,数组值用于描述每个控件在具体语言中的值。生成的词典是根据当前的控件设置的值来设置数组的,所以看到具体的标题数组项,都是一样的。所以,这里得使用文本编辑工具手动修改具体的项。
    另外,在确定语言的对话框时,只有两个选项,只添加了两种语言。测试了一下,使用,;这些常见的分隔符尝试添加更多的语言,不成功,只会当成一个语言。所以,如果有更多的语言,需要手动添加。
    第三,很多控件内部还有其他选项的,就如语言中的下拉列表、枚举中的下拉列表、布尔量的真、假多行字符显示等。有些控件可以生成语言词典选项,形式是控件标签.属性.项#,如language.Item0这样子的,或者是stop.True这样子的。下拉列表可以生成词典,但是枚举控件却不能生成词典,即使按照同样的方法设置,也不能切换语言。
             第四,对于簇控件,是将其中的项逐个处理的,就跟独立控件一样:
    image31.png
    错误簇控件中的词典
    当VI界面修改了控件名称,可直接修改词典文件中的标签。当VI界面删除了控件,可直接删除词典文件中的标签相关的对象。当VI界面增加了控件,可重新生成新的词典文件,然后将新增的控件相关的对象复制到已经修改好的词典中。   
             按照Localization Demo的演示程序中的方法,修改上面的VI为下面的框图:
    image32.png
    修改后的程序框图
    image33.png
    修改后的程序框图2
    image34.png
    运行-简体中文
    image35.png
    运行-English
    image36.png
    运行-日语
             从上面的运行效果来看,枚举没有实现多国语言,界面直接输入的文本字符注释,也不能实现多国语言。这里主要是枚举控件并不能在运行时修改相关的选项,可参考LabVIEW的帮助文档“只有在编辑状态才能编辑枚举型控件。可在运行时通过属性节点编辑下拉列表控件”。所以,如果有需要用到枚举的地方,可切换使用下拉列表。下面再来研究一下工具包,这里可能会有些控件类型没有做相应的处理:
             打开Set LanguageJKI_ Simple_ Localization.vi>LocalizationFGVJKI simple_ Localization.vi> ApplyLanguageToAlUKI simple Loailzatinvi> LocalizeVUKI_ simple_ Localization.vi> GetControlSpecificLocalizedPhraseJKI simple_ Localization.vi
    image37.png
    GetControlSpecificLocalizedPhraseJKI simple_ Localization.vi程序框图
             可以看到GetControlSpecificLocalizedPhraseJKI simple_ Localization.vi程序框图中,仅处理了几类控件。
             这里可以复制下拉条件结构修改为枚举试试:
    image38.png
    修改为枚举
             修改为枚举后,后面的Ctrl.Ring.StyleFontJKI_Simple_Localization.vi也是需要改成枚举相关的函数。可以打开函数后另存副本然后改为枚举:
    image39.png
    Ctrl.Enum.StyleFontJKI_Simple_Localization.vi
    image40.png
    替换Ctrl.Enum.StyleFontJKI_Simple_Localization.vi后的GetControlSpecificLocalizedPhraseJKI simple_ Localization.vi的枚举
             这样修改其实都是没有什么问题的,但是在运行时就会出错:
    image41.png
    Enum Strings[]的属性并不能写
    image42.png
    1073错误表明属性或方法只有编辑模式时可写
             和枚举控件类似的,还有选项卡控件,其属性也只是运行时可读的,不能写。这也就意味着所有运行时只读的控件,均不能使用标题或值的方式来处理多国语言显示的问题。
             而对于注释字符串,因为其都不属性控件,没有标签、标题等参数。因此也是无法在这里实现这种多国语言切换的。如果必须要有注释,可以考虑使用前面框图中支持的数据类型来曲线救过。例如使用布尔量的真值、假值来注释。或使用列表模式来注释。也可以参考JKI示例中的对话框来处理注释。
             另外我们看到控件类型中的字符串,也是不能对值进行多国语言的,因为本身就是显示多国语言的,所以如果是字符串,请直接赋值相关的值即可。组合框输出的值实际上也是字符串,因此组合框的下拉菜单也是不能处理的。
    至于其他的控件类型,时间类型、波形图等是可以多国语言的,参考JKI提供的DEMO。总结来看,就是使用工具>JKI Simple Localization>Localize This VI…选项生成词典时,能生成相应键的,那就是可以多国语言化的,即使本身并没有显示内容,也是会生成一个空键;而不能生成键的,那就不可以多国语言,JKI的工具包应该已经处理的比较完整了。
    下面我们再来看一下操作系统中未安装的语言包是不是也可以完整支持。为了验证这个多国语言,作者在操作系统中额外安装了中文繁体、日语、朝鲜语等语言包。
    image43.png
    系统中安装的语言包
             下面来看一个越南语的界面:
    image44.png
    越南语=Tiếng Việt
             可以看到“越南语”翻译出来就是“Tiếng Việt”,如果我们直接复制这个内容到LabVIEW中作用来显示,是不能正常显示的,只是???乱码的形式:
    image45.png
    直接在在LabVIEW中输入越南语并不能正常显示
             因为JKI的工具包中还使用到了unicode,那么是不是可以正常显示越南语呢?因为在浏览器翻译时、word中都是可以正常显示的,那么操作系统本身就是可以正常显示的越南语的,即使没有相应的语言包。
             修改一下前面的多国语言.JSON文件,添加一个越南语的选项,来看看是不是可以显示:
    image46.png
    词典文件添加越南语
    image47.png
    LabVIEW前面板切换为越南语时,并不能正常显示
             从上面的效果来看,并不能正常的显示越南语。那么安装越南语言包后,能不能正常显示呢?从windows中并没有发现越南语言安装包,只能修改系统中区域和语言相关的内容为越南相关的后再来试一下(参考论坛主题: 如何在LabVIEW上显示多国语言,如藏语、蒙古文、越南文之类的,Unicode显示多国语言,http://visionbbs.com/thread-28893-1-1.html):
    image48.png
    改成越南语后仍然不能正常显示
    image49.png
    仅能显示英文
    image50.png
    中文显示异常
    image51.png
    日语显示异常
             这里难道真的是因为不能安装语言包引起的?那么我们来试一下可以安装语言包的,例如泰语:
    image52.png
    系统更新中可安装泰国语语言包
    image53.png
    未安装泰国语语言包时不能正常显示
             这个是什么情况?安装了泰国语言包后,仍然不能正常显示泰国语言。
    image54.png
    安装泰语后仍然无法正常显示
             将区域和语言设置为泰国泰语,像下拉列表、布尔文本等内容显示正常的泰语,但是标题则仍然显示的不正确。这里连LabVIEW的界面都已经显示正常了,就是不知道为什么标题反而显示不正常。
    image55.png
    泰语部分显示正确
             这里实在搞不懂是什么原因。为什么日语可以正常显示,越南语、泰国语却不能正常显示。难道是因为LabVIEW本身有支持日文版的?看一下韩语是不是能正常显示,因为LabVIEW也有韩语版的:
    image56.png
    韩语不能正常显示
             这个就奇怪了,日语可以正常显示,韩语等其他语言就不能显示。
    image57.png
    LabVIEW利用标题实现多国语言界面视频号解说

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-25 11:48

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表