5 个版本
0.1.11 |
|
---|---|
0.1.7 | 2022年9月8日 |
31 / #system-interface
12KB
111 行
QTranslater
这是一个基于 Json 的 QMetaOjbect 非常小的翻译系统。它最初是为 Cairn Devices 的 Grace 软件(由 Cairn Devices 开发)的翻译而创建的。
目标
允许使用 qmetaobject crate 的接口简单翻译变量。
设置
在你的项目文件夹中
在 "src" 文件夹中创建一个 "lang" 文件夹。在这个 "lang" 文件夹中,为每个你想要切换到的语言创建一个 json 文件。
在一个 Json 文件中
例如在 "fr_FR.json" 中
{
"water": "eau",
"battery": "Batterie",
"trains":"age",
"global_infos": "Informations générales",
}
在你的 rust 文件中
默认情况下,库将使用 "sys-local::get_local" 确定你电脑的语言。如果该语言不在 "lang" 文件夹中,它将自动加载 "en_GB.json"。所以请提供一个 "en_GB.json" 文件,以避免应用程序崩溃。
//For example: in my main.rs
//We start with import*
use qmetaobject::prelude::*;
use qtranslation::QTranslater;
fn main(){
/*
Some code...
*/
qml_ressources();
qml_register_type::<QTranslater>(cstr!("QTranslater"), 1, 0, cstr!("QTranslater")); //Register the QTranslater type
let mut engine = QmlEngine::new();
engine.load_file("qrc:/main/qml/main_window.qml".into()); //"main_window" is just my qml first window.But it can be any other page.
engine.exec();
}
在你的 QML 文件中
QTranslater init() 函数需要一个参数 "folder_path",一个字符串。这个参数决定了 Qtranslater 将在其中查找 json 文件的文件。有三个选项
- folder_path = "dev_path" --> 在这种情况下,路径将是 ./src/lang/
- folder_path = "installed_path" --> 在这种情况下,路径将是 /home/{username}/.local/share/cairn-grace/lang/
- 否则,如果 folder_path 是你选择的另一个路径。例如:"/home/username/Desktop/random_folder/" --> 在这种情况下,路径将与 folder_path 相等
//Import the QTranslater object
import QTranslater 1.0
ApplicationWindow{
id:my_window
visible:true
width : 800
height:800
QTranslater{
id: lang //Assign an ID you want
Component.onCompleted: {
init(installed_path); // it can be "dev_path" or a custom path like the one in the example below
//init(dev_path);
//init("/home/username/Desktop/random_folder/")
}
}
//Some code...
ColumnLayout{
Text{
text: lang.dict["global_informations"]
}
Text{
text: lang.dict["water"]
}
Text{
text: lang.dict["battery"] + ": 23
font.bold: true
}
Text{
textFormat: Text.RichText
text: "<html><span style='font-weight: bold '>I love</span><span>" +lang.dict.["trains"] +"</span><\html>"
color: "red"
font.family: ubuntu_regular.name
}
Button{
text: "Change to French"
onClicked: lang.change_lang("fr_FR") // To change language
}
}
}
依赖
~2–15MB
~142K SLoC