From e6ea074a3f8394548732362a533653ac04ac7de3 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Sat, 22 Apr 2023 02:35:47 +0200 Subject: [PATCH] core: Made context menu items translatable --- core/assets/texts/en-US/context_menu.ftl | 7 ++++++ core/src/avm1/globals/context_menu.rs | 6 ++++- .../src/avm2/globals/flash/ui/context_menu.rs | 6 ++++- core/src/context_menu.rs | 23 ++++++++++++------- core/src/player.rs | 2 +- 5 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 core/assets/texts/en-US/context_menu.ftl diff --git a/core/assets/texts/en-US/context_menu.ftl b/core/assets/texts/en-US/context_menu.ftl new file mode 100644 index 000000000..4afc98ca8 --- /dev/null +++ b/core/assets/texts/en-US/context_menu.ftl @@ -0,0 +1,7 @@ +context-menu-play = Play +context-menu-rewind = Rewind +context-menu-forward = Forward +context-menu-back = Back +context-menu-quality-low = Quality: Low +context-menu-quality-medium = Quality: Medium +context-menu-quality-high = Quality: High diff --git a/core/src/avm1/globals/context_menu.rs b/core/src/avm1/globals/context_menu.rs index f422620d0..3c7b377c9 100644 --- a/core/src/avm1/globals/context_menu.rs +++ b/core/src/avm1/globals/context_menu.rs @@ -186,7 +186,11 @@ pub fn make_context_menu_state<'gc>( } } - result.build_builtin_items(builtin_items, activation.context.stage); + result.build_builtin_items( + builtin_items, + activation.context.stage, + activation.context.ui.language(), + ); if let Some(menu) = menu { if let Ok(Value::Object(custom_items)) = menu.get("customItems", activation) { diff --git a/core/src/avm2/globals/flash/ui/context_menu.rs b/core/src/avm2/globals/flash/ui/context_menu.rs index abd31d80b..16e05a113 100644 --- a/core/src/avm2/globals/flash/ui/context_menu.rs +++ b/core/src/avm2/globals/flash/ui/context_menu.rs @@ -68,7 +68,11 @@ pub fn make_context_menu_state<'gc>( } } - result.build_builtin_items(builtin_items, activation.context.stage); + result.build_builtin_items( + builtin_items, + activation.context.stage, + activation.context.ui.language(), + ); if let Some(menu) = menu { if let Ok(Value::Object(custom_items)) = menu.get_public_property("customItems", activation) diff --git a/core/src/context_menu.rs b/core/src/context_menu.rs index 5c0d40ae9..269fb7d90 100644 --- a/core/src/context_menu.rs +++ b/core/src/context_menu.rs @@ -8,6 +8,8 @@ use crate::avm1; use crate::avm2; use crate::display_object::Stage; use crate::display_object::TDisplayObject; +use crate::i18n::text; +use fluent_templates::LanguageIdentifier; use gc_arena::Collect; use ruffle_render::quality::StageQuality; use serde::Serialize; @@ -33,7 +35,12 @@ impl<'gc> ContextMenuState<'gc> { pub fn callback(&self, index: usize) -> &ContextMenuCallback<'gc> { &self.callbacks[index] } - pub fn build_builtin_items(&mut self, item_flags: BuiltInItemFlags, stage: Stage<'gc>) { + pub fn build_builtin_items( + &mut self, + item_flags: BuiltInItemFlags, + stage: Stage<'gc>, + language: &LanguageIdentifier, + ) { let Some(root_mc) = stage.root_clip().and_then(|c| c.as_movie_clip()) else { return; }; @@ -43,7 +50,7 @@ impl<'gc> ContextMenuState<'gc> { ContextMenuItem { enabled: true, separator_before: true, - caption: "Play".to_string(), + caption: text(language, "context-menu-play"), checked: is_playing_root_movie, }, ContextMenuCallback::Play, @@ -55,7 +62,7 @@ impl<'gc> ContextMenuState<'gc> { ContextMenuItem { enabled: !is_first_frame, separator_before: true, - caption: "Rewind".to_string(), + caption: text(language, "context-menu-rewind"), checked: false, }, ContextMenuCallback::Rewind, @@ -67,7 +74,7 @@ impl<'gc> ContextMenuState<'gc> { ContextMenuItem { enabled: true, separator_before: false, - caption: "Forward".to_string(), + caption: text(language, "context-menu-forward"), checked: false, }, ContextMenuCallback::Forward, @@ -76,7 +83,7 @@ impl<'gc> ContextMenuState<'gc> { ContextMenuItem { enabled: !is_first_frame, separator_before: false, - caption: "Back".to_string(), + caption: text(language, "context-menu-back"), checked: false, }, ContextMenuCallback::Back, @@ -89,7 +96,7 @@ impl<'gc> ContextMenuState<'gc> { enabled: stage.quality() != StageQuality::Low, separator_before: true, checked: stage.quality() == StageQuality::Low, - caption: "Quality: Low".to_string(), + caption: text(language, "context-menu-quality-low"), }, ContextMenuCallback::QualityLow, ); @@ -98,7 +105,7 @@ impl<'gc> ContextMenuState<'gc> { enabled: stage.quality() != StageQuality::Medium, separator_before: false, checked: stage.quality() == StageQuality::Medium, - caption: "Quality: Medium".to_string(), + caption: text(language, "context-menu-quality-medium"), }, ContextMenuCallback::QualityMedium, ); @@ -107,7 +114,7 @@ impl<'gc> ContextMenuState<'gc> { enabled: stage.quality() != StageQuality::High, separator_before: false, checked: stage.quality() == StageQuality::High, - caption: "Quality: High".to_string(), + caption: text(language, "context-menu-quality-high"), }, ContextMenuCallback::QualityHigh, ); diff --git a/core/src/player.rs b/core/src/player.rs index 9f41fc1d3..378ee18b6 100644 --- a/core/src/player.rs +++ b/core/src/player.rs @@ -644,7 +644,7 @@ impl Player { // no AVM1 or AVM2 object - so just prepare the builtin items let mut menu = ContextMenuState::new(); let builtin_items = BuiltInItemFlags::for_stage(context.stage); - menu.build_builtin_items(builtin_items, context.stage); + menu.build_builtin_items(builtin_items, context.stage, context.ui.language()); menu };