diff --git a/Cargo.lock b/Cargo.lock index 41589376..902219bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -884,6 +884,7 @@ dependencies = [ "serde_yaml", "sha2", "signal-hook", + "sys-locale", "tar", "tokio", "toml", @@ -1399,6 +1400,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sys-locale" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" +dependencies = [ + "libc", +] + [[package]] name = "system-configuration" version = "0.5.1" diff --git a/README.md b/README.md index 4ad4d7e7..8a2d5052 100644 --- a/README.md +++ b/README.md @@ -458,4 +458,5 @@ url = "https://github.com/MaaAssistantArknights/MaaResource.git" - 即使启动了资源热更新,你依然需要安装 `MaaCore` 的资源,因为资源热更新并不包含所有的资源文件,只是包含部份可更新的资源文件,基础资源文件仍然需要安装。 - 资源热更新是通过 Git 来拉取远程仓库,如果后端设置为 `git` 那么 `git` 命令行工具必须可用。 - 如果你想要使用 SSH 协议来拉取远程仓库,你必须配置 `ssh_key` 字段,这个字段应该是一个路径,指向你的 SSH 私钥。 -- `url` 设置目前只对首次安装资源有效,如果你想要更改远程仓库的地址,你需要通过 `git` 命令行工具手动更改,或者删除对应的仓库。仓库所在位置可以通过 `maa dir hot-update` 获取。 +- 远程仓库的 `url` 设置目前只对首次安装资源有效,如果你想要更改远程仓库的地址,你需要通过 `git` 命令行工具手动更改,或者删除对应的仓库。仓库所在位置可以通过 `maa dir hot-update` 获取。 +- 远程仓库的`url` 会根据你本机的语言自动设置,如果你的语言是简体中文,那么远程仓库的 `url` 将会被设置为国内的镜像 `https://git.maa-org.net/MAA/MaaResource.git`, 在其他情况则会被设置为 Github。如果你在国内但是使用的不是简体中文,或者在国外使用简体中文,那么你可能需要手动设置以获得最佳的体验。 diff --git a/maa-cli/Cargo.toml b/maa-cli/Cargo.toml index 326dfdd4..87351058 100644 --- a/maa-cli/Cargo.toml +++ b/maa-cli/Cargo.toml @@ -47,6 +47,7 @@ anyhow = "1" signal-hook = "0.3.17" dunce = "1.0.4" lazy_static = "1.4.0" +sys-locale = "0.3.1" prettytable = { version = "0.10.0", default-features = false } clap = { version = "4.4", features = ["derive"] } diff --git a/maa-cli/src/config/cli/resource.rs b/maa-cli/src/config/cli/resource.rs index 7f08dcb8..a016d8b4 100644 --- a/maa-cli/src/config/cli/resource.rs +++ b/maa-cli/src/config/cli/resource.rs @@ -1,6 +1,7 @@ use std::path::{Path, PathBuf}; use serde::Deserialize; +use sys_locale::get_locale; #[cfg_attr(test, derive(Debug, PartialEq))] #[derive(Deserialize, Default, Clone)] @@ -65,7 +66,16 @@ impl Default for Remote { } fn default_url() -> String { - String::from("https://github.com/MaaAssistantArknights/MaaResource.git") + if get_locale().is_some_and(check_zh_cn) { + String::from("https://git.maa-org.net/MAA/MaaResource.git") + } else { + String::from("https://github.com/MaaAssistantArknights/MaaResource.git") + } +} + +/// Check if locale is zh-CN +fn check_zh_cn(locale: impl AsRef) -> bool { + matches!(locale.as_ref(), "zh-CN" | "zh-Hans" | "zh-Hans-CN") } impl Remote { @@ -210,10 +220,7 @@ pub mod tests { #[test] fn url() { - assert_eq!( - Remote::default().url(), - "https://github.com/MaaAssistantArknights/MaaResource.git", - ); + assert_eq!(Remote::default().url(), default_url()); assert_eq!( Remote { @@ -254,4 +261,13 @@ pub mod tests { Path::new("~/.ssh/id_ed25519") ); } + + #[test] + fn test_check_zh_cn() { + assert!(check_zh_cn("zh-CN")); + assert!(check_zh_cn("zh-Hans")); + assert!(check_zh_cn("zh-Hans-CN")); + assert!(!check_zh_cn("zh-TW")); + assert!(!check_zh_cn("en-US")); + } }