From f1013b978c91288616c29f3873b26ae20a658673 Mon Sep 17 00:00:00 2001 From: TheWhiteDog9487 Date: Sun, 23 Apr 2023 17:09:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E5=A4=A7=E5=8F=B7=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=8CDebian=E7=8E=B0=E5=B7=B2=E5=8A=A0=E5=85=A5=E8=B1=AA?= =?UTF-8?q?=E5=8D=8E=E5=A5=97=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++--- language.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 74 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dca6d01..023634a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -# 一键切换Ubuntu系统到简体中文 -## 这个程序有且仅在Ubuntu系统上测试过,18.04及以上应该都不会有问题。 - -*** +# 一键切换Ubuntu(和Debian)系统到简体中文 +## 测试通过的系统 +|系统名称|版本| +|-|-| +|Debian|11.6.0| +|Ubuntu|/| ## 使用方法 确保已经安装wget或者有其他方法可以传输文件 diff --git a/language.cpp b/language.cpp index b1b892b..2cb6c34 100644 --- a/language.cpp +++ b/language.cpp @@ -1,19 +1,35 @@ #include #include #include +#include using namespace std; +string get_linux_distro_name() { + // ChatGPT + std::string distro_name = ""; + std::ifstream release_file("/etc/os-release"); + if (release_file.is_open()) { + std::string line = ""; + while (getline(release_file, line)) { + if (line.find("PRETTY_NAME=") != std::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 + break;}} + release_file.close();} + return distro_name;} + auto check() { cout << "请输入您的选项(输入y或者yes继续)"; - string userin; + string userin = ""; cin >> userin; if (userin == "y" or userin == "yes") return; - else + else{ cout << "输入不正确欸,如果想停止本程序的话请按下Ctrl+C" << endl; - check();} + check();}} -int main(){ +auto Ubuntu(){ cout << "提示:本程序需要root权限,如果您不是以root运行的本程序,请Ctrl+C终止并重新提权运行" << endl; cout << "如果确认权限没有问题,请输入y或者yes"; check(); @@ -29,4 +45,51 @@ int main(){ cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl; cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl; check(); - system("reboot");} \ No newline at end of file + system("reboot");} + +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"); + 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"); + 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(); + system("reboot");} + +int main() { + auto OS = [](){ + #pragma warning(suppress : 4996) + if (getenv("OS") != NULL){ + return "Windows";} + #pragma warning(suppress : 4996) + else if (getenv("HOME") != NULL){ + return "Linux";} + else{ + return "未知";}}(); + + if (OS == "Windows"){ + cout << "Windows请在“设置”应用中调整语言(❁´◡`❁)。" << endl; + exit(-1);} + else if (OS == "Linux") { + if (get_linux_distro_name().find("Ubuntu") != string::npos){ + Ubuntu();} + if (get_linux_distro_name().find("Debian") != string::npos){ + Debian();} + else { exit(-1); }} + else if (OS == "未知"){ + cout << "未知操作系统,为确保数据安全将会强制退出。" + << endl + << "如果是误报,请联系作者修复问题。" + << endl; + exit(-1);} +} \ No newline at end of file