diff --git a/.gitignore b/.gitignore index f14b74d..3bcb678 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ ################################################################################ /.vs +/.vscode \ No newline at end of file diff --git a/README.md b/README.md index 63612a7..cb4d324 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ |系统名称|版本| |-|-| |Debian|11.6.0| -|Ubuntu|22.04 LTS 20.04 LTS| +|Ubuntu|24.10 24.04.1 LTS 22.04 LTS 20.04 LTS| ### **aarch64:** |系统名称|版本| diff --git a/language.cpp b/language.cpp index b01c0b2..2666cad 100644 --- a/language.cpp +++ b/language.cpp @@ -2,16 +2,32 @@ #include #include #include +#include using namespace std; +auto LOCALE = R"( +LANG="zh_CN.UTF-8" +LANGUAGE="zh_CN:zh:en_US:en" +LC_NUMERIC="zh_CN.UTF-8" +LC_TIME="zh_CN.UTF-8" +LC_MONETARY="zh_CN.UTF-8" +LC_PAPER="zh_CN.UTF-8" +LC_IDENTIFICATION="zh_CN.UTF-8" +LC_NAME="zh_CN.UTF-8" +LC_ADDRESS="zh_CN.UTF-8" +LC_TELEPHONE="zh_CN.UTF-8" +LC_MEASUREMENT="zh_CN.UTF-8" +LC_ALL=zh_CN.UTF-8 +)"s; + string get_linux_distro_name() { // ChatGPT - std::string distro_name = ""; - std::ifstream release_file("/etc/os-release"); + string distro_name = ""; + ifstream release_file("/etc/os-release"); if (release_file.is_open()) { - std::string line = ""; + string line = ""; while (getline(release_file, line)) { - if (line.find("PRETTY_NAME=") != std::string::npos) { + if (line.find("PRETTY_NAME=") != string::npos) { distro_name = line.substr(line.find("=") + 1); distro_name.erase(0, 1); // remove opening quote distro_name.erase(distro_name.size() - 1); // remove closing quote @@ -37,11 +53,20 @@ auto Ubuntu(){ check(); system("apt install -y language-pack-zh-hans"); system("locale-gen zh_CN.UTF-8"); - system("mv /etc/default/locale /etc/default/locale.backup"); - system("wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/locale"); - system("mv locale /etc/default/locale"); - system("chmod 644 /etc/default/locale"); - cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl; + if ( filesystem::exists("/etc/locale.conf") ){ + filesystem::copy_file("/etc/locale.conf", "/etc/locale.conf.backup", filesystem::copy_options::update_existing); + fstream locale_conf("/etc/locale.conf", ios::out | ios::trunc); + locale_conf << LOCALE << endl; + locale_conf.close(); + filesystem::permissions("/etc/locale.conf", filesystem::perms::owner_read | filesystem::perms::owner_write | filesystem::perms::group_read | filesystem::perms::others_read); + cout << "原/etc/locale.conf已经备份为/etc/locale.conf.backup" << endl;} + else if ( filesystem::exists("/etc/default/locale") ){ + filesystem::copy_file("/etc/default/locale", "/etc/default/locale.backup", filesystem::copy_options::update_existing); + fstream locale("/etc/default/locale", ios::out | ios::trunc); + locale << LOCALE << endl; + locale.close(); + filesystem::permissions("/etc/default/locale", filesystem::perms::owner_read | filesystem::perms::owner_write | filesystem::perms::group_read | filesystem::perms::others_read); + cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl;} cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl; cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl; check(); @@ -51,16 +76,20 @@ auto Debian(){ cout << "提示:本程序需要root权限,如果您不是以root运行的本程序,请Ctrl+C终止并重新提权运行" << endl; cout << "如果确认权限没有问题,请输入y或者yes"; check(); - system("mv /etc/locale.gen /etc/locale.gen.backup"); - system("echo zh_CN.UTF-8 UTF-8 > /etc/locale.gen"); + filesystem::copy_file("/etc/locale.gen", "/etc/locale.gen.backup", filesystem::copy_options::update_existing); + fstream locale_gen("/etc/locale.gen", ios::out | ios::trunc); + locale_gen << "zh_CN.UTF-8 UTF-8" << endl; + locale_gen.close(); system("locale-gen"); - system("chmod 644 /etc/locale.gen"); - system("mv /etc/default/locale /etc/default/locale.backup"); - system("wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/locale"); - system("mv locale /etc/default/locale"); - system("chmod 644 /etc/default/locale"); + filesystem::permissions("/etc/locale.gen", filesystem::perms::owner_read | filesystem::perms::owner_write | filesystem::perms::group_read | filesystem::perms::others_read); + if ( filesystem::exists("/etc/default/locale") ){ + filesystem::copy_file("/etc/default/locale", "/etc/default/locale.backup", filesystem::copy_options::update_existing); + fstream locale("/etc/default/locale", ios::out | ios::trunc); + locale << LOCALE << endl; + locale.close(); + filesystem::permissions("/etc/default/locale", filesystem::perms::owner_read | filesystem::perms::owner_write | filesystem::perms::group_read | filesystem::perms::others_read); + cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl;} cout << "原/etc/locale.gen已经备份为/etc/locale.gen.backup" << endl; - cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl; cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl; cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl; check(); @@ -69,10 +98,10 @@ auto Debian(){ int main() { auto OS = [](){ #pragma warning(suppress : 4996) - if (getenv("OS") != NULL){ + if (getenv("OS") != nullptr){ return "Windows";} #pragma warning(suppress : 4996) - else if (getenv("HOME") != NULL){ + else if (getenv("HOME") != nullptr){ return "Linux";} else{ return "未知";}}(); diff --git a/locale b/locale deleted file mode 100644 index c4e344d..0000000 --- a/locale +++ /dev/null @@ -1,12 +0,0 @@ -LANG="zh_CN.UTF-8" -LANGUAGE="zh_CN:zh:en_US:en" -LC_NUMERIC="zh_CN.UTF-8" -LC_TIME="zh_CN.UTF-8" -LC_MONETARY="zh_CN.UTF-8" -LC_PAPER="zh_CN.UTF-8" -LC_IDENTIFICATION="zh_CN.UTF-8" -LC_NAME="zh_CN.UTF-8" -LC_ADDRESS="zh_CN.UTF-8" -LC_TELEPHONE="zh_CN.UTF-8" -LC_MEASUREMENT="zh_CN.UTF-8" -LC_ALL=zh_CN.UTF-8 \ No newline at end of file