diff --git a/NEWS.md b/NEWS.md
index 8c34f71c..5caf6d7e 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -15,6 +15,7 @@ Red Panda C++ Version 1.0.0
- fix: syntax color of #include header filenames not correct
- enhancement: disable "code completion" will disable enhanced syntax highlight
- enhancement: match bracket
+ - enhancement: **Linux** convert to "gbk"/"gb18030" encodings when run under "zh_CN" locale
Red Panda C++ Version 0.14.5
- fix: the "gnu c++ 20" option in compiler set options is wrong
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index a4b02257..c919c8e4 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -3788,11 +3788,11 @@ Are you really want to continue?
-
-
-
-
-
+
+
+
+
+
编译器
@@ -4215,7 +4215,7 @@ Are you really want to continue?
-
+
新建试题集
@@ -4234,14 +4234,14 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
@@ -4580,7 +4580,7 @@ Are you really want to continue?
-
+
删除所有断点
@@ -4681,7 +4681,7 @@ Are you really want to continue?
-
+
重命名符号
@@ -4702,13 +4702,13 @@ Are you really want to continue?
-
+
导出为RTF
-
+
导出为HTML
@@ -5208,7 +5208,7 @@ Are you really want to continue?
-
+
试题集%1
@@ -5282,15 +5282,15 @@ Are you really want to continue?
-
-
+
+
书签描述
-
-
+
+
描述:
@@ -5402,16 +5402,16 @@ Are you really want to continue?
-
-
+
+
新建文件夹
-
-
-
+
+
+
删除
@@ -5441,228 +5441,233 @@ Are you really want to continue?
字符集
-
+
+
+ 转换为%1编码
+
+
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
-
+
C/C++Source Files (*.c *.cpp *.cc *.cxx
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
你真的要删除%1吗?
-
+
你真的要删除%1个文件吗?
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
+
你真的想要做那些吗?
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
文件夹%1不是空的。
-
+
你真的要删除它吗?
-
+
改变工作文件夹
-
+
File '%1' is not in the current working folder
文件'%1'不在当前工作文件夹中。
-
+
是否将工作文件夹改设为'%1'?
-
+
无法提交
-
+
Git需要用信息进行提交。
-
+
选择工作文件夹
-
-
+
+
头文件已存在
-
-
+
+
头文件"%1"已存在!
-
+
源文件已存在!
-
+
源文件"%1"已存在!
-
+
无法提交!
-
+
下列文件处于冲突状态,请解决后重新添加和提交:
-
+
提交信息
-
+
提交信息:
-
+
提交失败
-
+
提交信息不能为空!
@@ -5671,125 +5676,125 @@ Are you really want to continue?
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
小熊猫C++项目文件(*.dev)
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
-
+
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
@@ -5803,12 +5808,12 @@ Are you really want to continue?
-
-
-
-
-
-
+
+
+
+
+
+
错误
@@ -5829,81 +5834,83 @@ Are you really want to continue?
清除历史
-
-
+
+
版本控制
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
+
+
+
确认转换
-
-
+
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -8046,7 +8053,7 @@ Are you really want to continue?
自动链接
-
+
@@ -8122,15 +8129,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index c9b8eed2..00743edd 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -2897,6 +2897,26 @@ void MainWindow::buildEncodingMenu()
mMenuEncoding->addAction(ui->actionConvert_to_ANSI);
mMenuEncoding->addAction(ui->actionConvert_to_UTF_8);
+ QList charsetsForLocale = pCharsetInfoManager->findCharsetByLocale(pCharsetInfoManager->localeName());
+
+ foreach(const PCharsetInfo& charset, charsetsForLocale) {
+ QAction * action = new QAction(
+ tr("Convert to %1").arg(QString(charset->name)));
+ connect(action, &QAction::triggered,
+ [charset,this](){
+ Editor * editor = mEditorList->getEditor();
+ if (editor == nullptr)
+ return;
+ if (QMessageBox::warning(this,tr("Confirm Convertion"),
+ tr("The editing file will be saved using %1 encoding.
This operation can't be reverted.
Are you sure to continue?")
+ .arg(QString(charset->name)),
+ QMessageBox::Yes, QMessageBox::No)!=QMessageBox::Yes)
+ return;
+ editor->convertToEncoding(charset->name);
+ });
+ mMenuEncoding->addAction(action);
+ }
+
ui->menuEdit->insertMenu(ui->actionFoldAll,mMenuEncoding);
ui->menuEdit->insertSeparator(ui->actionFoldAll);
ui->actionAuto_Detect->setCheckable(true);