Skip to content

Commit f1bf6e9

Browse files
committed
i18n fixes
1 parent b4f8b30 commit f1bf6e9

3 files changed

Lines changed: 66 additions & 26 deletions

File tree

src/draw.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,32 @@ pub fn draw_text_centered(text: &str, y_offset: f32, size: u16, color: Color, re
2121
);
2222
}
2323

24+
pub fn draw_text_with_font(text: &str, x: f32, y: f32, size: f32, color: Color, res: &Resources) {
25+
let font = res.font.as_ref();
26+
// Normalize font size - when font doesn't support Cyrillic, fallback fonts
27+
// may render larger. We use font_scale to normalize the rendering.
28+
let font_size = size as u16;
29+
30+
// Check if text contains Cyrillic characters and adjust scale if needed
31+
let has_cyrillic = text.chars().any(|c| matches!(c, '\u{0400}'..='\u{04FF}'));
32+
let font_scale = if has_cyrillic {
33+
// Fallback font for Cyrillic renders larger, scale down to match other languages
34+
// Adjust this value if still not matching (lower = smaller)
35+
0.72
36+
} else {
37+
1.0
38+
};
39+
40+
let params = TextParams {
41+
font,
42+
font_size,
43+
color,
44+
font_scale,
45+
..Default::default()
46+
};
47+
draw_text_ex(text, x, y, params);
48+
}
49+
2450
pub fn draw_background(texture: &Texture2D) {
2551
let screen_w = screen_width();
2652
let screen_h = screen_height();

src/game.rs

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,11 @@ pub fn render_game(game: &Game, resources: &Resources) {
570570
game.ship.shield_max_hp
571571
));
572572
}
573-
draw_text(&status_text, 20.0, 30.0, 30.0, WHITE);
573+
crate::draw::draw_text_with_font(&status_text, 20.0, 30.0, 24.0, WHITE, resources);
574574

575575
let status = format!(
576576
"{} {}/{} {} {}/{} {} {}/{}",
577-
resources.lang.t("kills"),
577+
resources.lang.t("defeated"),
578578
game.mission_kills,
579579
game.current_mission.target_kills,
580580
resources.lang.t("rust"),
@@ -584,7 +584,14 @@ pub fn render_game(game: &Game, resources: &Resources) {
584584
game.mission_rare_metal_collected,
585585
game.current_mission.target_rare_metal
586586
);
587-
draw_text(&status, 20.0, screen_height() - 30.0, 30.0, WHITE);
587+
crate::draw::draw_text_with_font(
588+
&status,
589+
20.0,
590+
screen_height() - 30.0,
591+
24.0,
592+
WHITE,
593+
resources,
594+
);
588595

589596
let inventory = format!(
590597
"{} {} {} | {} {}",
@@ -594,7 +601,14 @@ pub fn render_game(game: &Game, resources: &Resources) {
594601
resources.lang.t("gold"),
595602
game.ship.rare_metal
596603
);
597-
draw_text(&inventory, 20.0, screen_height() - 60.0, 25.0, GRAY);
604+
crate::draw::draw_text_with_font(
605+
&inventory,
606+
20.0,
607+
screen_height() - 60.0,
608+
20.0,
609+
GRAY,
610+
resources,
611+
);
598612
}
599613

600614
pub fn render_menu(game: &Game, res: &Resources) {
@@ -630,10 +644,10 @@ pub fn render_menu(game: &Game, res: &Resources) {
630644
let item_spacing = 60.0;
631645

632646
// Font sizes: Start is bigger, others smaller
633-
let start_font_size = 40;
634-
let start_selected_font_size = 44;
635-
let other_font_size = 20;
636-
let other_selected_font_size = 24;
647+
let start_font_size = 32;
648+
let start_selected_font_size = 36;
649+
let other_font_size = 16;
650+
let other_selected_font_size = 18;
637651

638652
// Start menu item - biggest font
639653
let start_y = base_y + 40.0;
@@ -719,7 +733,7 @@ pub fn render_menu(game: &Game, res: &Resources) {
719733
draw_text_centered(
720734
res.lang.t("menu_instructions"),
721735
base_y + 250.0,
722-
18,
736+
14,
723737
GRAY,
724738
res,
725739
);
@@ -729,14 +743,14 @@ pub fn render_briefing(mission: &Mission, res: &Resources) {
729743
draw_text_centered(
730744
&format!("{} {}", res.lang.t("mission"), mission.level_id),
731745
-100.0,
732-
40,
746+
32,
733747
ORANGE,
734748
res,
735749
);
736-
draw_text_centered(&mission.title, -50.0, 60, WHITE, res);
737-
draw_text_centered(&mission.description, 0.0, 25, GRAY, res);
750+
draw_text_centered(&mission.title, -50.0, 48, WHITE, res);
751+
draw_text_centered(&mission.description, 0.0, 20, GRAY, res);
738752

739-
draw_text_centered(res.lang.t("objectives"), 20.0, 30, GRAY, res);
753+
draw_text_centered(res.lang.t("objectives"), 20.0, 24, GRAY, res);
740754

741755
let mut objectives = vec![format!(
742756
"{} {} {}",
@@ -761,13 +775,13 @@ pub fn render_briefing(mission: &Mission, res: &Resources) {
761775
));
762776
}
763777
let obj_text = objectives.join("\n");
764-
draw_text_centered(&obj_text, 70.0, 30, WHITE, res);
778+
draw_text_centered(&obj_text, 70.0, 24, WHITE, res);
765779

766-
draw_text_centered(res.lang.t("press_space"), 200.0, 30, GREEN, res);
780+
draw_text_centered(res.lang.t("press_space"), 200.0, 24, GREEN, res);
767781
}
768782

769783
pub fn render_mission_success(mission: &Mission, res: &Resources) {
770-
draw_text_centered(res.lang.t("mission_complete"), -50.0, 50, GREEN, res);
784+
draw_text_centered(res.lang.t("mission_complete"), -50.0, 40, GREEN, res);
771785
draw_text_centered(
772786
&format!(
773787
"{} {} {}",
@@ -776,27 +790,27 @@ pub fn render_mission_success(mission: &Mission, res: &Resources) {
776790
res.lang.t("level_cleared_suffix")
777791
),
778792
10.0,
779-
30,
793+
24,
780794
WHITE,
781795
res,
782796
);
783-
draw_text_centered(res.lang.t("next_mission"), 100.0, 30, YELLOW, res);
797+
draw_text_centered(res.lang.t("next_mission"), 100.0, 24, YELLOW, res);
784798
}
785799

786800
pub fn render_game_over(score: u32, res: &Resources) {
787801
let high_score = load_score().high_score;
788-
draw_text_centered(res.lang.t("game_over"), -40.0, 60, RED, res);
802+
draw_text_centered(res.lang.t("game_over"), -40.0, 48, RED, res);
789803
draw_text_centered(
790804
&format!("{} {}", res.lang.t("final_score_prefix"), score),
791805
10.0,
792-
40,
806+
32,
793807
WHITE,
794808
res,
795809
);
796810
draw_text_centered(
797811
&format!("{} {}", res.lang.t("high_score"), high_score),
798812
60.0,
799-
30,
813+
24,
800814
YELLOW,
801815
res,
802816
);
@@ -813,6 +827,6 @@ pub fn render_pause(res: &Resources) {
813827
);
814828

815829
// Draw pause text
816-
draw_text_centered(res.lang.t("paused"), -20.0, 60, YELLOW, res);
817-
draw_text_centered(res.lang.t("press_esc"), 30.0, 30, WHITE, res);
830+
draw_text_centered(res.lang.t("paused"), -20.0, 48, YELLOW, res);
831+
draw_text_centered(res.lang.t("press_esc"), 30.0, 24, WHITE, res);
818832
}

src/localization.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ impl Localization {
108108
en.insert("shield", "SHIELD:");
109109
ru.insert("shield", "ЩИТ:");
110110

111-
en.insert("kills", "Kills:");
112-
ru.insert("kills", "Убийств:");
111+
en.insert("defeated", "Defeated:");
112+
ru.insert("defeated", "Побеждено:");
113113

114114
en.insert("rust", "Rust:");
115115
ru.insert("rust", "Лом:");
@@ -178,7 +178,7 @@ impl Localization {
178178
de.insert("score", "PUNKTE:");
179179
de.insert("hp", "LP:");
180180
de.insert("shield", "SCHILD:");
181-
de.insert("kills", "Kills:");
181+
de.insert("defeated", "Besiegt:");
182182
de.insert("rust", "Rost:");
183183
de.insert("gold", "Gold:");
184184
de.insert("resources", "Ressourcen:");

0 commit comments

Comments
 (0)