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
8 changed files with 43 additions and 248 deletions
-3
View File
@@ -1,3 +0,0 @@
* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
-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 }}
-10
View File
@@ -1,10 +0,0 @@
################################################################################
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
################################################################################
.vs
.vscode
a.out
build
language
language_arm
-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.
+29 -34
View File
@@ -1,39 +1,34 @@
## 简介 # 一键切换Ubuntu系统到简体中文
将Linux的系统语言切换到简体中文 ## 两个版本
1.C++
## 支持的系统 2.纯Shell
- Debian ## 不同版本区别
- Ubuntu 这两个版本的唯一区别就是运行方式不一样,功能和结构没有任何区别
- Arch Linux 不信你可以去看源代码,C++版本我只是用了system函数执行shell语句,效果不能说天差地别吧,至少也能说是一模一样
- CachyOS ***
## 测试通过的系统
### **x86_64**
| 系统名称 | 版本 |
| - | - |
| Debian | 13.2 <br/> 11.6 |
| Ubuntu | 26.04 LTS <br/> 25.10 <br/> 25.04 <br/> 24.10 <br/> 24.04.1 LTS <br/> 22.04 LTS <br/> 20.04 LTS |
| Arch Linux | 滚动发行 |
### **aarch64**
| 系统名称 | 版本 |
| - | - |
| Debian | 11.5 |
## 使用方法 ## 使用方法
### **x86_64** # **注意!程序运行完之后会自动重启目标电脑/服务器,请确保没有未保存的工作!否则后果自负!**
确保已经安装wget或者有其他方法可以传输文件
```shell ```shell
sudo su apt update && apt install -y wget
wget https://github.com/TheWhiteDog9487/lag2cn/releases/latest/download/language
chmod +x language
./language
rm language
``` ```
### **aarch64** ***
下面两个版本选一个就行
***
下载程序(Shell)
```shell ```shell
sudo su wget https://raw.githubusercontent.com/TheWhiteDog9487/ubuntu-language-onekey-zh_cn/main/language.sh
wget https://github.com/TheWhiteDog9487/lag2cn/releases/latest/download/language_arm ```
chmod +x language_arm 下载程序(C++)
./language_arm ```shell
rm language_arm 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 -150
View File
@@ -1,152 +1,9 @@
#include <cstdlib> #include<cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <filesystem>
#include <vector>
#include <utility>
#include <unistd.h>
using namespace std; using namespace std;
int main(){
enum class System{
Ubuntu,
Debian,
ArchLinux,
Unsupported };
enum class User{
Root,
Other };
auto CheckIfRunningInsideWSL(){
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 true; }
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 true; }
osrelease_file.close(); }
return false; }
auto GetCurrentUser(){
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(); }
if(distro_name.find("Ubuntu") != string::npos){
return pair(System::Ubuntu, distro_name); }
else if(distro_name.find("Debian") != string::npos or
distro_name.find("Armbian") != string::npos){
return pair(System::Debian, distro_name); }
else if(distro_name.find("Arch Linux") != string::npos or
distro_name.find("CachyOS") != string::npos){
return pair(System::ArchLinux, distro_name); }
else{
return pair(System::Unsupported, 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 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 << "配置完成,更改将在您下一次登录Shell时应用" << endl; } system("mv /etc/default/locale /etc/default/locale.backup");
system("touch /etc/default/locale");
auto Debian(){ system("echo LANG=\"zh_CN.UTF-8\" > /etc/default/locale");
cout << "即将开始更新语言配置,请输入y或者yes继续,或者按Ctrl+C终止本程序"; system("reboot");}
check();
cout << "开始更新语言配置" << endl;
fstream locale_gen("/etc/locale.gen");
if (locale_gen.is_open() == false){
throw system_error(errno, system_category(), "未能正确打开/etc/locale.gen"); }
vector<string> FileContent;
string Buffer = "";
while (getline(locale_gen, Buffer)){
FileContent.push_back(Buffer); }
for (auto& Line : FileContent){
if (Line == "zh_CN.UTF-8 UTF-8"){
goto skip_write; } }
locale_gen.clear();
locale_gen.seekp(0, ios::end);
locale_gen << '\n' << "zh_CN.UTF-8 UTF-8" << endl;
skip_write:
locale_gen.close();
system("locale-gen");
system("update-locale LANG=zh_CN.UTF-8");
cout << "配置完成,更改将在您下一次登录Shell时应用" << endl; }
auto ArchLinux(){
// https://wiki.archlinuxcn.org/wiki/Locale
cout << "即将开始更新语言配置,请输入y或者yes继续,或者按Ctrl+C终止本程序";
check();
cout << "开始更新语言配置" << endl;
system("localectl set-locale LANG=zh_CN.UTF-8");
if (CheckIfRunningInsideWSL() == true){
// https://wiki.archlinuxcn.org/wiki/%E5%9C%A8_WSL_%E4%B8%8A%E5%AE%89%E8%A3%85_Arch_Linux#%E4%BF%AE%E6%94%B9%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE
cout << "检测到您正在WSL中运行Arch Linux,正在创建 /etc/locale.conf -> /etc/default/locale 符号链接" << endl;
filesystem::create_symlink("/etc/locale.conf", "/etc/default/locale"); }
cout << "配置完成,更改将在您下一次登录Shell时应用" << endl; }
auto ThrowUnsupportedSystemError(){
cout << "错误:未知操作系统" << endl
<< "当前仅适配了UbuntuDebian和Arch Linux" << endl
<< "强行使用可能会造成不可预知的问题" << endl
<< "为避免出现故障,程序会强制退出" << endl
<< "如果是误报,请在GitHub仓库打开一个新的issue。" << endl;
throw runtime_error("不支持的操作系统"); }
int main() {
auto OsType = GetCurrentSystem();
if (OsType.first == System::Unsupported){
ThrowUnsupportedSystemError(); }
if (GetCurrentUser() == User::Other){
cout << "更改语言文件需要root权限,请使用sudo重新运行本程序" << endl;
throw runtime_error("权限不足"); }
cout << "检测到您使用的系统为:" << OsType.second << endl;
if (OsType.first == System::Ubuntu){ Ubuntu(); }
if (OsType.first == System::Debian){ Debian(); }
if (OsType.first == System::ArchLinux){ ArchLinux(); } }
+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