diff --git a/dialogExecution/editVMNew.py b/dialogExecution/editVMNew.py
index 84de8e0..54218f9 100644
--- a/dialogExecution/editVMNew.py
+++ b/dialogExecution/editVMNew.py
@@ -24,6 +24,7 @@
import translations.pt
import translations.it
import translations.pl
+import translations.zhcn
import locale
import errors.logman
import errors.logID
@@ -145,6 +146,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -217,6 +221,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateEditVMIT(self, self.vmSpecs[0])
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateEditVMCN(self, self.vmSpecs[0])
+
else:
translations.en.translateEditVMEN(self, self.vmSpecs[0])
@@ -271,6 +278,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("pl"):
translations.pl.translateEditVMPL(self, self.vmSpecs[0])
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateEditVMCN(self, self.vmSpecs[0])
+
elif languageToUse.startswith("it"):
translations.it.translateEditVMIT(self, self.vmSpecs[0])
diff --git a/dialogExecution/errDialog.py b/dialogExecution/errDialog.py
index d7d529e..94d8098 100644
--- a/dialogExecution/errDialog.py
+++ b/dialogExecution/errDialog.py
@@ -21,6 +21,7 @@
import translations.pt
import translations.it
import translations.pl
+import translations.zhcn
import locale
import sqlite3
import services.pathfinder as pf
@@ -140,6 +141,9 @@ def langDetect(self):
elif result[0][1] == "pl":
langmode = "pl"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -195,6 +199,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateErrDialogIT(self, self.vmSpecs[0])
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateErrDialogCN(self, self.vmSpecs[0])
+
else:
translations.en.translateErrDialogEN(self, self.vmSpecs[0])
@@ -244,6 +251,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateErrDialogIT(self, self.vmSpecs[0])
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateErrDialogCN(self, self.vmSpecs[0])
+
else:
translations.en.translateErrDialogEN(self, self.vmSpecs[0])
diff --git a/dialogExecution/newVirtualMachine.py b/dialogExecution/newVirtualMachine.py
index 9605fda..422d1c5 100644
--- a/dialogExecution/newVirtualMachine.py
+++ b/dialogExecution/newVirtualMachine.py
@@ -27,6 +27,7 @@
import translations.pt
import translations.it
import translations.pl
+import translations.zhcn
import locale
import plugins.pluginmgr.hw_reader as hwpr # HWPR = HardWare Plug-in Reader
import services.pathfinder as pf
@@ -227,6 +228,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zhcn":
+ langmode = "zhcn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -299,6 +303,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateNewVmIT(self)
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateNewVmCN(self)
+
else:
translations.en.translateNewVmEN(self)
@@ -356,6 +363,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateNewVmIT(self)
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateNewVmCN(self)
+
else:
translations.en.translateNewVmEN(self)
diff --git a/dialogExecution/noUpdateAvailable.py b/dialogExecution/noUpdateAvailable.py
index 06cb4de..2f122a8 100644
--- a/dialogExecution/noUpdateAvailable.py
+++ b/dialogExecution/noUpdateAvailable.py
@@ -13,6 +13,7 @@
import translations.de
import translations.uk
import translations.en
+import translations.zhcn
import locale
class NoUpdateAvailable(QDialog, Ui_Dialog):
@@ -70,6 +71,9 @@ def langDetect(self):
elif result[0][1] == "uk":
langmode = "uk"
+ elif result[0][1] == "zhcn":
+ langmode = "zhcn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -98,6 +102,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("uk"):
translations.uk.translateNoUpdateAvailableUK(self)
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateNoUpdateAvaliableCN(self)
+
else:
translations.en.translateNoUpdateAvailableEN(self)
@@ -120,6 +127,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("uk"):
translations.uk.translateNoUpdateAvailableUK(self)
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateNoUpdateAvaliableCN(self)
+
else:
translations.en.translateNoUpdateAvailableEN(self)
diff --git a/dialogExecution/qemuImgError.py b/dialogExecution/qemuImgError.py
index 1c7318b..eae5fcb 100644
--- a/dialogExecution/qemuImgError.py
+++ b/dialogExecution/qemuImgError.py
@@ -20,6 +20,7 @@
import translations.ru
import translations.pt
import translations.it
+import translations.zhcn
import locale
import sqlite3
@@ -107,6 +108,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -159,6 +163,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateQemuImgMissingIT(self)
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateQemuImgMissingCN(self)
+
else:
translations.en.translateQemuImgMissingEN(self)
diff --git a/dialogExecution/qemuSysError.py b/dialogExecution/qemuSysError.py
index ef0df17..c2cde97 100644
--- a/dialogExecution/qemuSysError.py
+++ b/dialogExecution/qemuSysError.py
@@ -20,6 +20,7 @@
import translations.ru
import translations.pt
import translations.it
+import translations.zhcn
import locale
import sqlite3
@@ -127,6 +128,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -179,6 +183,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateQemuSysMissingIT(self, self.vmSpecs[1])
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateQemuSysMissingCN(self, self.vmSpecs[1])
+
else:
translations.en.translateQemuSysMissingEN(self, self.vmSpecs[1])
@@ -225,6 +232,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateQemuSysMissingIT(self, self.vmSpecs[1])
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateQemuSysMissingCN(self, self.vmSpecs[1])
+
else:
translations.en.translateQemuSysMissingEN(self, self.vmSpecs[1])
diff --git a/dialogExecution/startVirtualMachine.py b/dialogExecution/startVirtualMachine.py
index ab8f09a..6945ed7 100644
--- a/dialogExecution/startVirtualMachine.py
+++ b/dialogExecution/startVirtualMachine.py
@@ -15,7 +15,7 @@
import subprocess
from PySide6.QtCore import QDateTime
from random import randint
-import magic
+#import magic
import translations.de
import translations.uk
import translations.en
@@ -28,6 +28,7 @@
import translations.pt
import translations.it
import translations.pl
+import translations.zhcn
import locale
import errors.errCodes
from dialogExecution.errDialog import ErrDialog
@@ -168,6 +169,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zhcn":
+ langmode = "zhcn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -223,6 +227,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateStartVmIT(self, self.vmSpecs[0])
+ elif languageToUse.startswith("zhcn"):
+ translations.zhcn.translateStartVmCN(self, self.vmSpecs[0])
+
else:
translations.en.translateStartVmEN(self, self.vmSpecs[0])
diff --git a/dialogExecution/updateAvailable.py b/dialogExecution/updateAvailable.py
index 2478581..a6e916a 100644
--- a/dialogExecution/updateAvailable.py
+++ b/dialogExecution/updateAvailable.py
@@ -17,6 +17,7 @@
import translations.be
import translations.cz
import translations.ru
+import translations.zhcn
import locale
class UpdateAvailable(QDialog, Ui_Dialog):
diff --git a/dialogExecution/vhdExistsDialog.py b/dialogExecution/vhdExistsDialog.py
index e43eb67..9637d1e 100644
--- a/dialogExecution/vhdExistsDialog.py
+++ b/dialogExecution/vhdExistsDialog.py
@@ -21,6 +21,7 @@
import translations.ru
import translations.pt
import translations.it
+import translations.zhcn
import locale
class VhdAlreadyExists(QDialog, Ui_Dialog):
@@ -132,6 +133,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -184,6 +188,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateVhdExistsIT(self)
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateVhdExistsCN(self)
+
else:
translations.en.translateVhdExistsEN(self)
@@ -230,6 +237,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateVhdExistsIT(self)
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateVhdExistsCN(self)
+
else:
translations.en.translateVhdExistsEN(self)
diff --git a/dialogExecution/vmExistsDialog.py b/dialogExecution/vmExistsDialog.py
index 3d74d98..e89e06b 100644
--- a/dialogExecution/vmExistsDialog.py
+++ b/dialogExecution/vmExistsDialog.py
@@ -21,6 +21,7 @@
import translations.ru
import translations.pt
import translations.it
+import translations.zhcn
import locale
class VmAlreadyExistsDialog(QDialog, Ui_Dialog):
@@ -107,6 +108,9 @@ def langDetect(self):
elif result[0][1] == "it":
langmode = "it"
+ elif result[0][1] == "zh_cn":
+ langmode = "zh_cn"
+
elif result[0][1] == "system":
langmode = "system"
@@ -159,6 +163,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateVmExistsIT(self)
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateVmExistsCN(self)
+
else:
translations.en.translateVmExistsEN(self)
@@ -205,6 +212,9 @@ def setLanguage(self, langmode):
elif languageToUse.startswith("it"):
translations.it.translateVmExistsIT(self)
+ elif languageToUse.startswith("zh_cn"):
+ translations.zhcn.translateVmExistsCN(self)
+
else:
translations.en.translateVmExistsEN(self)
diff --git a/dialogExecution/vmTooNew.py b/dialogExecution/vmTooNew.py
index b680b7f..6bb6755 100644
--- a/dialogExecution/vmTooNew.py
+++ b/dialogExecution/vmTooNew.py
@@ -21,6 +21,7 @@
import translations.ru
import translations.pt
import translations.it
+import translations.zhcn
import locale
class VmIsMadeWithTooYoungEmuGUI(QDialog, Ui_Dialog):
diff --git a/emugui.py b/emugui.py
index 3a12d43..45bda50 100644
--- a/emugui.py
+++ b/emugui.py
@@ -70,6 +70,7 @@
import translations.pt
import translations.it
import translations.pl
+ import translations.zhcn
import locale
except:
@@ -355,6 +356,14 @@ def setLanguage(self, langmode):
if langmode != "system":
self.languageInUse = "de"
+
+ elif languageToUse.startswith("zh"):
+
+ translations.zhcn.translateMainCN(self)
+
+ if langmode != "system":
+ self.languageInUse = "zhcn"
+
elif languageToUse.startswith("uk"):
translations.uk.translateMainUK(self)
@@ -612,6 +621,7 @@ def prepareDatabase(self, connection):
# pt: Portuguese
# it: Italian
# pl: Polish
+ # zhcn: Chinese (Simplified)
insert_language = """
INSERT INTO settings (
name, value
@@ -935,6 +945,16 @@ def prepareDatabase(self, connection):
langmode = "be"
+ elif result[0][1] == "zhcn":
+ while i < self.comboBox_4.count():
+ if self.comboBox_4.itemText(i) == "简体中文":
+ self.comboBox_4.setCurrentIndex(i)
+ break
+
+ i += 1
+
+ langmode = "zhcn"
+
if platform.system() == "Windows":
langfile = platformSpecific.windowsSpecific.windowsLanguageFile()
@@ -2658,6 +2678,12 @@ def applyGeneric(self):
WHERE name = 'lang';
"""
+ language_zhcn = f"""
+ UPDATE settings
+ SET value = 'zhcn'
+ WHERE name = 'lang';
+ """
+
language_it = f"""
UPDATE settings
SET value = 'it'
@@ -3240,6 +3266,76 @@ def applyGeneric(self):
dialog = SettingsRequireEmuGUIReboot(self)
dialog.exec()
+ elif self.comboBox_4.currentText() == "简体中文":
+ langmode = "zhcn"
+
+ try:
+ cursor.execute(language_zhcn)
+ connection.commit()
+
+ if platform.system() == "Windows":
+ langfile = platformSpecific.windowsSpecific.windowsLanguageFile()
+
+ else:
+ langfile = platformSpecific.unixSpecific.unixLanguageFile()
+
+ if langmode == "system":
+ languageToUseLater = locale.getlocale()[0]
+ languageToUseEvenLater = languageToUseLater.split("_")
+ languageToUseHere = languageToUseEvenLater[0]
+
+ else:
+ languageToUseHere = langmode
+
+ try:
+ with open(langfile, "w+") as language:
+ language.write(languageToUseHere)
+
+ except:
+ print("EmuGUI failed to create a language file. Expect some issues.")
+
+ if platform.system() == "Windows":
+ errorFile = platformSpecific.windowsSpecific.windowsErrorFile()
+
+ else:
+ errorFile = platformSpecific.unixSpecific.unixErrorFile()
+
+ with open(errorFile, "w+") as errCodeFile:
+ errCodeFile.write(errors.errCodes.errCodes[54])
+
+ logman.writeToLogFile(
+ f"{errors.errCodes.errCodes[54]}: Could not create the language file. Expect issues."
+ )
+
+ dialog = ErrDialog(self)
+ dialog.exec()
+
+ self.setLanguage(langmode)
+ print("The query was executed successfully.")
+
+ except sqlite3.Error as e:
+ print(f"The SQLite module encountered an error: {e}.")
+
+ if platform.system() == "Windows":
+ errorFile = platformSpecific.windowsSpecific.windowsErrorFile()
+
+ else:
+ errorFile = platformSpecific.unixSpecific.unixErrorFile()
+
+ with open(errorFile, "w+") as errCodeFile:
+ errCodeFile.write(errors.errCodes.errCodes[12])
+
+ logman.writeToLogFile(
+ f"{errors.errCodes.errCodes[12]}: The database could not be accessed and the settings are therefore not applied. SQLite describes the error as follows: \"{e}\""
+ )
+
+ dialog = ErrDialog(self)
+ dialog.exec()
+
+ except:
+ dialog = SettingsRequireEmuGUIReboot(self)
+ dialog.exec()
+
elif self.comboBox_4.currentText() == "Românã":
langmode = "ro"
diff --git a/translations/systemdefault.txt b/translations/systemdefault.txt
index 3828e51..d97b230 100644
--- a/translations/systemdefault.txt
+++ b/translations/systemdefault.txt
@@ -1,4 +1,5 @@
System default
+系统缺省
Systemstandard
По умолчанию системы
Па змаўчанні сістэмы
diff --git a/translations/zhcn.py b/translations/zhcn.py
new file mode 100644
index 0000000..05afedd
--- /dev/null
+++ b/translations/zhcn.py
@@ -0,0 +1,515 @@
+from translations.systemdefaultset import *
+
+
+def translateMainCN(window):
+ # Tab group 1
+ window.tabWidget.setTabText(0, "主页") # Main
+ window.tabWidget.setTabText(1, "设置") # Settings
+
+ # Main tab
+ window.pushButton_8.setText("创建新的虚拟机") # New virtual machine
+ window.pushButton_9.setText("启动虚拟机") # Start virtual machine
+ window.pushButton_10.setText("编辑选中的虚拟机") # Edit selected virtual machine
+ window.pushButton_11.setText("删除选中的虚拟机") # Delete selected virtual machine
+ window.pushButton_22.setText("导出选中的虚拟机") # Export selected virtual machine
+ window.pushButton_23.setText("导入现有的虚拟机") # Import virtual machine
+
+ # Settings tabs
+ window.tabWidget_2.setTabText(0, "一般") # General
+ window.tabWidget_2.setTabText(3, "关于 EmuGUI") # About EmuGUI
+
+ # General tab
+ window.label_15.setText("语言") # Language
+ window.pushButton_15.setText("应用") # Apply
+
+ # Combo box for languages
+ i = 0
+
+ while i < window.comboBox_4.count():
+ sysDefSet("系统缺省", window.comboBox_4, i) # System default
+
+ i += 1
+
+ # Combo box for themes
+ i = 0
+
+ while i < window.comboBox_5.count():
+ sysDefSet("系统缺省", window.comboBox_5, i) # System default
+
+ i += 1
+
+ # QEMU tab
+ window.label.setText("qemu-img 路径") # qemu-img 路径
+ window.label_2.setText("qemu-system-i386 路径") # qemu-system-i386 路径
+ window.label_3.setText("qemu-system-x86_64 路径") # qemu-system-x86_64 路径
+ window.label_4.setText("qemu-system-ppc 路径") # qemu-system-ppc 路径
+ window.label_5.setText("qemu-system-mips64el 路径") # qemu-system-mips64el 路径
+ window.label_9.setText("qemu-system-aarch64 路径") # qemu-system-aarch64 路径
+ window.label_11.setText("qemu-system-arm 路径") # qemu-system-arm 路径
+ window.label_16.setText("qemu-system-ppc64 路径") # qemu-system-ppc64 路径
+ window.label_17.setText("qemu-system-mipsel 路径") # qemu-system-mipsel 路径
+ window.label_18.setText("qemu-system-mips 路径") # qemu-system-mips 路径
+ window.label_19.setText("qemu-system-mips64 路径") # qemu-system-mips64 路径
+ window.label_12.setText("qemu-system-sparc 路径") # qemu-system-sparc 路径
+ window.label_13.setText("qemu-system-sparc64 路径") # qemu-system-sparc64 路径
+ window.lbl_alpha.setText("qemu-system-alpha 路径") # qemu-system-alpha 路径
+ window.lbl_riscv32.setText("qemu-system-riscv32 路径") # qemu-system-riscv32 路径
+ window.lbl_riscv64.setText("qemu-system-riscv64 路径") # qemu-system-riscv64 路径
+
+ window.pushButton.setText("浏览") # 浏览
+ window.pushButton_2.setText("浏览") # 浏览
+ window.pushButton_3.setText("浏览") # 浏览
+ window.pushButton_4.setText("浏览") # 浏览
+ window.pushButton_5.setText("浏览") # 浏览
+ window.pushButton_7.setText("浏览") # 浏览
+ window.pushButton_12.setText("浏览") # 浏览
+ window.pushButton_16.setText("浏览") # 浏览
+ window.pushButton_17.setText("浏览") # 浏览
+ window.pushButton_18.setText("浏览") # 浏览
+ window.pushButton_19.setText("浏览") # 浏览
+ window.pushButton_13.setText("浏览") # 浏览
+ window.pushButton_14.setText("浏览") # 浏览
+ window.btn_alpha.setText("浏览") # 浏览
+ window.btn_riscv32.setText("浏览") # 浏览
+ window.btn_riscv64.setText("浏览") # 浏览
+ window.pushButton_6.setText("应用") # Apply
+ window.btn_apply_qemu2.setText("应用") # Apply
+
+ # About tab
+ # label_7 = Built on Python and PyQt technology, licensed under GNU General Public License 3.0
+ window.label_7.setText("使用Python和PyQt技术,基于GNU GPLv3许可证进行授权")
+
+ window.label_10.setText(
+ """
+ WARNING: This program comes with ABSOLUTELY NO WARRANTY under applicable law. Please see the GNU GPL license for details.
+ """
+ ) # WARNING: This program comes with ABSOLUTELY NO WARRANTY under applicable law. Please see the GNU GPL license for details.
+
+ window.label_14.setText("Banner made by Tech-FZ.") # Banner made by (insert author of current banner here).
+
+ window.label_21.setText("在社交媒体上的 EmuGUI (使用英语)") # EmuGUI on social media (in English)
+
+
+def translateNewVmCN(window):
+ window.setWindowTitle("EmuGUI - 创建新的虚拟机")
+
+ # First page
+ window.lbl_vmname.setText("名称") # Name
+ window.lbl_arch.setText("架构") # Architecture
+ window.cb_arch.setPlaceholderText("请选择一个架构") # Please choose an architecture
+
+ window.btn_next1.setText("下一步 >") # Next >
+ window.btn_cancel1.setText("取消") # Cancel
+
+ # Second page
+ window.lbl_machine.setText("机型") # Machine
+ window.lbl_cpu.setText("处理器") # CPU
+ window.lbl_ram.setText("内存(以MB为单位)") # RAM in MB
+
+ window.cb_machine.setPlaceholderText("请选择一款机型") # Please select a machine
+ window.cb_cpu.setPlaceholderText("请选择一款处理器") # Please select a processor
+
+ window.pb_prev2.setText("< 上一步") # < Previous
+ window.pb_next2.setText("下一步 >") # Next >
+ window.pb_cancel2.setText("取消") # Cancel
+
+ # Combo boxes on second page
+ i = 0
+
+ while i < window.cb_machine.count():
+ if window.cb_machine.itemText(i) == "Let QEMU decide" or window.cb_machine.itemText(i) == "QEMU überlassen":
+ window.cb_machine.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_cpu.count():
+ if window.cb_cpu.itemText(i) == "Let QEMU decide" or window.cb_cpu.itemText(i) == "QEMU überlassen":
+ window.cb_cpu.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ # Third page
+ window.lbl_vhdU.setText("VHD使用情况") # VHD usage
+
+ # Combobox for VHD usage
+ i = 0
+
+ while i < window.cb_vhdU.count():
+ if window.cb_vhdU.itemText(i) == "Create a new virtual hard drive":
+ window.cb_vhdU.setItemText(i, "创建一个新的虚拟磁盘") # Create a new virtual hard drive
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_vhdU.count():
+ if window.cb_vhdU.itemText(i) == "Add an existing virtual hard drive":
+ window.cb_vhdU.setItemText(i, "添加一个现有的虚拟磁盘") # Add an existing virtual hard drive
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_vhdU.count():
+ if window.cb_vhdU.itemText(i) == "Don't add a virtual hard drive":
+ window.cb_vhdU.setItemText(i, "不要添加虚拟磁盘") # Don't add a virtual hard drive
+ break
+
+ i += 1
+
+ window.lbl_vhdP.setText("VHD路径") # VHD path
+ window.lbl_vhdF.setText("VHD文件格式") # VHD file format
+ window.lbl_maxsize.setText("最大大小") # Maximum size
+ window.lbl_hddC.setText("硬盘控制器") # HDD controller
+
+ i = 0
+
+ while i < window.cb_hddC.count():
+ if window.cb_hddC.itemText(i) == "Let QEMU decide" or window.cb_hddC.itemText(i) == "QEMU überlassen":
+ window.cb_hddC.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ window.cb_vhdF.setPlaceholderText("(请选择一种文件格式)") # (Please select a file format)
+
+ window.btn_vhdP.setText("浏览") # 浏览
+ window.btn_prev3.setText("< 上一步") # < Previous
+ window.btn_next3.setText("下一步t >") # Next >
+ window.btn_cancel3.setText("取消") # Cancel
+
+ # Fourth page
+ window.lbl_vga.setText("显卡") # VGA
+ window.lbl_net.setText("网卡") # Network
+ window.lbl_mouse.setText("鼠标") # Mouse
+
+ window.cb_vga.setPlaceholderText("(请选择一种图形适配器)") # (Please select a graphics adapter)
+ window.cb_net.setPlaceholderText("(请选择一种网卡)") # (Please select a network adapter)
+
+ window.btn_prev4.setText("< 上一步") # < Previous
+ window.btn_next4.setText("下一步 >") # Next >
+ window.btn_cancel4.setText("取消") # Cancel
+
+ # Fifth page
+ window.lbl_biosLoc.setText(
+ "外部固件文件(留空使用缺省固件)"
+ ) # Location of external\nBIOS file (Leave\nempty to use the\ndefault BIOS)
+
+ window.lbl_biosF.setText("外部固件文件") # External BIOS file
+
+ window.btn_biosF.setText("浏览") # 浏览
+ window.btn_prev5.setText("< 上一步") # < Previous
+ window.btn_next5.setText("下一步 >") # Next >
+ window.btn_cancel5.setText("取消") # Cancel
+
+ # Sixth page
+ window.lbl_sound.setText("声卡") # Sound card
+ window.lbl_cores.setText("处理器核心数") # CPU cores
+ window.lbl_kbd.setText("键盘") # Keyboard
+ window.lbl_kbdlayout.setText("键盘格式") # Keyboard layout
+
+ window.btn_prev6.setText("< 上一步") # < Previous
+ window.btn_next6.setText("下一步 >") # Next >
+ window.btn_cancel6.setText("取消") # Cancel
+
+ # Seventh page
+ window.lbl_kernel.setText("Linux 内核") # Linux kernel
+ window.lbl_initrd.setText("Linux 初始化内存盘") # Linux initrd image
+ window.lbl_cmd.setText("Linux cmd 命令") # Linux cmd args
+
+ window.btn_kernel.setText("浏览") # 浏览
+ window.btn_initrd.setText("浏览") # 浏览
+ window.btn_prev7.setText("< 上一步") # < Previous
+ window.btn_next7.setText("下一步 >") # Next >
+ window.btn_cancel7.setText("取消") # Cancel
+
+ # Eighth page
+ window.lbl_accel.setText("加速") # Acceleration
+ window.lbl_cdc1.setText("光驱控制器1") # CD controller 1
+ window.lbl_cdc2.setText("光驱控制器2") # CD controller 2
+
+ i = 0
+
+ while i < window.cb_cdc1.count():
+ if window.cb_cdc1.itemText(i) == "Let QEMU decide" or window.cb_cdc1.itemText(i) == "QEMU überlassen":
+ window.cb_cdc1.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_cdc2.count():
+ if window.cb_cdc2.itemText(i) == "Let QEMU decide" or window.cb_cdc2.itemText(i) == "QEMU überlassen":
+ window.cb_cdc2.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ window.btn_prev8.setText("< 上一步") # < Previous
+ window.btn_next8.setText("下一步 >") # Next >
+ window.btn_cancel8.setText("取消") # Cancel
+
+ # Ninth page
+ window.lbl_addargs.setText("附加参数 (如果需要)") # Additional arguments (if needed)
+
+ window.checkBox_2.setText(
+ "我想安装Windows 2000\n(已弃用)") # I want to install Windows 2000\n(depreciated)
+ window.chb_usb.setText("添加USB支持") # Add USB support
+
+ window.btn_prev9.setText("< 上一步") # < Previous
+ window.btn_finish.setText("完成") # Finish
+ window.btn_cancel9.setText("取消") # Cancel
+
+
+def translateStartVmCN(window, vmname):
+ window.setWindowTitle(f"EmuGUI - 启动 {vmname}")
+ window.label_4.setText("日期与时间") # Date & Time
+ window.label_3.setText("引导设备") # Boot from
+ window.label_6.setText("TPM 路径 (仅Linux)") # TPM path (Linux only)
+ window.label_7.setText("从终端创建TPM") # Create the TPM from the terminal!
+
+ window.label_5.setText("""
+ 注意:如果虚拟机在五分钟内无法启动,你应该检查一下QEMU和虚拟机的设置
+ """) # Note: If the VM doesn't start within five minutes, then you should check the VM and QEMU settings.
+
+ window.pushButton.setText("浏览") # 浏览
+ window.pushButton_2.setText("浏览") # 浏览
+ window.pushButton_6.setText("浏览") # 浏览
+ window.pushButton_5.setText("选择系统") # Set to system
+ window.pushButton_3.setText("启动虚拟机") # Start VM
+ window.pushButton_4.setText("取消") # Cancel
+ window.checkBox.setText("使用实时时钟选项") # Use RTC option
+
+ # Combo box for boot
+ i = 0
+
+ while i < window.comboBox.count():
+ if window.comboBox.itemText(i) == "Let QEMU decide" or window.comboBox.itemText(i) == "QEMU überlassen":
+ window.comboBox.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+
+def translateVmExistsCN(window):
+ window.label.setText(
+ "抱歉,已存在一个名字相同的虚拟机"
+ ) # Sorry, but a VM with this name already exists.
+
+ window.label_2.setText(
+ "请考虑删除那个虚拟机或者换个名字"
+ ) # Please consider either deleting that VM or thinking of a new name.
+
+ window.pushButton.setText("确认") # OK
+
+
+def translateVhdExistsCN(window):
+ # The dialog which used to use this translation function is no longer in use.
+ window.label.setText(
+ "抱歉,你要创建的硬盘已经创建"
+ ) # Sorry, but the disk you want to create is already existant.
+
+ window.label_2.setText("你打算覆盖还是保留它?") # Do you want to keep or overwrite it?
+
+ window.pushButton.setText("覆盖") # Overwrite
+ window.pushButton_2.setText("保留") # Keep
+
+
+def translateSettingsPendingCN(window):
+ # The dialog which used to use this translation function is no longer in use.
+ window.label.setText("你没有设置QEMU路径")
+ window.label_2.setText("请在设置里设置路径,然后再试一次")
+
+ window.pushButton.setText("OK") # OK
+
+
+def translateVmTooNewCN(window):
+ window.label.setText(
+ "这个虚拟机需要更新的EmuGUI才能运行. 请更新您的软件!"
+ ) # This VM is made with a version of EmuGUI that is too new. Please use a later version!
+
+ window.pushButton.setText("OK") # OK
+
+
+def translateQemuSysMissingCN(window, arch):
+ window.label.setText(
+ f"抱歉,EmuGUI还没有配置为使用\"qemu-system-{arch}\" \n但是此组件是虚拟机运行所必需的\n请转到设置/QEMU以解决此问题"
+ ) # Sorry but EmuGUI is not configured for using \"qemu-system-{arch}\" yet.\nThis component however is necessary to start this virtual machine.\nPlease go to Settings/QEMU to solve this issue.
+
+ window.pushButton.setText("OK") # OK
+
+
+def translateQemuImgMissingCN(window):
+ window.label.setText(
+ "抱歉,EmuGUI还未配置\"qemu-img\" \n但是此组件是编辑虚拟机硬盘所必需的\n请转到设置/QEMU已解决此问题."
+ ) # Sorry but EmuGUI is not configured for using \"qemu-img\" yet.\nThis component however is necessary to create or edit virtual machines.\nPlease go to Settings/QEMU to solve this issue.
+
+ window.pushButton.setText("确认") # OK
+
+
+def translateEditVMCN(window, vmname):
+ window.setWindowTitle(f"EmuGUI - 编辑虚拟机 {vmname}")
+
+ # Buttons on all tabs
+ window.btn_cancel.setText("取消") # Cancel
+ window.btn_ok.setText("确认") # OK
+
+ # Tab names
+ window.tabWidget.setTabText(0, "一般") # General
+ window.tabWidget.setTabText(1, "机器") # Machine
+ window.tabWidget.setTabText(2, "虚拟硬盘") # Virtual hard disks
+ window.tabWidget.setTabText(3, "外设") # Peripherals
+ window.tabWidget.setTabText(4, "固件") # BIOS
+ window.tabWidget.setTabText(6, "附加组件") # Additional components
+
+ # Translations for General tab
+ window.lbl_name.setText("名称") # Name
+ window.lbl_arch.setText("架构") # Architecture
+
+ # Translations for Machine tab
+ window.lbl_cpu.setText("处理器") # CPU
+ window.lbl_machine.setText("机型") # Machine
+ window.lbl_ram.setText("内存(以MB为单位)") # RAM in MB
+
+ i = 0
+
+ while i < window.cb_cpu.count():
+ if window.cb_cpu.itemText(i) == "Let QEMU decide" or window.cb_cpu.itemText(i) == "QEMU überlassen":
+ window.cb_cpu.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_machine.count():
+ if window.cb_machine.itemText(i) == "Let QEMU decide" or window.cb_machine.itemText(i) == "QEMU überlassen":
+ window.cb_machine.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ # Translations for VHD tab
+ window.lbl_vhdu.setText("VHD 占用情况") # VHD usage
+ window.lbl_vhdp.setText("VHD 路径") # VHD path
+ window.lbl_vhdf.setText("VHD 文件格式") # VHD file format
+ window.lbl_maxsize.setText("最大容量") # Maximum size
+ window.btn_vhdp.setText("浏览") # 浏览
+
+ # Combobox for VHD usage
+ i = 0
+
+ while i < window.cb_vhdu.count():
+ if window.cb_vhdu.itemText(i) == "Create a new virtual hard drive":
+ window.cb_vhdu.setItemText(i, "创建新的虚拟硬盘") # Create a new virtual hard drive
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_vhdu.count():
+ if window.cb_vhdu.itemText(i) == "Add an existing virtual hard drive":
+ window.cb_vhdu.setItemText(i, "添加现有的虚拟硬盘") # Add an existing virtual hard drive
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_vhdu.count():
+ if window.cb_vhdu.itemText(i) == "Don't add a virtual hard drive":
+ window.cb_vhdu.setItemText(i, "不要添加虚拟硬盘") # Don't add a virtual hard drive
+ break
+
+ i += 1
+
+ window.lbl_cdc1.setText("光驱控制器1") # CD controller 1
+ window.lbl_cdc2.setText("光驱控制器2") # CD controller 2
+
+ i = 0
+
+ while i < window.cb_cdc1.count():
+ if window.cb_cdc1.itemText(i) == "Let QEMU decide" or window.cb_cdc1.itemText(i) == "QEMU überlassen":
+ window.cb_cdc1.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ i = 0
+
+ while i < window.cb_cdc2.count():
+ if window.cb_cdc2.itemText(i) == "Let QEMU decide" or window.cb_cdc2.itemText(i) == "QEMU überlassen":
+ window.cb_cdc2.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ window.lbl_hddc.setText("硬盘控制器") # HDD controller
+
+ i = 0
+
+ while i < window.cb_hddc.count():
+ if window.cb_hddc.itemText(i) == "Let QEMU decide" or window.cb_hddc.itemText(i) == "QEMU überlassen":
+ window.cb_hddc.setItemText(i, "让QEMU自己决定") # Let QEMU decide
+ break
+
+ i += 1
+
+ # Translations for Peripherals tab
+ window.lbl_mouse.setText("鼠标类型") # Mouse type
+ window.lbl_kbdtype.setText("键盘类型") # Keyboard type
+
+ # Translations for BIOS tab
+ # Location of external BIOS file (Leave empty to use the default BIOS)
+ window.lbl_biosloc.setText("外部固件文件的路径(留空使用缺省固件)")
+ window.lbl_biosf.setText("外部固件文件") # External BIOS file
+ window.btn_biosf.setText("浏览") # 浏览
+
+ # Translations for Linux tab
+ window.lbl_kernel.setText("Linux 内核") # Linux kernel
+ window.lbl_initrd.setText("Linux 初始化内存盘") # Linux initrd image
+ window.lbl_cmd.setText("Linux cmd 命令") # Linux cmd arguments
+ window.btn_kernel.setText("浏览") # 浏览
+ window.btn_initrd.setText("浏览") # 浏览
+
+ # Translations for Additional components tab
+ window.lbl_vga.setText("显卡") # VGA
+ window.lbl_net.setText("网卡") # Network adapter
+ window.lbl_sound.setText("声卡") # Sound card
+ window.lbl_addargs.setText("附加选项(如果需要的话)") # Additional arguments (if necessary)
+ window.lbl_cpuc.setText("处理器核心数") # CPU cores
+ window.chb_usb.setText("添加USB支持") # Add USB support
+ window.lbl_accel.setText("加速") # Acceleration
+
+
+def translateErrDialogCN(window, errcode):
+ window.setWindowTitle(f"EmuGUI - 错误")
+
+ if errcode.startswith("C"):
+ window.label.setText(
+ "EmuGUI遇到一个严重错误,需要关闭。") # EmuGUI encountered a critical error and needs to be closed.
+
+ elif errcode.startswith("E"):
+ window.label.setText("EmuGUI 遇到了严重错误") # EmuGUI encountered an error.
+
+ elif errcode.startswith("W"):
+ window.label.setText("EmuGUI 对你发出了警告") # EmuGUI has to warn you.
+
+ else:
+ window.label.setText("EmuGUI 有一些事情对你说") # EmuGUI has something to say.
+
+ window.label_2.setText("错误码: " + errcode) # Error Code:
+
+ window.label_3.setText(
+ "如果多次出现此错误,请联系管理员和/或在EmuGUI Discord服务器或其GitHub存储库上寻求帮助。"
+ ) # If this error occurs multiple times, contact your administrator and/or ask for help on the EmuGUI Discord Server or on its GitHub repository.
+
+ window.pushButton.setText("OK") # OK
\ No newline at end of file
diff --git a/ui/Main.ui b/ui/Main.ui
index 7068be8..f25bc3a 100644
--- a/ui/Main.ui
+++ b/ui/Main.ui
@@ -201,6 +201,11 @@
Polski
+ -
+
+ 简体中文
+
+
-
diff --git a/ui/ui_Main.py b/ui/ui_Main.py
index 5128299..0ef41aa 100644
--- a/ui/ui_Main.py
+++ b/ui/ui_Main.py
@@ -95,6 +95,8 @@ def setupUi(self, MainWindow):
self.comboBox_4.addItem("")
self.comboBox_4.addItem("")
self.comboBox_4.addItem("")
+ self.comboBox_4.addItem("")
+
self.comboBox_4.setObjectName(u"comboBox_4")
self.gridLayout_7.addWidget(self.comboBox_4, 0, 1, 1, 1)
@@ -423,6 +425,7 @@ def retranslateUi(self, MainWindow):
self.comboBox_4.setItemText(1, QCoreApplication.translate("MainWindow", u"English", None))
self.comboBox_4.setItemText(2, QCoreApplication.translate("MainWindow", u"Deutsch", None))
self.comboBox_4.setItemText(3, QCoreApplication.translate("MainWindow", u"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430", None))
+ self.comboBox_4.setItemText(4, QCoreApplication.translate("MainWindow", u"简体中文", None))
self.pushButton_15.setText(QCoreApplication.translate("MainWindow", u"Apply", None))
self.label_15.setText(QCoreApplication.translate("MainWindow", u"Language", None))
diff --git a/uiScripts/ui_Main.py b/uiScripts/ui_Main.py
index d8c2e6a..24377b9 100644
--- a/uiScripts/ui_Main.py
+++ b/uiScripts/ui_Main.py
@@ -3,7 +3,7 @@
################################################################################
## Form generated from reading UI file 'Main.ui'
##
-## Created by: Qt User Interface Compiler version 6.6.0
+## Created by: Qt User Interface Compiler version 6.10.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
@@ -114,6 +114,7 @@ def setupUi(self, MainWindow):
self.comboBox_4.addItem("")
self.comboBox_4.addItem("")
self.comboBox_4.addItem("")
+ self.comboBox_4.addItem("")
self.comboBox_4.setObjectName(u"comboBox_4")
self.gridLayout_7.addWidget(self.comboBox_4, 0, 1, 1, 1)
@@ -580,6 +581,7 @@ def retranslateUi(self, MainWindow):
self.comboBox_4.setItemText(10, QCoreApplication.translate("MainWindow", u"Portugu\u00eas", None))
self.comboBox_4.setItemText(11, QCoreApplication.translate("MainWindow", u"Italiano", None))
self.comboBox_4.setItemText(12, QCoreApplication.translate("MainWindow", u"Polski", None))
+ self.comboBox_4.setItemText(13, QCoreApplication.translate("MainWindow", u"\u7b80\u4f53\u4e2d\u6587", None))
self.pushButton_15.setText(QCoreApplication.translate("MainWindow", u"Apply", None))
self.label_15.setText(QCoreApplication.translate("MainWindow", u"Language", None))