当前位置: 首页 > 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]]

相关文章:

  • 深度学习模型的部署实践与Web框架选择
  • vue3的页面跳转方法汇总(路由跳转,组件跳转)
  • dubbo-token验证
  • 大数据应用开发和项目实战-电商双11美妆数据分析2
  • 《数据结构:二叉搜索树(Binary Search Tree)》
  • 面向智能体开发的声明式语言:可行性分析与未来图景
  • SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
  • 【论文阅读】Reconstructive Neuron Pruning for Backdoor Defense
  • 内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
  • C++ set和map系列(关联式容器)的介绍及使用
  • 【论文阅读】Towards Stable Backdoor Purification through Feature Shift Tuning
  • Web 架构之负载均衡全解析
  • 【论文阅读】HunyuanVideo: A Systematic Framework For Large Video Generative Models
  • LangChain4j简介
  • 记录一个rabbitmq因为linux主机名服务无法启动的问题
  • UE5.3 C++ 如何在c++ 中拿到UI元素,并绑定不同事件响应功能
  • C++回调函数学习
  • Linux:进程控制1
  • 标量/向量/矩阵/张量/范数详解及其在机器学习中的应用
  • 第8章-1 查询性能优化-优化数据访问
  • 印控克什米尔地区再次传出爆炸声
  • 上海劳模风采馆焕新升级后重新开放,展示480位劳模先进故事
  • 印方称所有敌对行动均得到反击和回应,不会升级冲突
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 2025年4月份CPI环比由降转涨,核心CPI涨幅稳定
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?