From 6def98af814096ea81c634f5464d823e4af311dc Mon Sep 17 00:00:00 2001 From: psykose Date: Wed, 30 Oct 2024 07:32:21 +0100 Subject: [PATCH] add gettext init to rs --- .gitignore | 1 + Cargo.lock | 165 +++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 12 +-- src/meson.build | 13 ++++ src/meson_config.rs.in | 1 + 6 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 src/meson_config.rs.in diff --git a/.gitignore b/.gitignore index 2f7896d..0c91a83 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ target/ +src/meson_config.rs diff --git a/Cargo.lock b/Cargo.lock index 73e74df..2c19da0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,10 +2,20 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "audrey" version = "0.1.0" dependencies = [ + "gettext-rs", "glib-build-tools", "gtk4", "libadwaita", @@ -23,6 +33,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "cairo-rs" version = "0.20.1" @@ -46,6 +62,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "cc" +version = "1.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-expr" version = "0.17.0" @@ -192,6 +217,26 @@ dependencies = [ "system-deps", ] +[[package]] +name = "gettext-rs" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44e92f7dc08430aca7ed55de161253a22276dfd69c5526e5c5e95d1f7cf338a" +dependencies = [ + "gettext-sys", + "locale_config", +] + +[[package]] +name = "gettext-sys" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb45773f5b8945f12aecd04558f545964f943dacda1b1155b3d738f5469ef661" +dependencies = [ + "cc", + "temp-dir", +] + [[package]] name = "gio" version = "0.20.4" @@ -414,6 +459,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libadwaita" version = "0.7.0" @@ -451,6 +502,28 @@ version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +[[package]] +name = "locale_config" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" +dependencies = [ + "lazy_static", + "objc", + "objc-foundation", + "regex", + "winapi", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "memchr" version = "2.7.4" @@ -466,6 +539,35 @@ dependencies = [ "autocfg", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "pango" version = "0.20.4" @@ -535,6 +637,35 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "rustc_version" version = "0.4.1" @@ -579,6 +710,12 @@ dependencies = [ "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" version = "0.4.9" @@ -624,6 +761,12 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "temp-dir" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc1ee6eef34f12f765cb94725905c6312b6610ab2b0940889cfe58dae7bc3c72" + [[package]] name = "toml" version = "0.8.19" @@ -670,6 +813,28 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/Cargo.toml b/Cargo.toml index 1491235..a14c191 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ edition = "2021" [dependencies] adw = { version = "0.7.0", package = "libadwaita", features = ["v1_6"] } +gettext-rs = { version = "0.7.2", features = ["gettext-system"] } gtk = { version = "0.9.2", package = "gtk4", features = ["v4_16"] } [build-dependencies] diff --git a/src/main.rs b/src/main.rs index 73c0837..d5a9569 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,10 @@ mod application; pub use application::Application; +mod meson_config; pub mod ui; +use gettextrs::{bind_textdomain_codeset, bindtextdomain, setlocale, textdomain, LocaleCategory}; use gtk::prelude::*; use gtk::{gio, glib}; @@ -18,11 +20,11 @@ fn main() -> glib::ExitCode { gio::resources_register_include!("audrey.gresource").expect("could not register resources"); gtk::disable_setlocale(); - // bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); - // bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - // textdomain (GETTEXT_PACKAGE); - // setlocale (LC_ALL, ""); - // setlocale (LC_NUMERIC, "C.UTF-8"); + bindtextdomain("audrey", meson_config::LOCALEDIR).expect("failed to bind text domain"); + bind_textdomain_codeset("audrey", "UTF-8").expect("failed to bind textdomaincodeset"); + textdomain("audrey").expect("unable to switch to text domain"); + setlocale(LocaleCategory::LcAll, ""); + setlocale(LocaleCategory::LcNumeric, "C.UTF-8"); let app = Application::new(); app.run() } diff --git a/src/meson.build b/src/meson.build index c98f0ab..87926cb 100644 --- a/src/meson.build +++ b/src/meson.build @@ -22,6 +22,19 @@ audrey_deps = [ audrey_sources += removeme +configure_file( + output: 'meson_config.rs', + input: 'meson_config.rs.in', + configuration: config_h, +) +# awful hack to put the configured file back in source +run_command( + 'cp', + meson.project_build_root() / 'src' / 'meson_config.rs', + meson.project_source_root() / 'src' / 'meson_config.rs', + check: true, +) + audrey_c = static_library( 'audrey', audrey_sources, diff --git a/src/meson_config.rs.in b/src/meson_config.rs.in new file mode 100644 index 0000000..4270186 --- /dev/null +++ b/src/meson_config.rs.in @@ -0,0 +1 @@ +pub static LOCALEDIR: &str = @LOCALEDIR@;