23 Commits

Author SHA1 Message Date
TheWhiteDog9487 284320be6e 新的二进制文件 2025-08-30 03:42:35 +00:00
TheWhiteDog9487 6c392cfd15 正式支持WSL,应该是能正常用没太大毛病,有问题再说
其他修改直接看git版本比较吧
2025-08-30 11:40:56 +08:00
TheWhiteDog9487 bcd42aa281 Update README.md 2025-04-22 13:03:58 +08:00
TheWhiteDog9487 231e88e506 Update build.yml 2024-10-13 11:04:58 +08:00
TheWhiteDog9487 de98440dbd 新的二进制文件 2024-10-12 11:05:06 +00:00
TheWhiteDog9487 2c958e24ba 修复Workflow 2024-10-12 19:03:43 +08:00
TheWhiteDog9487 98c10f105b 更新代码,适配新版本Ubuntu 2024-10-12 18:28:56 +08:00
TheWhiteDog9487 7b8f2668ee 更新Workflow配置 2024-10-12 18:28:23 +08:00
TheWhiteDog9487 1c308fcf28 添加全自动化Workflow 2024-10-12 04:16:59 +00:00
TheWhiteDog9487 354d030e4b Update README.md 2023-05-09 07:43:33 +08:00
TheWhiteDog9487 541a5cdf5b 啊,忘记更新x86架构的可执行文件了 2023-05-08 02:08:35 +00:00
TheWhiteDog9487 c6cff413fe 新增加aarch64架构支持 2023-05-08 01:55:20 +00:00
TheWhiteDog9487 641f1a82a7 Update README.md 2023-05-07 10:50:14 +08:00
TheWhiteDog9487 2756f382a8 Update README.md 2023-04-24 17:30:26 +08:00
TheWhiteDog9487 d4eb067f79 Create LICENSE 2023-04-24 14:43:35 +08:00
TheWhiteDog9487 422ea6bc5e 修正支持列表 2023-04-23 17:28:28 +08:00
TheWhiteDog9487 d4ed959762 超大号更新,Debian现已加入豪华套餐 2023-04-23 17:22:49 +08:00
TheWhiteDog9487 03b382ce27 超大号更新,Debian现已加入豪华套餐 2023-04-23 17:09:08 +08:00
TheWhiteDog9487 fbabe987b8 Update README.md 2023-04-20 08:24:44 +08:00
TheWhiteDog9487 8ad6c731ff debian软件包名都不一样怎么能用呢? 2023-01-17 12:09:06 +08:00
TheWhiteDog9487 76c5a2712f 搞定 2023-01-17 12:04:58 +08:00
TheWhiteDog9487 c771f6a63f 搞定 2023-01-17 12:03:30 +08:00
TheWhiteDog9487 94aa2f68b9 继续修复Bug,换个新方法 2023-01-17 11:55:19 +08:00
7 changed files with 259 additions and 30 deletions
+55
View File
@@ -0,0 +1,55 @@
name: 更新二进制可执行文件
on:
workflow_dispatch:
push:
paths:
- "language.cpp"
# 只在源代码被更新时运行
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安装GCC对ARM交叉编译工具链
run: sudo apt install g++-aarch64-linux-gnu
- name: 编译源代码
run: |
g++ -o language --static -std=c++20 language.cpp
aarch64-linux-gnu-g++ -o language_arm --static -std=c++20 language.cpp
# 静态链接,避免运行时才发现缺少so动态链接库
- uses: actions/upload-artifact@v4
with:
name: language_arm
path: language_arm
- uses: actions/upload-artifact@v4
with:
name: language
path: language
push:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
# 更新仓库需要写入权限
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: language
- uses: actions/download-artifact@v4
with:
name: language_arm
- name: 推送
run: |
git config --global user.email "gaojian520one@outlook.com"
git config --global user.name "TheWhiteDog9487"
git add .
git commit -m "新的二进制文件"
git push
+1
View File
@@ -3,3 +3,4 @@
################################################################################
/.vs
/.vscode
+11
View File
@@ -0,0 +1,11 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
+21 -18
View File
@@ -1,25 +1,28 @@
# 一键切换Ubuntu系统到简体中文
## 这个程序有且仅在Ubuntu系统上测试过,18.04及以上应该都不会有问题,非Debian系列应该都用不了
# 一键切换Ubuntu(和Debian)系统到简体中文
## 测试通过的系统
### **x86_64**
|系统名称|版本|
|-|-|
|Debian|11.6.0|
|Ubuntu|25.04 / 24.10 / 24.04.1 LTS / 22.04 LTS / 20.04 LTS|
***
## 编程语言
C++
原本shell那个版本已经被彻底淘汰了,因为我从头到尾就不会bash,用cpp还能做更多设置
***
### **aarch64**
|系统名称|版本|
|-|-|
|Debian|11.5|
## 使用方法
确保已经安装wget或者有其他方法可以传输文件
### **x86_64**
```shell
apt update && apt install -y wget
```
***
下载程序
```shell
wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/language
```
运行程序
```shell
sudo chmod o+x language
sudo chmod u+x language
sudo ./language
```
```
### **aarch64**
```shell
apt update && apt install -y wget
wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/language_arm
sudo chmod u+x language_arm
sudo ./language_arm
```
BIN
View File
Binary file not shown.
+171 -12
View File
@@ -1,32 +1,191 @@
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <filesystem>
#ifdef __linux__
#include <unistd.h>
#endif
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;
enum class System{
WSL,
Windows,
Linux,
Unsupported };
enum class User{
Root,
Other };
auto GetCurrentSystemType(){
if (filesystem::exists("/proc/version")) {
ifstream version_file("/proc/version");
string version_info = "";
getline(version_file, version_info);
if (version_info.find("Microsoft") != string::npos or
version_info.find("WSL") != string::npos) {
return System::WSL; }
version_file.close(); }
if (filesystem::exists("/proc/sys/kernel/osrelease")) {
ifstream osrelease_file("/proc/sys/kernel/osrelease");
string osrelease_info = "";
getline(osrelease_file, osrelease_info);
if (osrelease_info.find("Microsoft") != string::npos or
osrelease_info.find("WSL") != string::npos) {
return System::WSL; }
osrelease_file.close(); }
#pragma warning(suppress : 4996)
if (getenv("WSL_DISTRO_NAME") != nullptr){
return System::WSL; }
#pragma warning(suppress : 4996)
if (getenv("WSL_INTEROP") != nullptr){
return System::WSL; }
#pragma warning(suppress : 4996)
if (getenv("OS") != nullptr){
return System::Windows;}
#pragma warning(suppress : 4996)
else if (getenv("HOME") != nullptr){
return System::Linux;}
else{
return System::Unsupported;} }
auto GetCurrentUser(){
#pragma warning(suppress : 4996)
if (getenv("USER") != nullptr){
string user = getenv("USER");
if (user == "root" or geteuid() == 0){
return User::Root; }
else{
return User::Other; } }
else{
throw runtime_error("无法获取用户信息"); } }
/// @brief 获取当前系统的发行版名称
/// @return 发行版名称,带有版本号
/// @author ChatGPT
auto GetCurrentSystem() {
string distro_name = "";
ifstream release_file("/etc/os-release");
if (release_file.is_open()) {
string line = "";
while (getline(release_file, line)) {
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
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(){
cout << "提示:本程序需要root权限,如果您不是以root运行的本程序,请Ctrl+C终止并重新提权运行" << endl;
cout << "如果确认权限没有问题,请输入y或者yes";
auto WSL(){
cout << "开始更新语言配置" << endl;
system("update-locale LANG=zh_CN.UTF-8");
cout << "语言配置更新完成" << endl;
cout << "更新语言配置需要重启WSL,要现在重启吗?" << endl;
check();
system("cmd.exe /c \"wsl --shutdown\""); }
auto Ubuntu(){
cout << "即将开始安装并配置简体中文语言包,请输入y或者yes继续,或者按Ctrl+C终止本程序";
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("touch /etc/default/locale");
system("echo LANG=\"zh_CN.UTF-8\" > /etc/default/locale");
system("echo LANGUAGE=\"zh_CN:zh\" > /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::overwrite_existing);
fstream locale_conf("/etc/locale.conf", ios::out bitor ios::trunc);
locale_conf << LOCALE << endl;
locale_conf.close();
filesystem::permissions("/etc/locale.conf", filesystem::perms::owner_read bitor filesystem::perms::owner_write bitor filesystem::perms::group_read bitor 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::overwrite_existing);
fstream locale("/etc/default/locale", ios::out bitor ios::trunc);
locale << LOCALE << endl;
locale.close();
filesystem::permissions("/etc/default/locale", filesystem::perms::owner_read bitor filesystem::perms::owner_write bitor filesystem::perms::group_read bitor filesystem::perms::others_read);
cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl;}
cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl;
cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl;
check();
system("reboot");}
system("reboot");}
auto Debian(){
filesystem::copy_file("/etc/locale.gen", "/etc/locale.gen.backup", filesystem::copy_options::overwrite_existing);
fstream locale_gen("/etc/locale.gen", ios::out bitor ios::trunc);
locale_gen << "zh_CN.UTF-8 UTF-8" << endl;
locale_gen.close();
system("locale-gen");
filesystem::permissions("/etc/locale.gen", filesystem::perms::owner_read bitor filesystem::perms::owner_write bitor filesystem::perms::group_read bitor filesystem::perms::others_read);
if ( filesystem::exists("/etc/default/locale") ){
filesystem::copy_file("/etc/default/locale", "/etc/default/locale.backup", filesystem::copy_options::overwrite_existing);
fstream locale("/etc/default/locale", ios::out bitor ios::trunc);
locale << LOCALE << endl;
locale.close();
filesystem::permissions("/etc/default/locale", filesystem::perms::owner_read bitor filesystem::perms::owner_write bitor filesystem::perms::group_read bitor filesystem::perms::others_read);
cout << "原/etc/default/locale已经备份为/etc/default/locale.backup" << endl;}
cout << "原/etc/locale.gen已经备份为/etc/locale.gen.backup" << endl;
cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl;
cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl;
check();
system("reboot");}
int main() {
auto OSType = GetCurrentSystemType();
if (OSType == System::Windows){
cout << "Windows请在“设置”应用中调整语言(❁´◡`❁)。" << endl;
throw runtime_error("不支持的操作系统"); }
else if (OSType == System::WSL) {
auto OS = GetCurrentSystem();
cout << "检测到您使用的系统为:" << OS << endl;
cout << "并且该系统工作于WSL环境" << endl;
auto CurrentUser = GetCurrentUser();
if (CurrentUser == User::Root){
WSL(); }
else{
cout << "更改语言配置需要root权限,请使用sudo重新运行本程序" << endl;
throw runtime_error("权限不足"); } }
else if (OSType == System::Linux) {
auto OS = GetCurrentSystem();
cout << "检测到您使用的系统为:" << OS << endl;
auto CurrentUser = GetCurrentUser();
if (CurrentUser == User::Other){
cout << "更改语言文件需要root权限,请使用sudo重新运行本程序" << endl;
throw runtime_error("权限不足"); }
if (OS.find("Ubuntu") != string::npos){
Ubuntu(); }
if (OS.find("Debian") != string::npos or
OS.find("Armbian") != string::npos){
Debian(); } }
else if (OSType == System::Unsupported){
cout << "未知操作系统,为确保数据安全将会强制退出。"
<< endl
<< "如果是误报,请联系作者修复问题。"
<< endl;
throw runtime_error("不支持的操作系统"); } }
BIN
View File
Binary file not shown.