A crate to use KF5I18n from Rust.
Find a file
Ayush Singh b237f0e4ff Removing KCountry for now.
Cannot find the package providing KCountry.h in Ubuntu. It is present
with the normal KI18n in Arch Linux so no idea what to do.
2021-12-23 15:14:45 +05:30
.github/workflows Removing KCountry for now. 2021-12-23 15:14:45 +05:30
src Removing KCountry for now. 2021-12-23 15:14:45 +05:30
tests Added Methods for KLocalizedString. 2021-12-15 21:55:23 +05:30
.gitignore Added Methods for KLocalizedString 2021-12-15 22:24:45 +05:30
build.rs Removing KCountry for now. 2021-12-23 15:14:45 +05:30
Cargo.toml Added Methods for KLocalizedString. 2021-12-15 21:55:23 +05:30
LICENSE.txt Added README and LICENSE. 2021-11-01 15:53:52 +05:30
README.md Updated Readme with new links. 2021-12-14 22:05:29 +05:30

KI18n Crate for Rust

Crates.io Documentation

KI18n is a cross-platform internationalization framework used by KDE applications. This crate is meant to allow using KI18n with Rust and qmetaobject-rs crate.

Motivation

I love KDE. I have been using it as my primary DE for quite a while. I also like Rust Programming Language. Currently, it is nearly impossible to use any KDE frameworks from Rust without some C++ FFI. While FFI is never easy, complexity with C++ is exponentially more than plain C due to the Object-Oriented nature of C++, which is entirely different from Rust's somewhat functional design.

If possible, I would like the Tier-1 KDE Frameworks to be usable from pragmatic Rust in a somewhat natural fashion. I am currently interested in KDE frameworks that are usable with QML.

Requirements

This crate requires KF5I18n to be installed or at least present in the system.

Ubuntu

sudo apt install libkf5i18n-dev

Arch Linux

sudo pacman -S ki18n

Custom Location for KF5I18n

The crate searches from KF5I18n using either the environment variables (KF5_I18n_INCLUDE_PATH and KF5_I18n_LIBRARY_PATH) if they are set or just searches at /usr/include /usr/library

Example

use cstr::cstr;
use qmetaobject::prelude::*;
use ki18n::KLocalizedContext;

fn main() {
  let mut engine = QmlEngine::new();
  KLocalizedContext::init_from_engine(&engine);
  engine.load_data(r#"
    import QtQuick 2.6
    import QtQuick.Controls 2.0 as Controls
    import QtQuick.Layouts 1.2
    import org.kde.kirigami 2.13 as Kirigami
    
    // Base element, provides basic features needed for all kirigami applications
    Kirigami.ApplicationWindow {
        // ID provides unique identifier to reference this element
        id: root
    
        // Window title
        // i18nc is useful for adding context for translators, also lets strings be changed for different languages
        title: i18nc("@title:window", "Hello World")
    
        // Initial page to be loaded on app load
        pageStack.initialPage: Kirigami.Page {
    
            Controls.Label {
                // Center label horizontally and vertically within parent element
                anchors.centerIn: parent
                text: i18n("Hello World!")
            }
        }
    }
  "#.into());
  engine.exec();
}