diff --git a/Cargo.lock b/Cargo.lock index 3fe909d..3fff1e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2759,6 +2759,7 @@ dependencies = [ "enum-map", "fluent 0.15.0", "image", + "pslink-locales", "pslink-shared", "qrcode", "seed", @@ -2769,6 +2770,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "pslink-locales" +version = "0.4.1-beta.2" +dependencies = [ + "fluent 0.15.0", + "pslink-shared", + "serde", + "unic-langid", +] + [[package]] name = "pslink-shared" version = "0.4.1-beta.2" diff --git a/Cargo.toml b/Cargo.toml index 47419c2..3ef3961 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,7 @@ [workspace] members = [ + "shared", + "locales", "pslink", "app", ] diff --git a/app/Cargo.toml b/app/Cargo.toml index 73b90e0..e31c7c3 100644 --- a/app/Cargo.toml +++ b/app/Cargo.toml @@ -27,6 +27,7 @@ qrcode = "0.12" image = "0.23" pslink-shared = { version="0.4.1-alpha.0", path = "../shared" } +pslink-locales = { version="0.4.1-alpha.0", path = "../locales" } [dependencies.web-sys] version = "0.3" diff --git a/app/src/lib.rs b/app/src/lib.rs index 42e2ff4..0680115 100644 --- a/app/src/lib.rs +++ b/app/src/lib.rs @@ -1,5 +1,4 @@ //! The admin interface of pslink. It communicates with the server mostly via https and json. -pub mod i18n; pub mod navigation; pub mod pages; @@ -13,7 +12,7 @@ use seed::window; use seed::IF; use seed::{attrs, button, div, input, label, log, prelude::*, App, Url, C}; -use crate::i18n::I18n; +use pslink_locales::I18n; // ------ ------ // Init @@ -45,7 +44,7 @@ struct Model { index: usize, location: Location, page: Page, - i18n: i18n::I18n, + i18n: I18n, user: Loadable, login_form: LoginForm, login_data: LoginUser, diff --git a/app/src/navigation.rs b/app/src/navigation.rs index 057da8f..5d48b4a 100644 --- a/app/src/navigation.rs +++ b/app/src/navigation.rs @@ -1,12 +1,13 @@ //! Create the top menu of the app use fluent::fluent_args; +use pslink_locales::I18n; use pslink_shared::{ apirequests::users::Role, datatypes::{Lang, User}, }; use seed::{a, attrs, div, li, nav, nodes, ol, prelude::*, Url, C}; -use crate::{i18n::I18n, Msg}; +use crate::Msg; /// Generate the top navigation menu of all pages. /// diff --git a/app/src/pages/list_links.rs b/app/src/pages/list_links.rs index 423a15e..052a138 100644 --- a/app/src/pages/list_links.rs +++ b/app/src/pages/list_links.rs @@ -4,6 +4,7 @@ use std::ops::Deref; use enum_map::EnumMap; use fluent::fluent_args; use image::{DynamicImage, ImageOutputFormat, Luma}; +use pslink_locales::I18n; use qrcode::{render::svg, QrCode}; use seed::{ a, attrs, div, h1, img, input, log, nodes, prelude::*, raw, section, span, table, td, th, tr, @@ -20,7 +21,7 @@ use pslink_shared::{ datatypes::{FullLink, Lang, Loadable, User}, }; -use crate::{get_host, i18n::I18n, unwrap_or_return}; +use crate::{get_host, unwrap_or_return}; /// Setup the page pub fn init(mut url: Url, orders: &mut impl Orders, i18n: I18n) -> Model { diff --git a/app/src/pages/list_users.rs b/app/src/pages/list_users.rs index bcc9ba0..b94b92a 100644 --- a/app/src/pages/list_users.rs +++ b/app/src/pages/list_users.rs @@ -1,6 +1,7 @@ //! List all users in case an admin views it, list the "self" user otherwise. use enum_map::EnumMap; +use pslink_locales::I18n; use pslink_shared::{ apirequests::general::{Operation, Ordering}, apirequests::{ @@ -13,7 +14,7 @@ use seed::{a, attrs, div, h1, input, log, p, prelude::*, section, table, td, th, /* * init */ -use crate::{i18n::I18n, unwrap_or_return}; +use crate::unwrap_or_return; #[must_use] pub fn init(mut url: Url, orders: &mut impl Orders, i18n: I18n) -> Model { orders.send_msg(Msg::Query(UserQueryMsg::Fetch)); diff --git a/locales/Cargo.toml b/locales/Cargo.toml new file mode 100644 index 0000000..ddad334 --- /dev/null +++ b/locales/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "pslink-locales" +authors = ["Dietrich "] +categories = ["web-programming", "network-programming", "web-programming::http-server", "command-line-utilities"] +description = "The translation strings for pslink" +edition = "2018" +keywords = ["url", "link", "webpage", "actix", "web"] +license = "MIT OR Apache-2.0" +readme = "README.md" +repository = "https://github.com/enaut/pslink/" +version = "0.4.1-beta.2" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + + +[dependencies] +fluent = "0.15" +serde = {version="1.0", features = ["derive"]} +unic-langid = "0.9" + +pslink-shared = { version="0.4.1-alpha.0", path = "../shared" } \ No newline at end of file diff --git a/app/src/i18n.rs b/locales/src/lib.rs similarity index 97% rename from app/src/i18n.rs rename to locales/src/lib.rs index 13e1a0d..a55db51 100644 --- a/app/src/i18n.rs +++ b/locales/src/lib.rs @@ -68,7 +68,7 @@ impl I18n { pub const fn ftl_messages(lang: Lang) -> &'static str { macro_rules! include_ftl_messages { ( $lang_id:literal ) => { - include_str!(concat!("../../locales/", $lang_id, "/main.ftl")) + include_str!(concat!("../", $lang_id, "/main.ftl")) }; } match lang {