//! # Introduction
//! KI18n is a cross-platform internationalization framework used by KDE applications. This crate
//! is meant to allow using KI18n with Rust and [qmetaobject-rs](https://github.com/woboq/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
//! ``` shell
//! sudo apt install libkf5i18n-dev
//! ```
//! ## Arch Linux
//! ``` shell
//! sudo pacman -S ki18n
//! ```
//!
//! # Custom Location for KF5I18n
//! The crate searches from KF5I18n using either the environment variables (`KF_VERSION`,
//! `KF_INCLUDE_PATH` and `KF_LIBRARY_PATH`) if they are set or uses `kf5-config` to find the paths.
//!
//!
//! # Example
//! ```rust
//! 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();
//! }
//! ```

pub mod klocalizedcontext;
pub mod klocalizedstring;
pub mod klocalizedtranslator;
// pub mod kcountry;

pub mod prelude {
    pub use crate::klocalizedstring::KLocalizedString;
}