# sys_language
一个跨平台的 Rust 库,用于检测系统默认语言,支持优先选择可选语言并提供回退机制。
## 作者
- [Cupnfish](https://github.com/cupnfish)
- 智普AI
## 功能特性
- 🌍 **跨平台支持**: 支持 Windows、macOS 和 Linux
- 🎯 **智能匹配**: 支持精确匹配和主要语言匹配
- ⚡ **灵活配置**: 支持可选语言列表和回退语言设置
- 🔧 **易于使用**: 提供简单易用的 API 和便捷函数
## 安装
在你的 `Cargo.toml` 文件中添加依赖:
```toml
[dependencies]
sys_language = "0.1.0"
```
## 使用方法
### 基本使用
```rust
use sys_language::detect_system_language;
let language = detect_system_language();
println!("系统语言: {}", language);
println!("主要语言: {}", language.primary_language());
```
### 高级使用
```rust
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!("检测到的语言: {}", language);
```
### 使用便捷函数
```rust
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!("最佳语言: {}", language);
```
## 语言匹配规则
库支持智能语言匹配,包括:
1. **精确匹配**: `zh-CN` 完全匹配 `zh-CN`
2. **主要语言匹配**: `zh-CN` 匹配 `zh`
3. **相同主要语言**: `zh-CN` 匹配 `zh-TW`
```rust
use sys_language::Language;
let lang = Language::new("zh-CN");
assert!(lang.matches("zh-CN")); // 精确匹配
assert!(lang.matches("zh")); // 主要语言匹配
assert!(lang.matches("zh-TW")); // 相同主要语言
assert!(!lang.matches("en-US")); // 不匹配
```
## 平台特定实现
### Windows
使用 Windows API (`GetUserDefaultLocaleName`) 获取系统语言设置。
### macOS
从环境变量 (`LANG`, `LC_ALL`, `LC_CTYPE`) 读取语言设置。
### Linux
从环境变量 (`LANG`, `LC_ALL`, `LANGUAGE`) 读取语言设置,支持冒号分隔的语言列表。
## 示例程序
运行示例程序来查看所有功能:
```bash
cargo run --example basic_usage
```
输出示例:
```
=== 系统语言检测示例 ===
1. 检测系统默认语言:
系统语言: zh-CN
主要语言: zh
地区: CN
2. 使用语言检测器:
检测到的语言: zh-CN
首选语言列表: ["zh-CN", "zh-TW", "en-US"]
回退语言: en-US
3. 测试语言匹配逻辑:
情况 1 (首选: zh-CN, en-US): zh-CN
情况 2 (首选: zh-CN, ja-JP): zh-CN
情况 3 (无首选语言): fr-FR
4. 使用便捷函数:
首选: ["de-DE", "fr-FR", "es-ES"], 回退: en-US
检测结果: de-DE
5. 语言匹配规则演示:
'zh-CN' 匹配 'zh-CN'? true
'zh-CN' 匹配 'zh'? true
'zh-CN' 匹配 'zh-TW'? true
'zh-CN' 匹配 'en-US'? false
=== 示例结束 ===
```
## API 文档
### Language 结构体
```rust
pub struct Language {
code: String,
}
```
**方法:**
- `new(code: &str) -> Language` - 创建新的语言实例
- `as_str(&self) -> &str` - 获取语言代码字符串
- `primary_language(&self) -> &str` - 获取主要语言部分
- `region(&self) -> Option<&str>` - 获取地区部分
- `matches(&self, other: &str) -> bool` - 检查是否与指定语言匹配
### LanguageDetector 结构体
```rust
pub struct LanguageDetector {
preferred_languages: Vec<String>,
fallback: String,
}
```
**方法:**
- `new() -> Self` - 创建新的语言检测器
- `with_preferred_languages(self, languages: &[&str]) -> Self` - 设置首选语言列表
- `with_fallback(self, fallback: &str) -> Self` - 设置回退语言
- `preferred_languages(&self) -> &[String]` - 获取首选语言列表
- `fallback(&self) -> &str` - 获取回退语言
- `detect(&self) -> Language` - 检测并返回最佳语言
### 便捷函数
- `detect_system_language() -> Language` - 快速检测系统语言
- `detect_language_with_options(preferred: &[&str], fallback: &str) -> Language` - 检测语言,支持选项
## 许可证
MIT License
## 贡献
欢迎提交 Issue 和 Pull Request!
## 更新日志
### v0.1.0
- 初始版本发布
- 支持 Windows、macOS 和 Linux 平台
- 实现基本的语言检测和匹配功能
- 提供灵活的配置选项