From 25676db130a4c622a554e7d4e0fbd5a0f0336c1e Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 25 May 2025 14:49:49 +0200 Subject: [PATCH] Update UI text labels for consistency and internationalization; refactor HUD text handling --- objects/ui/audio_settings.tscn | 8 ++--- objects/ui/credits.tscn | 11 ++----- objects/ui/game_over_screen.tscn | 6 ++-- objects/ui/hud.tscn | 6 ++-- objects/ui/input_settings.tscn | 4 +-- objects/ui/main_menu.tscn | 12 +++---- objects/ui/marketplace.tscn | 2 +- objects/ui/pause_menu.tscn | 10 +++--- objects/ui/settings_menu.tscn | 10 +++--- project.godot | 4 +++ scripts/ui/hud.gd | 4 +-- translations.csv | 55 +++++++++++++++++++++++++++++++ translations.csv.import | 17 ++++++++++ translations.en.translation | Bin 0 -> 1950 bytes translations.ods | Bin 0 -> 23754 bytes translations.pl.translation | Bin 0 -> 2201 bytes 16 files changed, 109 insertions(+), 40 deletions(-) create mode 100644 translations.csv create mode 100644 translations.csv.import create mode 100644 translations.en.translation create mode 100644 translations.ods create mode 100644 translations.pl.translation diff --git a/objects/ui/audio_settings.tscn b/objects/ui/audio_settings.tscn index b1b6226..219ae27 100644 --- a/objects/ui/audio_settings.tscn +++ b/objects/ui/audio_settings.tscn @@ -43,7 +43,7 @@ size_flags_vertical = 4 [node name="Audio" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "audio" +text = "AUDIO" horizontal_alignment = 1 vertical_alignment = 1 uppercase = true @@ -59,7 +59,7 @@ theme_override_constants/separation = 4 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Master volume"] layout_mode = 2 -text = "Master volume" +text = "MASTER_VOLUME" horizontal_alignment = 1 [node name="HSlider" type="HSlider" parent="PanelContainer/MarginContainer/VBoxContainer/Master volume"] @@ -73,7 +73,7 @@ theme_override_constants/separation = 4 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Music volume"] layout_mode = 2 -text = "Music volume" +text = "MUSIC_VOLUME" horizontal_alignment = 1 [node name="HSlider" type="HSlider" parent="PanelContainer/MarginContainer/VBoxContainer/Music volume"] @@ -87,7 +87,7 @@ theme_override_constants/separation = 4 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/SFX volume"] layout_mode = 2 -text = "Sounds volume" +text = "SOUNDS_VOLUME" horizontal_alignment = 1 [node name="HSlider" type="HSlider" parent="PanelContainer/MarginContainer/VBoxContainer/SFX volume"] diff --git a/objects/ui/credits.tscn b/objects/ui/credits.tscn index ece74ea..cc8a709 100644 --- a/objects/ui/credits.tscn +++ b/objects/ui/credits.tscn @@ -38,7 +38,7 @@ theme_override_constants/separation = 32 [node name="Pause" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "CREDITS" +text = "CREDITS_TITLE" horizontal_alignment = 1 vertical_alignment = 1 uppercase = true @@ -46,12 +46,5 @@ uppercase = true [node name="RichTextLabel" type="RichTextLabel" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 -text = "Game was created by Gabriel Kaszewski. - -Main character was drawn by my girlfriend <3 - -I would like to thank all of my friends that encouraged my during development of this game. - -For now this is it, enjoy the game! -" +text = "CREDITS" fit_content = true diff --git a/objects/ui/game_over_screen.tscn b/objects/ui/game_over_screen.tscn index f3de45f..2c751cc 100644 --- a/objects/ui/game_over_screen.tscn +++ b/objects/ui/game_over_screen.tscn @@ -41,7 +41,7 @@ theme_override_constants/separation = 16 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "game over" +text = "GAME_OVER" horizontal_alignment = 1 uppercase = true @@ -51,10 +51,10 @@ layout_mode = 2 [node name="RestartLevelButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "RESTART LEVEL" +text = "RESTART_LEVEL_BUTTON" flat = true [node name="MenuButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "GO TO MENU" +text = "GO_TO_MENU_BUTTON" flat = true diff --git a/objects/ui/hud.tscn b/objects/ui/hud.tscn index 910eb62..fbd7688 100644 --- a/objects/ui/hud.tscn +++ b/objects/ui/hud.tscn @@ -51,7 +51,7 @@ theme_override_constants/separation = 8 [node name="Health Label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] layout_mode = 2 -text = "Health" +text = "HEALTH" label_settings = ExtResource("1_4dsh5") uppercase = true @@ -68,12 +68,12 @@ show_percentage = false [node name="Lives" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] layout_mode = 2 -text = "Lives 3" +text = "LIVES" label_settings = ExtResource("1_4dsh5") uppercase = true [node name="Coins label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"] layout_mode = 2 -text = "Coins 33" +text = "COINS" label_settings = ExtResource("1_4dsh5") uppercase = true diff --git a/objects/ui/input_settings.tscn b/objects/ui/input_settings.tscn index 12a2e11..8c761c6 100644 --- a/objects/ui/input_settings.tscn +++ b/objects/ui/input_settings.tscn @@ -38,7 +38,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "input" +text = "INPUT" horizontal_alignment = 1 vertical_alignment = 1 uppercase = true @@ -72,5 +72,5 @@ layout_mode = 2 [node name="Reset to default Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "RESET TO DEFAULT" +text = "RESET_TO_DEFAULT_BUTTON" flat = true diff --git a/objects/ui/main_menu.tscn b/objects/ui/main_menu.tscn index 81c3f10..3bdf935 100644 --- a/objects/ui/main_menu.tscn +++ b/objects/ui/main_menu.tscn @@ -43,7 +43,7 @@ theme_override_constants/separation = 16 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "MR. BRICK ADVENTURES" +text = "GAME_TITLE" horizontal_alignment = 1 uppercase = true @@ -54,27 +54,27 @@ size_flags_vertical = 3 [node name="ContinueButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "CONTINUE" +text = "CONTINUE_BUTTON" flat = true [node name="NewGameButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "NEW GAME" +text = "NEW_GAME_BUTTON" flat = true [node name="SettingsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "SETTINGS" +text = "SETTINGS_BUTTON" flat = true [node name="CreditsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "CREDITS" +text = "CREDITS_BUTTON" flat = true [node name="QuitButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "QUIT GAME" +text = "QUIT_BUTTON" flat = true [node name="version" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] diff --git a/objects/ui/marketplace.tscn b/objects/ui/marketplace.tscn index 020f834..bc418a6 100644 --- a/objects/ui/marketplace.tscn +++ b/objects/ui/marketplace.tscn @@ -49,7 +49,7 @@ theme_override_constants/separation = 32 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "marketplace" +text = "MARKETPLACE" horizontal_alignment = 1 vertical_alignment = 1 justification_flags = 162 diff --git a/objects/ui/pause_menu.tscn b/objects/ui/pause_menu.tscn index 0343439..d995ee9 100644 --- a/objects/ui/pause_menu.tscn +++ b/objects/ui/pause_menu.tscn @@ -46,7 +46,7 @@ size_flags_vertical = 4 [node name="Pause" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "Pause" +text = "PAUSE" horizontal_alignment = 1 vertical_alignment = 1 uppercase = true @@ -58,20 +58,20 @@ size_flags_vertical = 3 [node name="Resume Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "RESUME" +text = "RESUME_BUTTON" flat = true [node name="Settings Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "SETTINGS" +text = "SETTINGS_BUTTON" flat = true [node name="Exit to menu Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "EXIT TO MENU" +text = "EXIT_TO_MENU_BUTTON" flat = true [node name="Quit game Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "QUIT GAME" +text = "QUIT_BUTTON" flat = true diff --git a/objects/ui/settings_menu.tscn b/objects/ui/settings_menu.tscn index a4289f5..393c240 100644 --- a/objects/ui/settings_menu.tscn +++ b/objects/ui/settings_menu.tscn @@ -42,7 +42,7 @@ theme_override_constants/separation = 16 [node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 theme_override_font_sizes/font_size = 16 -text = "settings" +text = "SETTINGS" horizontal_alignment = 1 vertical_alignment = 1 uppercase = true @@ -53,22 +53,22 @@ size_flags_vertical = 3 [node name="Input Settings Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "INPUT" +text = "INPUT_BUTTON" flat = true [node name="Display Settings Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "DISPLAY" +text = "DISPLAY_BUTTON" flat = true [node name="Audio Settings Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "AUDIO" +text = "AUDIO_BUTTON" flat = true [node name="Gameplay Settings Button" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"] layout_mode = 2 -text = "GAMEPLAY" +text = "GAMEPLAY_BUTTON" flat = true [node name="Spacer2" type="Control" parent="PanelContainer/MarginContainer/VBoxContainer"] diff --git a/project.godot b/project.godot index 6cd1658..225f9fc 100644 --- a/project.godot +++ b/project.godot @@ -155,6 +155,10 @@ switch_movement={ ] } +[internationalization] + +locale/translations=PackedStringArray("res://translations.en.translation", "res://translations.pl.translation") + [layer_names] 2d_physics/layer_1="Terrain" diff --git a/scripts/ui/hud.gd b/scripts/ui/hud.gd index 294934c..61232f0 100644 --- a/scripts/ui/hud.gd +++ b/scripts/ui/hud.gd @@ -33,14 +33,14 @@ func set_coins_label() -> void: return #todo: set internationalized text - coins_label.text = "Coins:" + str(game_manager.get_coins()) + coins_label.text = tr("COINS") + ": " + str(game_manager.get_coins()) func set_lives_label() -> void: if not game_manager: return - lives_label.text = "Lives:" + str(game_manager.get_lives()) + lives_label.text = tr("LIVES") + ": " + str(game_manager.get_lives()) func set_health_progressbar() -> void: diff --git a/translations.csv b/translations.csv new file mode 100644 index 0000000..9d0d3c4 --- /dev/null +++ b/translations.csv @@ -0,0 +1,55 @@ +key,en,pl +GAME_TITLE,Mr. Brick Adventures,Przygody Pana Cegły +CONTINUE_BUTTON,CONTINUE,KONTYNUUJ +NEW_GAME_BUTTON,NEW GAME,NOWA GRA +SETTINGS_BUTTON,SETTINGS,USTAWIENIA +CREDITS_BUTTON,CREDITS,AUTORZY +QUIT_BUTTON,QUIT GAME,WYJDŹ Z GRY +SETTINGS_TITLE,SETTINGS,USTAWIENIA +INPUT_BUTTON,INPUT,KLAWISZE +DISPLAY_BUTTON,DISPLAY,OBRAZ +AUDIO_BUTTON,AUDIO,AUDIO +GAMEPLAY_BUTTON,GAMEPLAY,GRA +INPUT_TITLE,INPUT,KLAWISZE +AUDIO_TITLE,AUDIO,AUDIO +MASTER_VOLUME,MASTER VOLUME,OGÓLNA +MUSIC VOLUME,MUSIC VOLUME,MUZYKA +SOUNDS VOLUME,SOUNDS VOLUME,EFEKTY DŹWIĘKOWE +CREDITS_TITLE,CREDITS,AUTORZY +CREDITS,"Game was created by Gabriel Kaszewski. + +Main character was drawn by my girlfriend <3 + +I would like to thank all of my friends that encouraged my during development of this game. + +For now this is it, enjoy the game! +","Przygody Pana Cegły zostały zrobione przeze mnie, Gabriela Kaszewskiego. + +Główna postać, Pan Cegła został narysowany przez moją dziewczynę, która chciała pozostać anonimowa. + +Z tego miejsca chciałbym podziękować wszystkim moim znajomym I przyjaciołom, którzy wspierali mnie przy tworzeniu tej gry. + +Liczę, że będziesz dobrze się bawić! + +Pozdrawiam." +HEALTH_LABEL,HEALTH,ZDROWIE +LIVES_LABEL,LIVES,ŻYCIA +COINS_LABEL,COINS,MONETY +LEVEL_1_NAME,VILLAGE – 1,WIOSKA – 1 +LEVEL_2_NAME,VILLAGE – 2,WIOSKA – 2 +LEVEL_3_NAME,VILLAGE – 3,WIOSKA – 3 +LEVEL_4_NAME,VILLAGE – 4,WIOSKA – 4 +LEVEL_5_NAME,VILLAGE – 5,WIOSKA – 5 +MARKETPLACE,MARKETPLACE,SKLEP +GAME_OVER,GAME OVER,KONIEC GRY +RESTART_LEVEL_BUTTON,RESTART LEVEL,POTWÓRZ POZIOM +GO_TO_MENU_BUTTON,GO TO MENU,WRÓĆ DO MENU +BRICK_POWER,Brick power,Ceglana siła +EXPLOSIVE_BRICK,Explosive brick,Wybuchowa cegła +FIRE_BRICK,Fire brick,Ognista cegła +ICE_BRICK,Ice brick,Lodowa cegła +MAGNETIC,Magnetic power,Moc magnesu +PAUSE,PAUSE,PAUZA +RESUME_BUTTON,RESUME,WZNÓW +EXIT_TO_MENU_BUTTON,EXIT TO MENU,WYJDŹ DO MENU +RESET_TO_DEFAULT_BUTTON,RESET TO DEFAULT BUTTON,PRZYWRÓĆ DOMYŚLNE USTAWIENIA diff --git a/translations.csv.import b/translations.csv.import new file mode 100644 index 0000000..52b3459 --- /dev/null +++ b/translations.csv.import @@ -0,0 +1,17 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://csnsssxkbmkoy" + +[deps] + +files=["res://translations.en.translation", "res://translations.pl.translation"] + +source_file="res://translations.csv" +dest_files=["res://translations.en.translation", "res://translations.pl.translation"] + +[params] + +compress=true +delimiter=0 diff --git a/translations.en.translation b/translations.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..729d754176dcd7288ad38d0d6fbee362348af1cc GIT binary patch literal 1950 zcma)7eN0%y-)r|7Sm|C^ZE5kfWa7f6 z#zoDN8DhdPBgDlmk{Kggbb?vbVEl+A#u$u~CC=%LZu`UUk1g}z@053!LT2JkemUp& zyXTyH-#IsJKn*l8YuR84dBB~3uO}Vtjy|sM){Jl>6%VJQ$pqxNbsJ1^;i-X!)Bc@8 z`#&}xL3Y5!d-fb-2sxx(Ag5W zd%~$b9qDjqTxW%#oxPEmp0)%!DU~*&iLSY{RK$q(q#-hv1FQlvl^(3CyVaL=tcisC z9%VHYi}jxk5nYoIR0qsr!DKA?i{TepybM;d{A$=Wz&eXlY-^V9g}>F}?XbHopGH8j zk6D)d{qUc)_+iTq!HxjOfs?=(K(VyWWckG31OEiL9gu*}fLwsSy?E-^LaMpcLX_t| zM>R>C0Vsy>RoUds3RoH!LFDu8179xB(uedyA`ZV4ku+-v9MgZ;;{xXAx`>hOL)^5{7bXkN6}9A5b}45PczaNB-)ZA^w0 z_aFHvdfza($UAlZ>#O`0^_TZej6R7tac^f(dXl82$02 zd<2Bv2|?%=rVZzMOCw#>edFHJ@-A@EkFqM?ND@h+4>#kk@Ay51IH6D0Uj6hC;tHS< z#5uNuGfTb!5$B8ikBih0y=U?L8!kI0|3aKNSL6@9-+tvokY$K10!02yY5v0xWyLRh zez5op@P%_<-&%S63Uulp)qtBpeD$s$>OmIv>z?uPv;EM;cZvAl?4y4a<8V9j2|};V zcYL=AT-;mS@7Tp>YBwNA=!17eo4b-5J=_%+l8;x=^#!T6s^bf8xS(DGJDc&GwUcN*sx%3r`hwnORWNaw z>9WNqO3N$1uQyg7Mc+^36Q%a2%4t55=gJ}3tYi+8wQ||5wKBI7;^>D@@v1DOxZSdgOW!{6g5;RT z>gO@%Jodmmww8J1z-F$YT}?dGILQ~{0T$q@CI>Xh%|qPHTs}$jNgnPEvPL5siAg=l zy}H3netly}-gL6vD4)%Vv6iTzOP#dOl!)-qrG`VB%KP&M3QXpggDR)mGy=XA!xUwq b@eFI`EppJUNsU2G^Lg=HZvHj|@X!1&uf@A= literal 0 HcmV?d00001 diff --git a/translations.ods b/translations.ods new file mode 100644 index 0000000000000000000000000000000000000000..f7d1943a52b30439539e9b0f3d6c058249e925d2 GIT binary patch literal 23754 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 literal 0 HcmV?d00001 diff --git a/translations.pl.translation b/translations.pl.translation new file mode 100644 index 0000000000000000000000000000000000000000..b42177b41c56ceaaba5dc45c2bd5688a8f08a6d4 GIT binary patch literal 2201 zcma)8drVtp6#po--U4I8IY$t)iz1ne9WvaAmOs3MTDsESuD7-8b%9;r3Zf{vR=L^GW;@rjwn+xW9`3i2q-9WOR9wfp5*aF~tV}YK)QMtntmBLC$iUlHJFt2?1AcWr6uTOv47^SxV zBN+%P1w>^f(id%)TSJj{DbyN^v?}d#SSH1}zOd9I6C+r9WJQrWWrf@hB$FYNLQuOT zrK>e2wS{D|0ccxadr*#L4cJMEMFZi^l{BS28t9FIk&ryVeSl1*N2{yX+i7cEFmR-s zJbvE`*dtkq`Z3U-&+_A0IR`dm0zL!i0C*H7 zmw(;xBFN2I1T4B2ra*rRoG}2#Ag-0oEo=jcw}+tl7V*_D@GS8h5O4hv)DMGmBj^a4 zKT-ST)b(}jfA5zMw?P~ZDT3Bb_xAbBKyVBY2XBlFD!}oq5wz~lmyaJi2%P5Qz@x8G zy7yTSnR~|d?f>PyGkE?uWr&H70z2LYiBp9*tA2H}BBvj%e`o*2>0$8Wpd#q{zDM8SE_7Ku~)XQ}c}goSqkiWPI;@J!;wvgs$(z-o?t-fUi9V|H-ktwnGlR zpU-#QbF~ln+H;(J_x!D$kWbfzetZvG;J3mRJ=)(H>F8%&QdnXe=hj)v9;`8roOkHF}@cVQ9_GX9_L<`~fx;YWT8*Mzn z8mo>K6K_q#o1GkSctyXRBbLW4c8{Nhl0I8<%+C8PtDQ7gkt&!CrB=;VHmNn}%;~(; zkX1D}^ec)Y1`F$pRGnIAGBV4WRWC;0pVaI-RUKEL1sR>$5U#07>#eDw#0+Pgtj{DS zM=PNmq2(rNxgU99X5MJc)Eh9Qb=}F4DV5Q2<*Hyz=OxE0wP1caFEKM@yQ7@REC33w zBqvAfwk;Xvp_wKY>&%Btj85w=D4!h920m>XG?c1LT9+IT8s?$c=$A~w2txMGs}(BA;p?BJai z58Sei7wjCn^h}(s$tAmTNo_89IG5}ug1y<|!jZCB8Zx8e;yu1Z+%2*$UbOKJ;&UhB z$>-Qco^@E9UIH^1!dX-TsUeB@`r!|0SLCq7w&QF{gzpRol-Me5j&$TWHHV@6mieWE tDvh`}ugDRf=uE_YbW~{z7mV*}SBF3KMzhnx=1e%e4Saj}PTlZN$v=+XD|i3^ literal 0 HcmV?d00001