当前位置: 首页 > news >正文

lvgl多语言设置

搭建开发环境

安装node.js

安装node.js,点击进入官网地址
![[Pasted image 20250423155031.png]]

安装lv_i18n

  • lv_i18n项目地址:Github:https://github.com/lvgl/lv_i18n
  • git运行命令安装lv_i18n:npm i lv_i18n -g。测试命令:lv_i18n -h
    在这里插入图片描述

搭建过程报错

在这里插入图片描述

npm error code CERT_HAS_EXPIRED
npm error errno CERT_HAS_EXPIRED
npm error request to https://registry.npm.taobao.org/lv_i18n failed, reason: certificate has expired
npm error Log files were not written due to an error writing to the directory: C:\Program Files\nodejs\node_cache\_logs
npm error You can rerun the command with `--loglevel=verbose` to see the logs in your terminal

原因:你配置的 npm registry 镜像(https://registry.npm.taobao.org)证书已经过期,npm 拒绝访问不安全的 HTTPS 资源。
更换为官方镜像

npm config set registry https://registry.npmjs.org/

然后再执行安装命令:

npm install lv_i18n -g

![[Pasted image 20250422184512.png]]

这是 权限不足 导致的错误,Windows 拒绝了 npmC:\Program Files\nodejs\ 目录下写入缓存文件,因为这个目录通常需要管理员权限。
![[Pasted image 20250422184628.png]]

以管理员身份运行后成功。采用lv_i18n -h验证是否安装成功。
![[Pasted image 20250423091418.png]]

生成lv_i18n文件

lv_i18n.c中保存着lvgl多语言的初始化以及文本之间的映射等函数接口,想要使用多语言,必须具备lv_i18n.c/.h

操作步骤

  1. 安装上述开发环境说明的node.jslv_i18n
  2. 用到多语言展示的LVGL的代码中,采用_("hello")的方式编写代码
  3. 在ui文件夹下新建⽬录translations ,在其中创建yml⽂件其命名格式:locale codes.yml ,有多少个语⾔就创建多少个,每个yml⽂件都要统⼀格式的开头 locale codes:,点击获取locale codes,内容如下所示。如简体中文就创建zh-cn.yml,文件开头输入zh-cn:
    ![[Pasted image 20250423152801.png]]

![[Pasted image 20250423153110.png]]

  1. 在 translations ⽬录下执⾏该命令会根据第⼆步中编写的代码,填充yml⽂件: lv_i18n extract -s '../**/*.c' -t './*.yml'
  2. 此时所有的yml⽂件的翻译都是~,这个意思是我们要⾃⼰添加翻译,打开每个yml⽂件添加翻译。注意,⼀般将英⽂作为默认语⾔,默认语⾔保持~即可,不需要翻译。
  3. 执⾏该命令会将翻译集成到c代码中(lv_i18n.c/h):
    一般先采用优化编译即可,如果优化编译失败,则采用一般用法。
    • ⼀般⽤法:lv_i18n compile -t "./*.yml" -o .
    • 指 定 默 认 语 ⾔:lv_i18n compile -l <language-code> -t "./*.yml" -o .,比如lv_i18n compile -l zh-cn -t "./*.yml" -o .
    • 优化编译:lv_i18n compile -t "./*.yml" -optimize -o .
  4. 最后,要确保我们使⽤的LVGL字体已经包含了所有翻译使⽤到的⽂字。

使用过程遇到的问题

![[Pasted image 20250423155259.png]]

这个问题目前还不太明白是什么原因导致的,可能是lv_i18n这个库的问题。遇到这个问题后,需要将所有的yml语言文件清空,只剩下首行的language:(如zh-cn:),然后按下列步骤执行。
目前测试下列所展示的步骤不会出现问题:

  1. 将screens文件删剩一个文件,这个时候执行lv_i18n extract -s '../**/*.c' -t './*.yml',这时候一般能够抓取成功。
  2. 然后撤回之前删除的文件,再次执行lv_i18n extract -s '../**/*.c' -t './*.yml',一般也能够抓取成功。
  3. 全部抓取成功之后,再次执行lv_i18n extract -s '../**/*.c' -t './*.yml',一般就会报上图所显示的错误,目前不知如何解决,只能按照第1、2步骤再次操作一遍。

重命名关键字

如何重命名翻译关键字:lv_i18n rename -t "./*.yml" --from 'test3' --to 'test2'
这个重名名关键字的意思是重命名yml中的关键字名称。
为什么重命名?原因是如果不重命名的话:在代码中改文本信息后,采用lv_i18n extract -s '../**/*.c' -t './*.yml'重新抓取后,未使用的关键字不会删除,会导致翻译文件比较冗余。

未重命名

原本yml所拥有的关键字如下图所示:
![[Pasted image 20250423154006.png]]

修改文件中的text文本,然后重新拉取。
![[Pasted image 20250423154026.png]]
可以发现原本的关于设备并不会被删除,虽然没有使用,但是还是存在在该文件中。
![[Pasted image 20250423154401.png]]

重命名

![[Pasted image 20250423154632.png]]

首先采用lv_i18n rename -t "./*.yml" --from '关于设备' --to '关于设备2'
![[Pasted image 20250423154651.png]]

然后修改文件中想要修改的文本为关于设备2。
![[Pasted image 20250423154737.png]]

最后重新拉取,结果如下所示,原本的关于设备被删除了。
![[Pasted image 20250423154845.png]]

lv_i18n的使用

  1. 初始化:lv_i18n_init(lv_i18n_language_pack);
  2. 设置默认语言:lv_i18n_set_locale("zh-cn");
  3. 需要用到多语言这样写即可:lv_label_set_text(ui_MainInter_CastScrLab, _("投屏"));
    注意:在代码中如果需要动态切换语言的话,必须在lv_i18n_set_locale设置切换后的语言后,在重新执行一下lv_label_set_text,否则不生效,原因是lv_label_set_text内部会使用lv_realloc分配一个空间存储文本,因此需要重新设置文本才会生效。
    ![[Pasted image 20250423162741.png]]

其中第2步也可以不设置,代码中默认设置lv_i18n_language_pack中的第一个成员为默认语言。
![[Pasted image 20250423161545.png]]

http://www.xdnf.cn/news/316513.html

相关文章:

  • Diamond iO:实用 iO 的第一缕曙光
  • 台州智惠自动化签约智橙PLM,让创新持续发生
  • 开发搭载阿里云平台的物联网APP(支持数据接收与发送)
  • 【C++】类和对象
  • Vue3+TS+vite项目本地测试数据接口搭建
  • 1.1.2 简化迭代器 yield return的使用
  • 音乐网站|基于SprinBoot+vue的音乐网站(源码+数据库+文档)
  • RPA与After Effects 2024深度融合:自动化影视特效全链路革命
  • ESP32蓝牙开发笔记(十五)
  • 开发 Chrome 扩展中的侧边栏图标设置实录(Manifest V3)
  • [特殊字符] Milvus + LLM大模型:打造智能电影知识库系统
  • Python入门(二)
  • 融合静态图与动态智能:重构下一代智能系统架构
  • 2025年渗透测试面试题总结-渗透岗位全职工作面试(附回答)(题目+回答)
  • 【Redis】哨兵机制和集群
  • MATLAB的cvpartition函数用法
  • AI辅助DevOps与自动化测试:重构软件工程效率边界
  • stm32之ADC
  • 什么是智能合约?区块链上的自动化契约
  • 文章记单词 | 第67篇(六级)
  • ​​大疆无人机SDR 链路​​
  • 28. C++位图 布隆过滤器 哈希切割相关
  • PostgreSQL 系统管理函数详解
  • Rest架构解说
  • idea里maven自定义的setting.xml文件不生效问题
  • 基于DR模式的LVS集群案例
  • AI检测的荒谬性:当规则沦为一场概率游戏
  • LLaMA-Omni 2:基于 LLM 的自回归流语音合成实时口语聊天机器人
  • 单片机-STM32部分:6、不同编程方式-寄存器、标准库、HAL库、LL库
  • 中间件-RocketMQ