3 Commits

Author SHA1 Message Date
TheWhiteDog9487 b7335b0bb8 - Debian系对原始/etc/locale.gen进行备份
- Debian系对/etc/locale.gen内不存在zh_CN.UTF-8 UTF-8的情况进行兜底
- Debian系打开和写入/etc/locale.gen时不使用BOM以解决gzip: stdout: Broken pipe和第一行注释被当作locale配置的问题
- RHEL系移除不被需要的忽略GPG参数

品控一定要严
2026-08-14 11:32:07 +08:00
TheWhiteDog9487 aae4cb05d2 优化错误提示 2026-08-13 17:06:42 +08:00
TheWhiteDog9487 0806f479d6 支持Fedora 2026-08-13 11:25:59 +08:00
3 changed files with 28 additions and 9 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ jobs:
alpine:latest /bin/sh -c ' alpine:latest /bin/sh -c '
apk update apk update
apk add build-base dotnet10-sdk clang apk add build-base dotnet10-sdk clang
dotnet publish language.cs /t:Rebuild --disable-build-servers --force ' dotnet publish language.cs '
- name: 重命名 - name: 重命名
if: ${{ matrix.runner == 'ubuntu-26.04-arm' }} if: ${{ matrix.runner == 'ubuntu-26.04-arm' }}
run: sudo mv artifacts/language/language artifacts/language/language_arm run: sudo mv artifacts/language/language artifacts/language/language_arm
+2
View File
@@ -9,6 +9,7 @@
- CachyOS - CachyOS
- Rocky Linux - Rocky Linux
- AlmaLinux - AlmaLinux
- Fedora
## 测试通过的系统 ## 测试通过的系统
### **x86_64** ### **x86_64**
@@ -19,6 +20,7 @@
| Arch Linux | 滚动发行 | | Arch Linux | 滚动发行 |
| Rocky Linux | 10.2 | | Rocky Linux | 10.2 |
| AlmaLinux | 10.2 | | AlmaLinux | 10.2 |
| Fedora | 44 <br/> 40 |
### **aarch64** ### **aarch64**
| 系统名称 | 版本 | | 系统名称 | 版本 |
+25 -8
View File
@@ -67,6 +67,7 @@ void ExecuteCommand(string Command,
string OsDescription = RuntimeInformation.OSDescription; string OsDescription = RuntimeInformation.OSDescription;
if (Enum.TryParse<SupportedLinuxDistributions>(OsDescription.Split(' ')[0], out var CurrentSystem) == false){ if (Enum.TryParse<SupportedLinuxDistributions>(OsDescription.Split(' ')[0], out var CurrentSystem) == false){
// 对于Arch Linux这种系统名称中间有空格的需要特判
if (OsDescription.Contains("Arch Linux")){ if (OsDescription.Contains("Arch Linux")){
CurrentSystem = SupportedLinuxDistributions.ArchLinux; } CurrentSystem = SupportedLinuxDistributions.ArchLinux; }
else if (OsDescription.Contains("Rocky Linux")){ else if (OsDescription.Contains("Rocky Linux")){
@@ -98,8 +99,10 @@ switch (CurrentSystem){
CheckUser(); CheckUser();
Console.WriteLine("正在检查语言配置"); Console.WriteLine("正在检查语言配置");
string[] NewContent = []; string[] NewContent = [];
File.Copy("/etc/locale.gen", "/etc/locale.gen.bak", true);
Console.WriteLine("原始 /etc/locale.gen 文件已备份为 /etc/locale.gen.bak");
using var FileStream = new FileStream("/etc/locale.gen", FileMode.Open, FileAccess.ReadWrite, FileShare.None); using var FileStream = new FileStream("/etc/locale.gen", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
using (var StreamReader = new StreamReader(FileStream, Encoding.UTF8, true, 1024, true)){ using (var StreamReader = new StreamReader(FileStream, new UTF8Encoding(false), true, 1024, true)){
NewContent = [.. StreamReader.ReadToEnd() NewContent = [.. StreamReader.ReadToEnd()
.Split("\n") .Split("\n")
.Select(Line => Line.Trim()) .Select(Line => Line.Trim())
@@ -107,9 +110,15 @@ switch (CurrentSystem){
if (Line.Contains("zh_CN.UTF-8 UTF-8")){ if (Line.Contains("zh_CN.UTF-8 UTF-8")){
Line = "zh_CN.UTF-8 UTF-8"; } Line = "zh_CN.UTF-8 UTF-8"; }
return Line; } ) ]; } return Line; } ) ]; }
if (NewContent.Any(Line => Line.StartsWith("zh_CN.UTF-8 UTF-8")) == false){
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("警告:在 /etc/locale.gen 中未检测到 zh_CN.UTF-8 UTF-8 条目,这种情况较为反常,建议您关注后续的执行结果");
Console.WriteLine("如果需要恢复备份,请直接使用 /etc/locale.gen.bak 覆盖 /etc/locale.gen");
Console.ResetColor();
NewContent = [.. NewContent, "zh_CN.UTF-8 UTF-8"]; }
FileStream.SetLength(0); FileStream.SetLength(0);
FileStream.Seek(0, SeekOrigin.Begin); FileStream.Seek(0, SeekOrigin.Begin);
using (var StreamWriter = new StreamWriter(FileStream, Encoding.UTF8)){ using (var StreamWriter = new StreamWriter(FileStream, new UTF8Encoding(false), 1024, true)){
foreach (var Line in NewContent){ foreach (var Line in NewContent){
StreamWriter.WriteLine(Line); } } StreamWriter.WriteLine(Line); } }
Console.WriteLine("正在生成语言配置"); Console.WriteLine("正在生成语言配置");
@@ -137,24 +146,31 @@ switch (CurrentSystem){
File.Move("/etc/default/locale", "/etc/default/locale.bak", true); } File.Move("/etc/default/locale", "/etc/default/locale.bak", true); }
File.CreateSymbolicLink("/etc/default/locale", "/etc/locale.conf"); } File.CreateSymbolicLink("/etc/default/locale", "/etc/locale.conf"); }
break; } break; }
case SupportedLinuxDistributions.RockyLinux or SupportedLinuxDistributions.AlmaLinux: { case SupportedLinuxDistributions.RockyLinux or SupportedLinuxDistributions.AlmaLinux or SupportedLinuxDistributions.Fedora: {
CheckUser("即将开始安装中文语言包"); CheckUser("即将开始安装中文语言包");
Console.WriteLine("开始更新语言配置"); Console.WriteLine("开始更新语言配置");
Console.WriteLine("正在安装中文语言包"); Console.WriteLine("正在安装中文语言包");
ExecuteCommand("dnf", ["install", "-y", "--nogpgcheck", "glibc-langpack-zh", "langpacks-zh_CN"]); ExecuteCommand("dnf", ["install", "-y", "glibc-langpack-zh", "langpacks-zh_CN"]);
Console.WriteLine("正在更新语言配置"); Console.WriteLine("正在更新语言配置");
ExecuteCommand("localectl", ["set-locale", "LANG=zh_CN.UTF-8"]); ExecuteCommand("localectl", ["set-locale", "LANG=zh_CN.UTF-8"]);
if (IsRunningInsideWSL() && CurrentSystem == SupportedLinuxDistributions.AlmaLinux) { if (IsRunningInsideWSL() && CurrentSystem == SupportedLinuxDistributions.AlmaLinux) {
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("警告:检测到您正在WSL内使用AlmaLinux"); Console.WriteLine("警告:检测到您正在WSL内使用AlmaLinux");
Console.WriteLine("目前已知AlmaLinuxWSL镜像可能存在一些问题"); Console.WriteLine("目前已知AlmaLinuxWSL镜像可能存在一些问题");
Console.WriteLine("如果您遇到了诸如 dnf nano 等软件的显示仍然为英文的问题"); Console.WriteLine("如果您遇到了诸如 dnf nano 等软件的显示仍然为英文的问题");
Console.WriteLine("请尝试使用dnf重新安装或升级出现问题的软件包,或者直接完整更新系统内所有软件包,这应当可以解决问题"); Console.WriteLine("请尝试使用dnf重新安装或升级出现问题的软件包,或者直接完整更新系统内所有软件包,这应当可以解决问题");
Console.WriteLine(); Console.WriteLine();
Console.ResetColor(); } Console.ResetColor(); }
break; } } break; }
default: {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"错误:您当前使用的操作系统 {OsDescription} ,匹配名称 {CurrentSystem} 受到支持,但是lag2cn没有为其配置执行逻辑");
Console.WriteLine("这是一个程序Bug,请前往Github仓库开启一个issue,并提供当前输出日志");
Console.ResetColor();
throw new InvalidOperationException("遗漏的switch匹配"); } }
Console.WriteLine("配置完成,更改将在您下一次登录Shell时生效,按任意键退出"); Console.WriteLine("配置完成,更改将在您下一次登录Shell时生效,按任意键退出");
Console.ReadKey(true); Console.ReadKey(true);
@@ -165,4 +181,5 @@ enum SupportedLinuxDistributions {
ArchLinux, ArchLinux,
CachyOS, CachyOS,
RockyLinux, RockyLinux,
AlmaLinux } AlmaLinux,
Fedora }