LVGL使用i18n库配置多语言的方法

项目需要一个切换显示语言的功能,发现LVGL官方已经提供了,但是没有例程,于是自学了一下。

以下内容根据lv_i18n官方readme GitHub - lvgl/lv_i18n: Internationalization (i18n) for LVGL

第0步:配置环境

因为lv_i18n库基于一个js脚本,所以我们要先安装好node.js环境。然后在命令行输入

npm i lv_i18n -g

官方还提供了其他两种安装方法,我只用了第一种,所以不再赘述。

第1步:准备词条文件

1. 准备好你的词条、语言代码和别名,默默的记在心里或者写在本子上

  • 词条就是你想让它显示的东西,比如"Hello World!"。
  • 语言代码就是这个词条的语言,比如英语-大不列颠就是en-GB。这里要注意,语言代码必须符合i18n规范,也就是“语言-地区”的格式,具体可以到ISO language codes | Andiamo! The Language Professionals 查阅对应的语言代码。
  • 别名类似变量名,就是这个词条的名字,比如"hello"。

2.  在项目文件夹内为每一种语言创建词条文件,比如我有两种语言en-GB和de,那么我创建了en-GB.yml和de.yml。(理论上可以把多种语言合并到同一文件,但是我没有试过)

3. 其实官方提供了一个extract命令创建示例,但是我们可以跳过,直接上手编写文件。我的文件是这样的:

en-GB:
  title1: Main menu
  title2: Sub menu
  user_logged_in:
    one: One user is logged in
    other: '%d users are logged in'

下面分别按照每一级讲解

  • 第一级:语言代码
  • 第二级:词条别名和词条
  • 第三级:内置的关键字,目前只能使用one和other,作用是根据另一个变量实时更改显示的字段,这个后面在代码会使用到

如法炮制编写de.yml

de:
  title1: Hauptmenü
  title2: Untermenü
  user_logged_in:
    one: Ein Benutzer ist angemeldet
    other: '%d benutzer ist angemeldet'

第3步:编译成c文件

在命令行运行(注意路径)

lv_i18n compile -t 'translations/*.yml' -o 'src/lv_i18n'

会生成lv_i18n.c和lv_i18n.h文件,将它添加进你的项目里就可以使用了。

其中词条是以结构体数组的形式存储在c里的,就像

static lv_i18n_phrase_t de_plurals_one[] = {
    {"user_logged_in", "Ein Benutzer ist angemeldet"},
    {NULL, NULL} // End mark
};

可以自己研究

第4步:在自己的项目里使用

1. 初始化

lv_i18n_init(lv_i18n_language_pack);

2. 选择语言(默认是en-GB)

lv_i18n_set_locale("en-GB");

3. 显示字符有两种方法,对应有两个宏,分别是"_"和"_p",这两个宏定义在lv_i18n.h里

#define _(text) lv_i18n_get_text(text)
#define _p(text, num) lv_i18n_get_text_plural(text, num)

_就是普通的按照别名查找词条字符串:

lv_label_set_text(label1, _("title1"));

_p有两个输入,一个是词条,一个是数字,这个数字的用法是,当num=1时,输出词条one,当num!=1时,输出词条other。例子在这:

sprintf(buf, _p("user_logged_in", user_cnt)), user_cnt);  

一切以官方教程为准

GitHub - lvgl/lv_i18n: Internationalization (i18n) for LVGL

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuso_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值