diff --git a/Cargo.lock b/Cargo.lock index 76b9418..c42bf99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -787,16 +787,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" -[[package]] -name = "calendrical_calculations" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cec493b209a1b81fa32312d7ceca1b547d341c7b5f16a3edbf32b1d8b455bbdf" -dependencies = [ - "core_maths", - "displaydoc", -] - [[package]] name = "calloop" version = "0.12.4" @@ -1109,15 +1099,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core_maths" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3" -dependencies = [ - "libm", -] - [[package]] name = "cosmic-client-toolkit" version = "0.1.0" @@ -1172,7 +1153,7 @@ dependencies = [ "glob", "i18n-embed", "i18n-embed-fl", - "icu", + "icu_collator", "icu_provider", "ignore", "image", @@ -1832,17 +1813,6 @@ dependencies = [ "toml 0.5.11", ] -[[package]] -name = "fixed_decimal" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0febbeb1118a9ecdee6e4520ead6b54882e843dd0592ad233247dbee84c53db8" -dependencies = [ - "displaydoc", - "smallvec", - "writeable", -] - [[package]] name = "flate2" version = "1.0.30" @@ -2904,75 +2874,6 @@ dependencies = [ "objc2 0.5.2", ] -[[package]] -name = "icu" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff5e3018d703f168b00dcefa540a65f1bbc50754ae32f3f5f0e43fe5ee51502" -dependencies = [ - "icu_calendar", - "icu_casemap", - "icu_collator", - "icu_collections", - "icu_datetime", - "icu_decimal", - "icu_experimental", - "icu_list", - "icu_locid", - "icu_locid_transform", - "icu_normalizer", - "icu_plurals", - "icu_properties", - "icu_provider", - "icu_segmenter", - "icu_timezone", -] - -[[package]] -name = "icu_calendar" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7265b2137f9a36f7634a308d91f984574bbdba8cfd95ceffe1c345552275a8ff" -dependencies = [ - "calendrical_calculations", - "displaydoc", - "icu_calendar_data", - "icu_locid", - "icu_locid_transform", - "icu_provider", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_calendar_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e009b7f0151ee6fb28c40b1283594397e0b7183820793e9ace3dcd13db126d0" - -[[package]] -name = "icu_casemap" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff0c8ae9f8d31b12e27fc385ff9ab1f3cd9b17417c665c49e4ec958c37da75f" -dependencies = [ - "displaydoc", - "icu_casemap_data", - "icu_collections", - "icu_locid", - "icu_properties", - "icu_provider", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_casemap_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d57966d5ab748f74513be4046867f9a20e801e2775d41f91d04a0f560b61f08" - [[package]] name = "icu_collator" version = "1.5.0" @@ -3010,111 +2911,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_datetime" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d115efb85e08df3fd77e77f52e7e087545a783fffba8be80bfa2102f306b1780" -dependencies = [ - "displaydoc", - "either", - "fixed_decimal", - "icu_calendar", - "icu_datetime_data", - "icu_decimal", - "icu_locid", - "icu_locid_transform", - "icu_plurals", - "icu_provider", - "icu_timezone", - "smallvec", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_datetime_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba7e7f7a01269b9afb0a39eff4f8676f693b55f509b3120e43a0350a9f88bea" - -[[package]] -name = "icu_decimal" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8fd98f86ec0448d85e1edf8884e4e318bb2e121bd733ec929a05c0a5e8b0eb" -dependencies = [ - "displaydoc", - "fixed_decimal", - "icu_decimal_data", - "icu_locid_transform", - "icu_provider", - "writeable", -] - -[[package]] -name = "icu_decimal_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d424c994071c6f5644f999925fc868c85fec82295326e75ad5017bc94b41523" - -[[package]] -name = "icu_experimental" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844ad7b682a165c758065d694bc4d74ac67f176da1c499a04d85d492c0f193b7" -dependencies = [ - "displaydoc", - "fixed_decimal", - "icu_collections", - "icu_decimal", - "icu_experimental_data", - "icu_locid", - "icu_locid_transform", - "icu_normalizer", - "icu_pattern", - "icu_plurals", - "icu_properties", - "icu_provider", - "litemap", - "num-bigint", - "num-rational", - "num-traits", - "smallvec", - "tinystr", - "writeable", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_experimental_data" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c178b9a34083fca5bd70d61f647575335e9c197d0f30c38e8ccd187babc69d0" - -[[package]] -name = "icu_list" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfeda1d7775b6548edd4e8b7562304a559a91ed56ab56e18961a053f367c365" -dependencies = [ - "displaydoc", - "icu_list_data", - "icu_locid_transform", - "icu_provider", - "regex-automata 0.2.0", - "writeable", -] - -[[package]] -name = "icu_list_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1825170d2c6679cb20dbd96a589d034e49f698aed9a2ef4fafc9a0101ed298f" - [[package]] name = "icu_locid" version = "1.5.0" @@ -3172,39 +2968,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" -[[package]] -name = "icu_pattern" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4" -dependencies = [ - "displaydoc", - "either", - "writeable", - "yoke", - "zerofrom", -] - -[[package]] -name = "icu_plurals" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114" -dependencies = [ - "displaydoc", - "fixed_decimal", - "icu_locid_transform", - "icu_plurals_data", - "icu_provider", - "zerovec", -] - -[[package]] -name = "icu_plurals_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3e8f775b215d45838814a090a2227247a7431d74e9156407d9c37f6ef0f208" - [[package]] name = "icu_properties" version = "1.5.1" @@ -3254,49 +3017,6 @@ dependencies = [ "syn 2.0.70", ] -[[package]] -name = "icu_segmenter" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de" -dependencies = [ - "core_maths", - "displaydoc", - "icu_collections", - "icu_locid", - "icu_provider", - "icu_segmenter_data", - "utf8_iter", - "zerovec", -] - -[[package]] -name = "icu_segmenter_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f739ee737260d955e330bc83fdeaaf1631f7fb7ed218761d3c04bb13bb7d79df" - -[[package]] -name = "icu_timezone" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa91ba6a585939a020c787235daa8aee856d9bceebd6355e283c0c310bc6de96" -dependencies = [ - "displaydoc", - "icu_calendar", - "icu_provider", - "icu_timezone_data", - "tinystr", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_timezone_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c588878c508a3e2ace333b3c50296053e6483c6a7541251b546cc59dcd6ced8e" - [[package]] name = "ident_case" version = "1.0.1" @@ -4896,15 +4616,6 @@ dependencies = [ "regex-syntax 0.6.29", ] -[[package]] -name = "regex-automata" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9368763f5a9b804326f3af749e16f9abf378d227bcdee7634b13d8f17793782" -dependencies = [ - "memchr", -] - [[package]] name = "regex-automata" version = "0.4.7" @@ -7093,9 +6804,6 @@ name = "writeable" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" -dependencies = [ - "either", -] [[package]] name = "x11-dl" @@ -7422,17 +7130,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerotrie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb594dd55d87335c5f60177cee24f19457a5ec10a065e0a3014722ad252d0a1f" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - [[package]] name = "zerovec" version = "0.10.4" diff --git a/Cargo.toml b/Cargo.toml index ef7078e..28d661c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,8 +21,8 @@ ignore = "0.4" image = "0.24" once_cell = "1.19" open = "5.0.2" -icu = { version = "1.5", features = [ "sync" ] } -icu_provider = "1.5" +icu_collator = "1.5" +icu_provider = { version = "1.5", features = ["sync"] } libc = "0.2" log = "0.4" mime_guess = "2" diff --git a/src/localize.rs b/src/localize.rs index 8968f0f..8cc8306 100644 --- a/src/localize.rs +++ b/src/localize.rs @@ -6,7 +6,7 @@ use i18n_embed::{ fluent::{fluent_language_loader, FluentLanguageLoader}, DefaultLocalizer, LanguageLoader, Localizer, }; -use icu::collator::{Collator, CollatorOptions, Numeric}; +use icu_collator::{Collator, CollatorOptions, Numeric}; use icu_provider::DataLocale; use once_cell::sync::Lazy; use rust_embed::RustEmbed; @@ -40,6 +40,19 @@ pub static LANGUAGE_SORTER: Lazy = Lazy::new(|| { .expect("Creating a collator from the system's current language, the fallback language, or American English should succeed") }); +pub static LANGUAGE_CHRONO: Lazy = Lazy::new(|| { + std::env::var("LANG") + .ok() + .and_then(|locale_full| { + // Split LANG because it may be set to a locale such as en_US.UTF8 + locale_full + .split('.') + .next() + .and_then(|locale| chrono::Locale::from_str(locale).ok()) + }) + .unwrap_or(chrono::Locale::en_US) +}); + #[macro_export] macro_rules! fl { ($message_id:literal) => {{ diff --git a/src/tab.rs b/src/tab.rs index 1d79ccc..9f4fd40 100644 --- a/src/tab.rs +++ b/src/tab.rs @@ -47,7 +47,7 @@ use std::{ }; use crate::clipboard::{ClipboardCopy, ClipboardKind, ClipboardPaste}; -use crate::localize::LANGUAGE_SORTER; +use crate::localize::{LANGUAGE_CHRONO, LANGUAGE_SORTER}; use crate::{ app::{self, Action}, config::{IconSizes, TabConfig, ICON_SCALE_MAX, ICON_SIZE_GRID}, @@ -806,21 +806,24 @@ impl Item { if let Ok(time) = metadata.created() { column = column.push(widget::text(format!( "Created: {}", - chrono::DateTime::::from(time).format(TIME_FORMAT) + chrono::DateTime::::from(time) + .format_localized(TIME_FORMAT, *LANGUAGE_CHRONO) ))); } if let Ok(time) = metadata.modified() { column = column.push(widget::text(format!( "Modified: {}", - chrono::DateTime::::from(time).format(TIME_FORMAT) + chrono::DateTime::::from(time) + .format_localized(TIME_FORMAT, *LANGUAGE_CHRONO) ))); } if let Ok(time) = metadata.accessed() { column = column.push(widget::text(format!( "Accessed: {}", - chrono::DateTime::::from(time).format(TIME_FORMAT) + chrono::DateTime::::from(time) + .format_localized(TIME_FORMAT, *LANGUAGE_CHRONO) ))); } } @@ -860,7 +863,8 @@ impl Item { if let Ok(time) = metadata.modified() { column = column.push(widget::text(format!( "Last modified: {}", - chrono::DateTime::::from(time).format(TIME_FORMAT) + chrono::DateTime::::from(time) + .format_localized(TIME_FORMAT, *LANGUAGE_CHRONO) ))); } } @@ -2564,7 +2568,7 @@ impl Tab { let modified_text = match &item.metadata { ItemMetadata::Path { metadata, .. } => match metadata.modified() { Ok(time) => chrono::DateTime::::from(time) - .format(TIME_FORMAT) + .format_localized(TIME_FORMAT, *LANGUAGE_CHRONO) .to_string(), Err(_) => String::new(), },