From feb5d4b0301df8111b1cc47c859446d41a01a0bc Mon Sep 17 00:00:00 2001 From: Tiger Date: Wed, 1 Apr 2026 09:25:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81=E5=B9=B6=E9=83=A8=E5=88=86=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++-- assets/translation/trans.csv | 28 ++++++++++++++ assets/translation/trans.csv.import | 19 ++++++++++ assets/translation/trans.en.translation | Bin 0 -> 1708 bytes assets/translation/trans.zh.translation | Bin 0 -> 1859 bytes project.godot | 4 ++ scenes/game.tscn | 2 +- scenes/main_menu.tscn | 10 ++--- scenes/settings.tscn | 47 ++++++++++++++++++------ scripts/game/game.gd | 4 +- scripts/settings/settings.gd | 23 ++++++++---- 11 files changed, 115 insertions(+), 31 deletions(-) create mode 100644 assets/translation/trans.csv create mode 100644 assets/translation/trans.csv.import create mode 100644 assets/translation/trans.en.translation create mode 100644 assets/translation/trans.zh.translation diff --git a/README.md b/README.md index e424f1e..7fb94d6 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,9 @@ game/ - assets/ - fonts/ - AlibabaPuHuiTi-3-65-Medium.ttf # 阿里巴巴普惠体 - - pics/ -- scenes + - translation/ + - trans.csv +- scenes/ - main_menu.tscn - game.tscn - settings.tscn @@ -43,7 +44,7 @@ game/ ## 如何运行 -请先运行数据后端,在游戏设置中输入后端 URL(包含端口号和 `http://` 或 `https://` 前缀,或者选择本地已有的数据源,然后创建游戏或加入游戏开始游玩。 +请先运行数据后端,在游戏设置中输入后端 URL(包含端口号和 `http://` 或 `https://` 前缀),或者选择本地已有的数据源,然后创建游戏或加入游戏开始游玩。 ## 最佳实践 @@ -51,7 +52,7 @@ game/ 你的开发应当遵循 Godot 引擎提供的[最佳实践](https://docs.godotengine.org/zh-cn/4.x/tutorials/best_practices/)及[GDScript 编写风格指南](https://docs.godotengine.org/zh-cn/4.x/tutorials/scripting/gdscript/gdscript_styleguide.html)。但下面提到的除外: -除 `autoload` 目录下的单例脚本使用大驼峰式命名,其余脚本均应使用小蛇形式命令。所有节点均应使用大驼峰式命名。 +除 `autoload` 目录下的单例脚本使用大驼峰式命名,其余脚本均应使用小蛇形式命名。所有节点均应使用大驼峰式命名。 除连接了信号或 HTTPRequest、MultiplayerAPI 的函数外,任何函数都不应该以下划线(`_`)开头。 diff --git a/assets/translation/trans.csv b/assets/translation/trans.csv new file mode 100644 index 0000000..7b39374 --- /dev/null +++ b/assets/translation/trans.csv @@ -0,0 +1,28 @@ +keys,en,zh-cn +en,English,English +zh-cn,简体中文,简体中文 +MAINMENU_TITLE,Paper Chemis Community,纸片化学社区版 +MAINMENU_CREATEGAME,Create LAN Game,创建局域网游戏 +MAINMENU_JOINGAME,Join LAN Game,加入局域网游戏 +MAINMENU_QUITGAME,Quit Game,退出游戏 +MAINMENU_SETTINGS,Settings,设置 +SETTINGS_SETSOURCE,Set Data Source,数据源设置 +SETTINGS_IPBEGIN,Auto IP Beginning,自动识别 IP 地址的起始部分 +SETTINGS_NICKNAME,Nickname in Game,局内显示昵称 +SETTINGS_LOADDATA,Load Local Data,加载本地数据 +SETTINGS_SAVESETTINGS,Save Settings,保存设置 +SETTINGS_BACK,Back,返回 +SETTINGS_DOWNLOAD,Download,下载文件 +SETTINGS_LOAD,Load Data,加载数据 +SETTINGS_CHOOSELANG,Choose Language,选择语言 +SETTINGS_TIP_NULL,Tip: None,提示:无 +SETTINGS_TIP_SAVESETTINGS,Tip: Successfully saved settings,提示:保存设置成功 +SETTINGS_TIP_STARTDOWNLOAD,Tip: Have started downloading. do not close the settings page,提示:已开始下载,请勿关闭设置页面 +SETTINGS_TIP_SOURCEERROR,Tip: Download failed. Data source path error,提示:下载失败。数据源路径错误 +SETTINGS_TIP_REQUESTERROR,Tip: Download failed. Failed to create a request,提示:下载失败。创建请求失败 +SETTINGS_TIP_LOADING,Tip: Loading Resources. do not close the settings page,提示:正在加载资源,请勿关闭设置页面 +SETTINGS_TIP_LOADED,Tip: Finish Loading,提示:完成加载 +SETTINGS_TIP_NOLOCALSOURCE,Tip: No local data or no selection,提示:无本地数据或未选择,无法加载 +GAMEUI_URNULL,Roome Running: You are XXX XXXX,啊啊啊啊啊:啊啊啊啊 +GAMEUI_URHOST,Room Running: You are the Host,房间运行中:您是房主 +GAMEUI_URGUEST,Room Running: You are a Guest,房间运行中:您是房客 \ No newline at end of file diff --git a/assets/translation/trans.csv.import b/assets/translation/trans.csv.import new file mode 100644 index 0000000..0ebaf09 --- /dev/null +++ b/assets/translation/trans.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://bkanjeodutw2s" + +[deps] + +files=["res://assets/translation/trans.en.translation", "res://assets/translation/trans.zh.translation"] + +source_file="res://assets/translation/trans.csv" +dest_files=["res://assets/translation/trans.en.translation", "res://assets/translation/trans.zh.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/assets/translation/trans.en.translation b/assets/translation/trans.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..14befcd1b313f8f99838961d0b6ca1dd6195bff9 GIT binary patch literal 1708 zcma)7ZEO=|9Dmr3x^@hv$QaO!8^msr%|-*LV-B{~j?G#}TeSgffxo0ejw3I-l7oPTwEl^_+{~nMB@jmesCYAl9((+O&lRU^Z#$3+v)`3CBOSU z|KIa}d0y|rk+6^OM*wzktN?x~WhuSNKH3#EWX)7%OVKs%N=PxZCd>bdel^^+V@~`Z z4JY_i0t{;EX(LW0RgcT6Wa*L_ry3jT%Feg;7}o>w_mAhb4}tBx6BBQ0Rp5x{ zt{z~=t@z-Hj}l-%!trch+t6Fkw)1?vp)qv{Y&>HKtcAFBYPuB92VNzFtsi>zw`-q* zu@*G3K)<8Ecjg_i7y7@ikMwtP9c$YAR=Z&$eiLkay|T*}-+dSI;=bV=?0R(-#W-Ao zdxWs{yXRxazUTfp7QEBQWl-RGEukuAlKgt@@YH96Q{z{E89GK-hw$|a%vWA-G2dYQ zq&LEd&!DnJ#b9$tY{id6yRK;S){eAd<@E@)tlT|kk)rj?Uo*@i*$gAiX-gN|I>Z*5 zP&5r32n!uyJx)Ol5!NcGj0APLOAO+-N%YH>Od|4LD$ZqVk>fqYufL(G;FkBzc`@G& zheTL#^%jqChmoj~Y7j#@eAZaBq>(ic7V)?<7wbIdT3v!(B^9?vU2LvzyP!9H`TMp? zN3*lSaVs!Tx$Ee(Ln<390=Jcon9t7Q&$}dr+bsh)snMa#!J6Z1%q9162?)2hb-Js6 zK3&cFJe!N>y@F7Ou<+(=#`S=5fn|>!XXrW~7}{0gaK|px3}64GY2>?;PUs0c21{9Z y(iy;ccJ5r&H(L~o#mKAx?^v!IUIpEY2;1&>F(3Hvo?+IS8zr0x``m=#KlKlt_t^sg literal 0 HcmV?d00001 diff --git a/assets/translation/trans.zh.translation b/assets/translation/trans.zh.translation new file mode 100644 index 0000000000000000000000000000000000000000..643e109691dd662b3286505d0fa33f1007bea84d GIT binary patch literal 1859 zcma)7ZD?Cn7(Q;+O@|*aHa{2|CWz3nigf7252QM&f0X*Mf?~K!Z=0~&n|g1mWz%t~ zZFAdXTf`=fTVva;+p>=&?b_H&(lq#|`?n$bW4IswFz4JGg!PwD8KUo-dyl!qO?JqW z_kExDGw(T&j`up+h;!}*d7p!AAm8Z=1$qOA#IE-hK~^Op6bQ;rC?Oj`d$bsT>zc5z z{a^Afl=~s(F@Pef!G6UjdZnOGki4OwSM`aqNFH+gWT96in9(b$s?Z~n`|k_W*&(C<4ah8$uu5Nb#X$USyJ)u#md zLO>F758!D)t;b6(Ew|f&w|kHDT!6G;ESx*8stKI9CN2;8YpMsR7Qo+dK-46z9c?_1 zIQkPV&g1CMfZXNcpLg^Z9r>yw-vIeGpcByTaFQbxN7~)~`#s?Jk2q2Xd8{D^=k)-_ z0k{T4{?`wUW>8u|M{IET9|s=TIRpAu2l6YeH~#<~uLZ&5&VLj;Y(V}Cz#-HfKYj2y zIG+L?fjtmk#?|)yAbCFL+gghI@MatN^|St+ct`kN5IjDTOs_u-#tz^RoEP@|&~1U; zSm*Kej~BXt$0vy3@z?i#@#Il3nt?-bzV+%aJ!@d_zW5Z-XH-6U4dXcf*Nv2X18m-J zb#++wLf~%T5Ik?&#ohCV!Nxa$*!yXFVi6?Y>tgfEeLsWUIG=Uw=9bri=lyU7#F72K zXZPM_zkdd2#;<^%&%@(qgO>*m0*~(#!SC(a=2hPY2;%YAw>I5s0w;e5Jb%~rjiZo8 z@Qx6izm@6?ce>`l`SHFJz`ZH=NCDMP%&b-^eN!G!=h)FKE5sbz3SXdO zX)8BE^^2bNcRh4+j;1v8#E_L=qUR#juhLW>Ay|22m?c-t*#b-E&2w|u(khkMHO7VN1QyYO)wNVy1Z{;#pS|jXu3`(yppI{Tyb;Dhd z=`lJsRrk@Q%XC?T5$z6Z%TX)0L?dN7yilFU*h5rj^3~L-dX61RXXmZOGrwtr^<6CG z=*m!a{97xRyJNJyd1%7s2kjE|P?kAOC)4&yto#tH_paul*=X%&;U- void: func init() -> void: if multiplayer.is_server(): - $IsServerLabel.text = "房间运行中:您是房主" + $IsServerLabel.text = "GAMEUI_URHOST" else: - $IsServerLabel.text = "房间运行中:您是房客" + $IsServerLabel.text = "GAMEUI_URGUEST" var addresses: PackedStringArray = IP.get_local_addresses() var ipaddress: String = "" diff --git a/scripts/settings/settings.gd b/scripts/settings/settings.gd index c3fcd5d..bf39004 100644 --- a/scripts/settings/settings.gd +++ b/scripts/settings/settings.gd @@ -9,6 +9,12 @@ func init_text() -> void: $IPBeginSetting/LineEdit.text = GameManager.ip_begin $UsernameSetting/LineEdit.text = GameManager.username $LoadSource/ChooseSource.select(GameManager.source) + var language = "automatic" + if language == "automatic": + var preferred_language = OS.get_locale_language() + TranslationServer.set_locale(preferred_language) + else: + TranslationServer.set_locale(language) func init_sources() -> void: DownloadManager.get_sources() @@ -20,7 +26,8 @@ func _on_save_button_pressed() -> void: GameManager.ip_begin = $IPBeginSetting/LineEdit.text GameManager.username = $UsernameSetting/LineEdit.text GameManager.source = $LoadSource/ChooseSource.get_selected() - $Tips.text = "提示:保存设置成功" + TranslationServer.set_locale($ChooseLanguage/ChooseLanguage.text) + $Tips.text = "SETTINGS_TIP_SAVESETTINGS" func _on_cancel_button_pressed() -> void: @@ -28,24 +35,24 @@ func _on_cancel_button_pressed() -> void: func _on_download_button_pressed() -> void: - $Tips.text = "提示:已开始下载,请勿关闭设置页面" + $Tips.text = "SETTINGS_TIP_STARTDOWNLOAD" var result: int = await DownloadManager.download_from_origin() if result == 1: - $Tips.text = "提示:下载失败。数据源路径错误" + $Tips.text = "SETTINGS_TIP_SOURCEERROR" return elif result == 2: - $Tips.text = "提示:下载失败。创建请求失败" + $Tips.text = "SETTINGS_TIP_REQUESTERROR" return - $Tips.text = "提示:正在加载资源,请勿关闭设置页面" + $Tips.text = "SETTINGS_TIP_LOADING" DownloadManager.load_resource() - $Tips.text = "提示:完成加载" + $Tips.text = "SETTINGS_TIP_LOADED" func _on_load_button_pressed() -> void: if GameManager.sources.size() == 0 or GameManager.source == -1: - $Tips.text = "提示:无本地数据或未选择,无法加载" + $Tips.text = "SETTINGS_TIP_NOLOCALSOURCE" return; DownloadManager.uuid = GameManager.sources[$LoadSource/ChooseSource.text] DownloadManager.load_resource() - $Tips.text = "提示:完成加载" + $Tips.text = "SETTINGS_TIP_LOADED"