搭建開發環境
安裝node.js
安裝node.js,點擊進入官網地址
安裝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
這是 權限不足 導致的錯誤,Windows 拒絕了 npm
在 C:\Program Files\nodejs\
目錄下寫入緩存文件,因為這個目錄通常需要管理員權限。
以管理員身份運行后成功。采用lv_i18n -h
驗證是否安裝成功。
生成lv_i18n文件
lv_i18n.c
中保存著lvgl多語言的初始化以及文本之間的映射等函數接口,想要使用多語言,必須具備lv_i18n.c/.h
操作步驟
- 安裝上述開發環境說明的
node.js
和lv_i18n
- 用到多語言展示的LVGL的代碼中,采用
_("hello")
的方式編寫代碼 - 在ui文件夾下新建?錄
translations
,在其中創建yml?件其命名格式:locale codes.yml
,有多少個語?就創建多少個,每個yml?件都要統?格式的開頭locale codes:
,點擊獲取locale codes,內容如下所示。如簡體中文就創建zh-cn.yml
,文件開頭輸入zh-cn:
- 在 translations ?錄下執?該命令會根據第?步中編寫的代碼,填充yml?件:
lv_i18n extract -s '../**/*.c' -t './*.yml'
- 此時所有的yml?件的翻譯都是
~
,這個意思是我們要??添加翻譯,打開每個yml?件添加翻譯。注意,?般將英?作為默認語?,默認語?保持~
即可,不需要翻譯。 - 執?該命令會將翻譯集成到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 .
- ?般?法:
- 最后,要確保我們使?的LVGL字體已經包含了所有翻譯使?到的?字。
使用過程遇到的問題
這個問題目前還不太明白是什么原因導致的,可能是lv_i18n這個庫的問題。遇到這個問題后,需要將所有的yml語言文件清空,只剩下首行的language:
(如zh-cn:
),然后按下列步驟執行。
目前測試下列所展示的步驟不會出現問題:
- 將screens文件刪剩一個文件,這個時候執行
lv_i18n extract -s '../**/*.c' -t './*.yml'
,這時候一般能夠抓取成功。 - 然后撤回之前刪除的文件,再次執行
lv_i18n extract -s '../**/*.c' -t './*.yml'
,一般也能夠抓取成功。 - 全部抓取成功之后,再次執行
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所擁有的關鍵字如下圖所示:
修改文件中的text文本,然后重新拉取。
可以發現原本的關于設備并不會被刪除,雖然沒有使用,但是還是存在在該文件中。
重命名
首先采用lv_i18n rename -t "./*.yml" --from '關于設備' --to '關于設備2'
然后修改文件中想要修改的文本為關于設備2。
最后重新拉取,結果如下所示,原本的關于設備被刪除了。
lv_i18n的使用
- 初始化:
lv_i18n_init(lv_i18n_language_pack);
- 設置默認語言:
lv_i18n_set_locale("zh-cn");
- 需要用到多語言這樣寫即可:
lv_label_set_text(ui_MainInter_CastScrLab, _("投屏"));
注意:在代碼中如果需要動態切換語言的話,必須在lv_i18n_set_locale
設置切換后的語言后,在重新執行一下lv_label_set_text
,否則不生效,原因是lv_label_set_text
內部會使用lv_realloc
分配一個空間存儲文本,因此需要重新設置文本才會生效。
其中第2步也可以不設置,代碼中默認設置lv_i18n_language_pack
中的第一個成員為默認語言。