2 Commits

Author SHA1 Message Date
TheWhiteDog9487 39a0b17a59 更新获取链接 2022-01-24 11:44:09 +08:00
TheWhiteDog9487 82d8ed35c9 commit 2022-01-24 11:34:25 +08:00
7 changed files with 42 additions and 267 deletions
-40
View File
@@ -1,40 +0,0 @@
name: 构建二进制可执行文件
on:
workflow_dispatch:
push:
paths:
- "language.cpp"
# 只在源代码被更新时运行
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- target: x86_64-linux-musl
artifact: language
- target: aarch64-linux-musl
artifact: language_arm
steps:
- uses: actions/checkout@v6
- name: 下载 musl 工具链
uses: lmq8267/dl-musl@main
with:
target: ${{ matrix.target }}
static: true
- name: 编译
run: |
if [ "${{ matrix.target }}" = "x86_64-linux-musl" ]; then
"$CXX" -o "${{ matrix.artifact }}" -std=c++23 -s --static language.cpp
else
"$CXX" -o "${{ matrix.artifact }}" -std=c++23 -s --static language.cpp
fi
- uses: actions/upload-artifact@v5
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.artifact }}
-8
View File
@@ -1,8 +0,0 @@
################################################################################
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
################################################################################
.vs
.vscode
a.out
build
-11
View File
@@ -1,11 +0,0 @@
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.
+28 -28
View File
@@ -1,34 +1,34 @@
# 一键切换Ubuntu(和Debian)系统到简体中文 # 一键切换Ubuntu系统到简体中文
## 测试通过的系统 ## 两个版本
### **x86_64** 1.C++
|系统名称|版本| 2.纯Shell
|-|-| ## 不同版本区别
|Debian|13.2 <br/> 11.6| 这两个版本的唯一区别就是运行方式不一样,功能和结构没有任何区别
|Ubuntu|26.04 LTS <br/> 25.04 <br/> 24.10 <br/> 24.04.1 LTS <br/> 22.04 LTS <br/> 20.04 LTS| 不信你可以去看源代码,C++版本我只是用了system函数执行shell语句,效果不能说天差地别吧,至少也能说是一模一样
***
### **aarch64**
|系统名称|版本|
|-|-|
|Debian|11.5|
## 使用方法 ## 使用方法
### **x86_64** # **注意!程序运行完之后会自动重启目标电脑/服务器,请确保没有未保存的工作!否则后果自负!**
确保已经安装wget或者有其他方法可以传输文件
```shell ```shell
sudo -E su
# 如果是WSL环境必须使用-E参数保留环境变量,否则权限提升之后WSL_DISTRO_NAME会消失
# 如果不是WSL,可以不加这个参数,只提权就好
apt update && apt install -y wget apt update && apt install -y wget
wget https://github.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/releases/latest/download/language
chmod +x language
./language
``` ```
### **aarch64** ***
下面两个版本选一个就行
***
下载程序(Shell)
```shell ```shell
sudo -E su wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/language.sh
# 如果是WSL环境必须使用-E参数保留环境变量,否则权限提升之后WSL_DISTRO_NAME会消失
# 如果不是WSL,可以不加这个参数,只提权就好
apt update && apt install -y wget
wget https://github.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/releases/latest/download/language_arm
chmod +x language_arm
./language_arm
``` ```
下载程序(C++)
```shell
wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/language
```
运行程序(Shell)
```shell
sudo bash language.sh
```
运行程序(C++)
```shell
sudo chmod o+x language
sudo ./language
```
BIN
View File
Binary file not shown.
+7 -180
View File
@@ -1,182 +1,9 @@
#include <cstdlib> #include<cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <filesystem>
#include <ciso646>
#ifdef __linux__
#include <unistd.h>
#endif
using namespace std; using namespace std;
int main(){
enum class System{
WSL,
Linux,
Unsupported };
enum class WslDistro{
Ubuntu,
Debian,
Unsupported,
IsNotWsl };
enum class User{
Root,
Other };
auto GetCurrentSystemType(){
#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; }
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(); }
#ifdef __linux__
return System::Linux;
#else
return System::Unsupported;
#endif
}
auto GetCurrentWslDistro(){
#pragma warning(suppress : 4996)
if (getenv("WSL_DISTRO_NAME") != nullptr){
string DistroName = getenv("WSL_DISTRO_NAME");
if (DistroName.find("Ubuntu") != string::npos){
return WslDistro::Ubuntu; }
else if (DistroName.find("Debian") != string::npos){
return WslDistro::Debian; }
else{
return WslDistro::Unsupported; } }
else{
return WslDistro::IsNotWsl; } }
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 = "";
cin >> userin;
if (userin == "y" or userin == "yes")
return;
else{
cout << "输入不正确欸,如果想停止本程序的话请按下Ctrl+C" << endl;
check(); } }
auto RebootIfIsWSL(){
if (GetCurrentSystemType() == System::WSL){
system("wsl.exe --terminate $WSL_DISTRO_NAME"); } }
auto Ubuntu(){
cout << "即将开始安装并配置简体中文语言包,请输入y或者yes继续,或者按Ctrl+C终止本程序";
check();
cout << "开始更新语言配置" << endl;
system("apt update");
system("apt install -y language-pack-zh-hans"); system("apt install -y language-pack-zh-hans");
system("update-locale LANG=zh_CN.UTF-8"); system("locale-gen zh_CN.UTF-8");
cout << "语言配置更新完成" << endl; system("mv /etc/default/locale /etc/default/locale.backup");
cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl; system("touch /etc/default/locale");
cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl; system("echo LANG=\"zh_CN.UTF-8\" > /etc/default/locale");
check(); system("reboot");}
RebootIfIsWSL();
system("reboot"); }
auto Debian(){
cout << "即将开始更新语言配置,请输入y或者yes继续,或者按Ctrl+C终止本程序";
check();
cout << "开始更新语言配置" << endl;
fstream locale_gen("/etc/locale.gen", ios::app);
locale_gen << '\n' <<
"zh_CN.UTF-8 UTF-8" << endl;
locale_gen.close();
system("locale-gen");
system("update-locale LANG=zh_CN.UTF-8");
cout << "即将重启以应用语言设置,请保存您未完成的工作以防数据丢失" << endl;
cout << "输入y或者yes重启或者按Ctrl+C终止本程序" << endl;
check();
RebootIfIsWSL();
system("reboot");}
auto OsType = GetCurrentSystemType();
int main() {
if (OsType == System::Unsupported){
cout << "未知操作系统,为确保数据安全将会强制退出。"
<< endl
<< "如果是误报,请联系作者修复问题。"
<< endl;
throw runtime_error("不支持的操作系统"); }
auto OS = GetCurrentSystem();
auto Distro = GetCurrentWslDistro();
auto CurrentUser = GetCurrentUser();
if (CurrentUser == User::Other){
cout << "更改语言文件需要root权限,请使用sudo重新运行本程序" << endl;
throw runtime_error("权限不足"); }
if (OsType == System::WSL) {
cout << "检测到您使用的系统为:" << OS << endl;
cout << "并且该系统工作于WSL环境" << endl;
if (Distro == WslDistro::IsNotWsl){
throw runtime_error("无法获取WSL发行版信息"); }
if (Distro == WslDistro::Ubuntu){ Ubuntu(); }
else if (Distro == WslDistro::Debian){ Debian(); }
else{
cout << endl
<< "错误:当前仅适配了Ubuntu和Debian" << endl
<< "强行使用可能会造成不可预知的问题" << endl
<< "为避免出现故障,程序会强制退出" << endl;
throw runtime_error("不支持的发行版"); } }
else if (OsType == System::Linux) {
cout << "检测到您使用的系统为:" << OS << endl;
if (OS.find("Ubuntu") != string::npos){
Ubuntu(); }
if (OS.find("Debian") != string::npos or
OS.find("Armbian") != string::npos){
Debian(); } } }
+7
View File
@@ -0,0 +1,7 @@
apt update
apt install -y language-pack-zh-hans
locale-gen zh_CN.UTF-8
mv /etc/default/locale /etc/default/locale.backup
touch /etc/default/locale
echo LANG="zh_CN.UTF-8" > /etc/default/locale
reboot