5 个版本

0.1.11 2022年9月2日
0.1.7 2022年9月8日

31 / #system-interface

AGPL-3.0-only

12KB
111

QTranslater

这是一个基于 Json 的 QMetaOjbect 非常小的翻译系统。它最初是为 Cairn Devices 的 Grace 软件(由 Cairn Devices 开发)的翻译而创建的。

目标

允许使用 qmetaobject crate 的接口简单翻译变量。

设置

在你的项目文件夹中

在 "src" 文件夹中创建一个 "lang" 文件夹。在这个 "lang" 文件夹中,为每个你想要切换到的语言创建一个 json 文件。

Screenshot

在一个 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 文件的文件。有三个选项

  1. folder_path = "dev_path" --> 在这种情况下,路径将是 ./src/lang/
  2. folder_path = "installed_path" --> 在这种情况下,路径将是 /home/{username}/.local/share/cairn-grace/lang/
  3. 否则,如果 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