core: Made context menu items translatable

This commit is contained in:
Nathan Adams 2023-04-22 02:35:47 +02:00
parent 229c301e18
commit e6ea074a3f
5 changed files with 33 additions and 11 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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)

View File

@ -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,
);

View File

@ -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
};