| Crates.io | sys_language |
| lib.rs | sys_language |
| version | 0.1.0 |
| created_at | 2025-08-05 11:19:39.190772+00 |
| updated_at | 2025-08-05 11:19:39.190772+00 |
| description | A cross-platform Rust library for detecting system language with preferred language selection and fallback support |
| homepage | |
| repository | https://github.com/cupnfish/sys_language |
| max_upload_size | |
| id | 1781842 |
| size | 26,812 |
A cross-platform Rust library for detecting the system's default language with support for preferred language selection and fallback mechanisms.
Add the dependency to your Cargo.toml:
[dependencies]
sys_language = "0.1.0"
use sys_language::detect_system_language;
let language = detect_system_language();
println!("System language: {}", language);
println!("Primary language: {}", language.primary_language());
use sys_language::LanguageDetector;
let detector = LanguageDetector::new()
.with_preferred_languages(&["zh-CN", "en-US", "ja-JP"])
.with_fallback("en-US");
let language = detector.detect();
println!("Detected language: {}", language);
use sys_language::detect_language_with_options;
let preferred = ["zh-CN", "en-US"];
let fallback = "en-US";
let language = detect_language_with_options(&preferred, fallback);
println!("Best language: {}", language);
The library supports intelligent language matching, including:
zh-CN exactly matches zh-CNzh-CN matches zhzh-CN matches zh-TWuse sys_language::Language;
let lang = Language::new("zh-CN");
assert!(lang.matches("zh-CN")); // Exact match
assert!(lang.matches("zh")); // Primary language match
assert!(lang.matches("zh-TW")); // Same primary language
assert!(!lang.matches("en-US")); // No match
Uses Windows API (GetUserDefaultLocaleName) to get system language settings.
Reads language settings from environment variables (LANG, LC_ALL, LC_CTYPE).
Reads language settings from environment variables (LANG, LC_ALL, LANGUAGE), with support for colon-separated language lists.
Run the example program to see all features in action:
cargo run --example basic_usage
Example output:
=== System Language Detection Example ===
1. Detect system default language:
System language: zh-CN
Primary language: zh
Region: CN
2. Using LanguageDetector:
Detected language: zh-CN
Preferred languages: ["zh-CN", "zh-TW", "en-US"]
Fallback language: en-US
3. Test language matching logic:
Case 1 (preferred: zh-CN, en-US): zh-CN
Case 2 (preferred: zh-CN, ja-JP): zh-CN
Case 3 (no preferred languages): fr-FR
4. Using convenience functions:
Preferred: ["de-DE", "fr-FR", "es-ES"], Fallback: en-US
Result: de-DE
5. Language matching rules demonstration:
'zh-CN' matches 'zh-CN'? true
'zh-CN' matches 'zh'? true
'zh-CN' matches 'zh-TW'? true
'zh-CN' matches 'en-US'? false
=== Example End ===
pub struct Language {
code: String,
}
Methods:
new(code: &str) -> Language - Create a new language instanceas_str(&self) -> &str - Get the language code as a stringprimary_language(&self) -> &str - Get the primary language partregion(&self) -> Option<&str> - Get the region partmatches(&self, other: &str) -> bool - Check if it matches the specified languagepub struct LanguageDetector {
preferred_languages: Vec<String>,
fallback: String,
}
Methods:
new() -> Self - Create a new language detectorwith_preferred_languages(self, languages: &[&str]) -> Self - Set preferred language listwith_fallback(self, fallback: &str) -> Self - Set fallback languagepreferred_languages(&self) -> &[String] - Get preferred language listfallback(&self) -> &str - Get fallback languagedetect(&self) -> Language - Detect and return the best languagedetect_system_language() -> Language - Quick system language detectiondetect_language_with_options(preferred: &[&str], fallback: &str) -> Language - Detect language with optionsMIT License
Issues and Pull Requests are welcome!