Skip to content

Commit

Permalink
<feature> support set default language at startup
Browse files Browse the repository at this point in the history
  • Loading branch information
anonymousException committed Jul 6, 2024
1 parent 9cb30b2 commit 300ff04
Show file tree
Hide file tree
Showing 41 changed files with 2,275 additions and 1,226 deletions.
1 change: 1 addition & 0 deletions .github/workflows/Nuitak-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ jobs:
- run: copy src\openai_model.txt dist\windows\openai_model.txt
- run: copy src\hook_extract.rpy dist\windows\hook_extract.rpy
- run: copy src\hook_add_change_language_entrance.rpy dist\windows\hook_add_change_language_entrance.rpy
- run: copy src\default_langauge_template.txt dist\windows\default_langauge_template.txt
- run: copy src\rpatool dist\windows\rpatool
- run: copy src\font_style_template.txt dist\windows\font_style_template.txt
- run: copy src\cacert.pem dist\windows\cacert.pem
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/Pyinstaller-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ jobs:
- run: cp src/openai_model.txt src/dist/windows/main/openai_model.txt
- run: cp src/hook_extract.rpy src/dist/windows/main/hook_extract.rpy
- run: cp src/hook_add_change_language_entrance.rpy src/dist/windows/main/hook_add_change_language_entrance.rpy
- run: cp src/default_langauge_template.txt src/dist/windows/main/default_langauge_template.txt
- run: cp src/rpatool src/dist/windows/main/rpatool
- run: cp src/font_style_template.txt src/dist/windows/main/font_style_template.txt
- run: cp -r src/custom_engine src/dist/windows/main
Expand Down
2 changes: 2 additions & 0 deletions src/default_langauge_template.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
init 1000 python:
renpy.game.preferences.language = "{tl_name}"
64 changes: 64 additions & 0 deletions src/default_language.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'default_language.ui'
##
## Created by: Qt User Interface Compiler version 6.6.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QDialog, QLabel,
QPushButton, QSizePolicy, QTextEdit, QWidget)

class Ui_DefaultLanguageDialog(object):
def setupUi(self, DefaultLanguageDialog):
if not DefaultLanguageDialog.objectName():
DefaultLanguageDialog.setObjectName(u"DefaultLanguageDialog")
DefaultLanguageDialog.resize(869, 267)
self.selectFileText = QTextEdit(DefaultLanguageDialog)
self.selectFileText.setObjectName(u"selectFileText")
self.selectFileText.setGeometry(QRect(90, 20, 661, 91))
self.label = QLabel(DefaultLanguageDialog)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(10, 35, 81, 61))
self.label.setWordWrap(True)
self.selectFileBtn = QPushButton(DefaultLanguageDialog)
self.selectFileBtn.setObjectName(u"selectFileBtn")
self.selectFileBtn.setGeometry(QRect(750, 20, 81, 91))
self.selectFileBtn.setText(u"...")
self.setDefaultLanguageCheckBox = QCheckBox(DefaultLanguageDialog)
self.setDefaultLanguageCheckBox.setObjectName(u"setDefaultLanguageCheckBox")
self.setDefaultLanguageCheckBox.setGeometry(QRect(10, 230, 821, 20))
self.label_8 = QLabel(DefaultLanguageDialog)
self.label_8.setObjectName(u"label_8")
self.label_8.setGeometry(QRect(10, 150, 81, 51))
self.label_8.setWordWrap(True)
self.tlNameText = QTextEdit(DefaultLanguageDialog)
self.tlNameText.setObjectName(u"tlNameText")
self.tlNameText.setGeometry(QRect(90, 140, 741, 81))

self.retranslateUi(DefaultLanguageDialog)

QMetaObject.connectSlotsByName(DefaultLanguageDialog)
# setupUi

def retranslateUi(self, DefaultLanguageDialog):
DefaultLanguageDialog.setWindowTitle(QCoreApplication.translate("DefaultLanguageDialog", u"set default langauge at startup", None))
#if QT_CONFIG(tooltip)
self.selectFileText.setToolTip("")
#endif // QT_CONFIG(tooltip)
self.selectFileText.setPlaceholderText(QCoreApplication.translate("DefaultLanguageDialog", u"Input or choose or drag the game you want to set default language at startup.Example:F:/DemoGame.exe", None))
self.label.setText(QCoreApplication.translate("DefaultLanguageDialog", u"file", None))
self.setDefaultLanguageCheckBox.setText(QCoreApplication.translate("DefaultLanguageDialog", u"set default language at startup", None))
self.label_8.setText(QCoreApplication.translate("DefaultLanguageDialog", u"tl name", None))
self.tlNameText.setPlaceholderText(QCoreApplication.translate("DefaultLanguageDialog", u"Input the directory name under game\\tl Example: 'japanese' or 'chinese'", None))
# retranslateUi

106 changes: 106 additions & 0 deletions src/default_language.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DefaultLanguageDialog</class>
<widget class="QDialog" name="DefaultLanguageDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>869</width>
<height>267</height>
</rect>
</property>
<property name="windowTitle">
<string>set default langauge at startup</string>
</property>
<widget class="QTextEdit" name="selectFileText">
<property name="geometry">
<rect>
<x>90</x>
<y>20</y>
<width>661</width>
<height>91</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="placeholderText">
<string>Input or choose or drag the game you want to set default language at startup.Example:F:/DemoGame.exe</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>35</y>
<width>81</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>file</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="selectFileBtn">
<property name="geometry">
<rect>
<x>750</x>
<y>20</y>
<width>81</width>
<height>91</height>
</rect>
</property>
<property name="text">
<string notr="true">...</string>
</property>
</widget>
<widget class="QCheckBox" name="setDefaultLanguageCheckBox">
<property name="geometry">
<rect>
<x>10</x>
<y>230</y>
<width>821</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>set default language at startup</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>10</x>
<y>150</y>
<width>81</width>
<height>51</height>
</rect>
</property>
<property name="text">
<string>tl name</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QTextEdit" name="tlNameText">
<property name="geometry">
<rect>
<x>90</x>
<y>140</y>
<width>741</width>
<height>81</height>
</rect>
</property>
<property name="placeholderText">
<string>Input the directory name under game\tl Example: 'japanese' or 'chinese'</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
106 changes: 106 additions & 0 deletions src/default_language_form.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import io
import os.path
from PySide6.QtCore import QCoreApplication
from PySide6.QtWidgets import QDialog, QFileDialog

from my_log import log_print
from default_language import Ui_DefaultLanguageDialog

default_language_template_path = 'default_langauge_template.txt'
out_default_lanugage_script_name = 'set_default_language_at_startup.rpy'


def set_default_language_at_startup(tl_name, target):
f = io.open(default_language_template_path, 'r', encoding='utf-8')
_data = f.read()
f.close()
_data = _data.replace('{tl_name}', tl_name)
f = io.open(target, 'w', encoding='utf-8')
f.write(_data)
f.close()
log_print(f'set default langauge to {tl_name} success!')


class MyDefaultLanguageForm(QDialog, Ui_DefaultLanguageDialog):
def __init__(self, parent=None):
super(MyDefaultLanguageForm, self).__init__(parent)
self.setupUi(self)
self.setFixedHeight(self.height())
self.setFixedWidth(self.width())
self.selectFileBtn.clicked.connect(self.select_file)
self.selectFileText.textChanged.connect(self.on_text_changed)
self.tlNameText.textChanged.connect(self.on_tl_name_changed)
self.setDefaultLanguageCheckBox.clicked.connect(self.on_default_language_checkbox_clicked)

def on_tl_name_changed(self):
target = self.get_target()
if target is not None and os.path.isfile(target):
f = io.open(target, 'r', encoding='utf-8')
_lines = f.readlines()
f.close()
tl_name = ''
for index, _line in enumerate(_lines):
if 'renpy.game.preferences.language' in _line:
idx = _line.rindex('=')
tl_name = _line[idx + 1:].strip().strip('"')
_lines[index] = _lines[index].replace(tl_name, self.tlNameText.toPlainText())
break
f = io.open(target, 'w', encoding='utf-8')
f.writelines(_lines)
f.close()
self.setDefaultLanguageCheckBox.setChecked(True)
else:
self.setDefaultLanguageCheckBox.setChecked(False)

def on_default_language_checkbox_clicked(self):
tl_name = self.tlNameText.toPlainText()
if self.setDefaultLanguageCheckBox.isChecked():
target = self.get_target()
if target is not None:
set_default_language_at_startup(tl_name, target)
else:
target = self.get_target()
if target is not None:
if os.path.isfile(target):
os.remove(target)
if os.path.isfile(target + 'c'):
os.remove(target + 'c')
log_print('remove set default langauge success!')

def get_target(self):
path = self.selectFileText.toPlainText()
path = path.replace('file:///', '')
if os.path.isfile(path):
if path.endswith('.exe'):
target = os.path.dirname(path)
target = target + '/game'
if os.path.isdir(target):
target = target + '/' + out_default_lanugage_script_name
return target
return None

def on_text_changed(self):
target = self.get_target()
if target is not None and os.path.isfile(target):
f = io.open(target, 'r', encoding='utf-8')
_lines = f.readlines()
f.close()
tl_name = ''
for _line in _lines:
if 'renpy.game.preferences.language' in _line:
idx = _line.rindex('=')
tl_name = _line[idx + 1:].strip().strip('"')
break
self.setDefaultLanguageCheckBox.setChecked(True)
self.tlNameText.setText(tl_name)
else:
self.setDefaultLanguageCheckBox.setChecked(False)

def select_file(self):
file, filetype = QFileDialog.getOpenFileName(self,
QCoreApplication.translate('DefaultLanguageDialog',
'select the game file you want to set default language at startup',
None),
'',
"Game Files (*.exe)")
self.selectFileText.setText(file)
8 changes: 8 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
from extraction_form import MyExtractionForm
from extract_runtime_form import MyExtractionRuntimeForm
from add_change_language_entrance_form import MyAddChangeLanguageEntranceForm
from default_language_form import MyDefaultLanguageForm
from one_key_translate_form import MyOneKeyTranslateForm
from pack_game_form import MyPackGameForm
from renpy_translate import translateThread, translate_threads, engineList, engineDic, language_header, \
Expand Down Expand Up @@ -166,6 +167,7 @@ def __init__(self, parent=None):
self.myExtractionOfficialForm = None
self.myHtmlConverterForm = None
self.myPackGameForm = None
self.myDefaultLanuageForm = None
self.actioncopyright.triggered.connect(lambda: self.show_copyright_form())
self.proxySettings.triggered.connect(lambda: self.show_proxy_settings())
self.engineSettings.triggered.connect(lambda: self.show_engine_settings())
Expand All @@ -180,6 +182,7 @@ def __init__(self, parent=None):
self.actionofficial_extraction.triggered.connect(lambda: self.show_extraction_official_form())
self.actionconvert_txt_to_html.triggered.connect(lambda: self.show_html_converter_form())
self.actionpack_game_files.triggered.connect(lambda: self.show_pack_game_files_form())
self.actiondefault_language_at_startup.triggered.connect(lambda: self.show_default_langauge_form())
self.actionArabic.triggered.connect(lambda: self.to_language('arabic'))
self.actionBengali.triggered.connect(lambda: self.to_language('bengali'))
self.actionChinese.triggered.connect(lambda: self.to_language('chinese'))
Expand Down Expand Up @@ -218,6 +221,11 @@ def __init__(self, parent=None):

_thread.start_new_thread(self.update_log, ())

def show_default_langauge_form(self):
if self.myDefaultLanuageForm is None:
self.myDefaultLanuageForm = MyDefaultLanguageForm(parent=self)
self.myDefaultLanuageForm.exec()

def on_combobox_changed(self):
if os.path.isfile('engine.txt'):
json_file = open('engine.txt', 'r',encoding='utf-8')
Expand Down
9 changes: 7 additions & 2 deletions src/one_key_translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def setupUi(self, OneKeyTranslateDialog):
self.addEntranceCheckBox.setChecked(True)
self.translateCheckBox = QCheckBox(OneKeyTranslateDialog)
self.translateCheckBox.setObjectName(u"translateCheckBox")
self.translateCheckBox.setGeometry(QRect(620, 390, 411, 20))
self.translateCheckBox.setGeometry(QRect(620, 450, 411, 20))
self.translateCheckBox.setChecked(True)
self.filterCheckBox = QCheckBox(OneKeyTranslateDialog)
self.filterCheckBox.setObjectName(u"filterCheckBox")
Expand All @@ -108,7 +108,7 @@ def setupUi(self, OneKeyTranslateDialog):
self.label_14.setAlignment(Qt.AlignCenter)
self.startButton = QPushButton(OneKeyTranslateDialog)
self.startButton.setObjectName(u"startButton")
self.startButton.setGeometry(QRect(620, 420, 401, 331))
self.startButton.setGeometry(QRect(620, 500, 401, 251))
self.officialExtractionCheckBox = QCheckBox(OneKeyTranslateDialog)
self.officialExtractionCheckBox.setObjectName(u"officialExtractionCheckBox")
self.officialExtractionCheckBox.setGeometry(QRect(620, 150, 411, 20))
Expand Down Expand Up @@ -153,6 +153,10 @@ def setupUi(self, OneKeyTranslateDialog):
self.label_3.setObjectName(u"label_3")
self.label_3.setGeometry(QRect(30, 590, 591, 61))
self.label_3.setWordWrap(True)
self.setDefaultLanguageCheckBox = QCheckBox(OneKeyTranslateDialog)
self.setDefaultLanguageCheckBox.setObjectName(u"setDefaultLanguageCheckBox")
self.setDefaultLanguageCheckBox.setGeometry(QRect(620, 390, 821, 20))
self.setDefaultLanguageCheckBox.setChecked(True)

self.retranslateUi(OneKeyTranslateDialog)

Expand Down Expand Up @@ -196,5 +200,6 @@ def retranslateUi(self, OneKeyTranslateDialog):
#endif // QT_CONFIG(tooltip)
self.rtlCheckBox.setText(QCoreApplication.translate("OneKeyTranslateDialog", u"Enable RTL (Right To Left)", None))
self.label_3.setText(QCoreApplication.translate("OneKeyTranslateDialog", u"(Fix reversed font problem for some languages like arabic, urdu)", None))
self.setDefaultLanguageCheckBox.setText(QCoreApplication.translate("OneKeyTranslateDialog", u"set default language at startup", None))
# retranslateUi

Loading

0 comments on commit 300ff04

Please sign in to comment.