forked from 1b-agent/opencadstudio-upstream
refactor(i18n): group Fluent attributes
This commit is contained in:
1 parent
f3c2e061e0
commit
2f60dd0f59
26 files changed
+45139
-44415
No files matched your search
@@ -1384,7 +1384,7 @@ pub(super) fn on_open_file(&mut self) -> Task<Message> {
|
||||
&& destination_is_current
|
||||
{
|
||||
self.command_line.push_error_once(
|
||||
crate::tr!("recovery-save-new-file-required").as_ref(),
|
||||
crate::tr!("recovery", "save-new-file-required").as_ref(),
|
||||
);
|
||||
self.restore_failed_save_continuation(continuation, i);
|
||||
self.active_tab = i;
|
||||
|
||||
@@ -3995,23 +3995,23 @@ impl OpenCADStudio {
|
||||
}
|
||||
Text::EmptyOrUnsupported => {
|
||||
self.command_line.push_error(
|
||||
crate::tr!("clipboard-no-supported-content").as_ref(),
|
||||
crate::tr!("clipboard", "no-supported-content").as_ref(),
|
||||
);
|
||||
Task::none()
|
||||
}
|
||||
Text::Unavailable => {
|
||||
self.command_line
|
||||
.push_error(crate::tr!("clipboard-unavailable").as_ref());
|
||||
.push_error(crate::tr!("clipboard", "unavailable").as_ref());
|
||||
Task::none()
|
||||
}
|
||||
Text::Occupied => {
|
||||
self.command_line
|
||||
.push_error(crate::tr!("clipboard-occupied").as_ref());
|
||||
.push_error(crate::tr!("clipboard", "occupied").as_ref());
|
||||
Task::none()
|
||||
}
|
||||
Text::ConversionFailed => {
|
||||
self.command_line
|
||||
.push_error(crate::tr!("clipboard-conversion-failed").as_ref());
|
||||
.push_error(crate::tr!("clipboard", "conversion-failed").as_ref());
|
||||
Task::none()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,7 +449,7 @@ pub(super) fn viewport_controls<'a>(
|
||||
crate::ui::icons::SPLIT_V,
|
||||
false,
|
||||
Message::SplitModelViewport(false),
|
||||
crate::tr!("viewport-split-vertical"),
|
||||
crate::tr!("viewport", "split-vertical"),
|
||||
"VPORTS 2V",
|
||||
))
|
||||
.push(sep())
|
||||
@@ -457,7 +457,7 @@ pub(super) fn viewport_controls<'a>(
|
||||
crate::ui::icons::SPLIT_H,
|
||||
false,
|
||||
Message::SplitModelViewport(true),
|
||||
crate::tr!("viewport-split-horizontal"),
|
||||
crate::tr!("viewport", "split-horizontal"),
|
||||
"VPORTS 2H",
|
||||
));
|
||||
// Drag handle + close: only meaningful with more than one model tile.
|
||||
@@ -478,7 +478,7 @@ pub(super) fn viewport_controls<'a>(
|
||||
)
|
||||
.interaction(iced::mouse::Interaction::Grab)
|
||||
.on_press(Message::PaneMoveStart);
|
||||
let drag = viewport_tooltip(drag, crate::tr!("viewport-move"), "VPORTS");
|
||||
let drag = viewport_tooltip(drag, crate::tr!("viewport", "move"), "VPORTS");
|
||||
bar = bar
|
||||
.push(sep())
|
||||
.push(drag)
|
||||
@@ -486,7 +486,7 @@ pub(super) fn viewport_controls<'a>(
|
||||
.push(danger_btn(
|
||||
crate::ui::icons::CLOSE,
|
||||
Message::CloseModelViewport,
|
||||
crate::tr!("viewport-close"),
|
||||
crate::tr!("viewport", "close"),
|
||||
"VPORTS SINGLE",
|
||||
));
|
||||
}
|
||||
|
||||
+27
-27
@@ -2624,7 +2624,7 @@ fn start_page_content<'a>(
|
||||
button(
|
||||
row![
|
||||
crate::ui::icons::themed_danger_text(crate::ui::icons::HEART, 14.0),
|
||||
text(crate::tr!("start-donate")).size(14),
|
||||
text(crate::tr!("start", "donate")).size(14),
|
||||
]
|
||||
.spacing(5)
|
||||
.align_y(iced::Center),
|
||||
@@ -2638,8 +2638,8 @@ fn start_page_content<'a>(
|
||||
};
|
||||
|
||||
let primary_row = WrapFlow::new(vec![
|
||||
outline_btn(crate::tr!("start-new-drawing"), Message::TabNew).into(),
|
||||
outline_btn(crate::tr!("start-open-file"), Message::OpenFile).into(),
|
||||
outline_btn(crate::tr!("start", "new-drawing"), Message::TabNew).into(),
|
||||
outline_btn(crate::tr!("start", "open-file"), Message::OpenFile).into(),
|
||||
donate_btn.into(),
|
||||
])
|
||||
.spacing_x(12.0)
|
||||
@@ -2649,16 +2649,16 @@ fn start_page_content<'a>(
|
||||
#[cfg_attr(target_arch = "wasm32", allow(unused_mut))]
|
||||
let mut secondary_items: Vec<Element<'a, Message>> = vec![
|
||||
outline_btn(
|
||||
crate::tr!("start-send-feedback"),
|
||||
crate::tr!("start", "send-feedback"),
|
||||
Message::RibbonToolClick {
|
||||
tool_id: "REPORT".to_string(),
|
||||
event: crate::modules::ModuleEvent::Command("REPORT".to_string()),
|
||||
},
|
||||
)
|
||||
.into(),
|
||||
outline_btn(crate::tr!("action-options"), Message::OptionsOpen).into(),
|
||||
outline_btn(crate::tr!("action", "options"), Message::OptionsOpen).into(),
|
||||
];
|
||||
secondary_items.push(outline_btn(crate::tr!("action-plugins"), Message::PluginManagerOpen).into());
|
||||
secondary_items.push(outline_btn(crate::tr!("action", "plugins"), Message::PluginManagerOpen).into());
|
||||
// The web build is already in the browser, so only the desktop offers a
|
||||
// link to the web version.
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
@@ -2681,7 +2681,7 @@ fn start_page_content<'a>(
|
||||
.report_natural_width(action_width_out.clone());
|
||||
|
||||
let sponsors = column![
|
||||
text(crate::tr!("start-sponsors")).size(15),
|
||||
text(crate::tr!("start", "sponsors")).size(15),
|
||||
mouse_area(
|
||||
container(
|
||||
iced::widget::svg(iced::widget::svg::Handle::from_memory(include_bytes!(
|
||||
@@ -2783,7 +2783,7 @@ fn start_page_content<'a>(
|
||||
// whole thumbnail remains visible when that width changes.
|
||||
let thumb_h =
|
||||
(panel_w - VIDEO_PANEL_PADDING * 2.0 - VIDEO_SCROLL_GUTTER) * 9.0 / 16.0;
|
||||
let mut list = column![text(crate::tr!("start-tutorials")).size(15)]
|
||||
let mut list = column![text(crate::tr!("start", "tutorials")).size(15)]
|
||||
.spacing(10)
|
||||
.width(Fill)
|
||||
// Keep the scrollbar off the thumbnails.
|
||||
@@ -2823,14 +2823,14 @@ fn start_page_content<'a>(
|
||||
}
|
||||
if videos.is_empty() {
|
||||
let note = if videos_loading {
|
||||
crate::tr!("start-loading-videos")
|
||||
crate::tr!("start", "loading-videos")
|
||||
} else {
|
||||
crate::tr!("start-videos-online")
|
||||
crate::tr!("start", "videos-online")
|
||||
};
|
||||
list = list.push(text(note).size(12).style(start_muted_style));
|
||||
}
|
||||
let playlist_btn = mouse_area(
|
||||
container(text(crate::tr!("start-open-playlist")).size(12))
|
||||
container(text(crate::tr!("start", "open-playlist")).size(12))
|
||||
.padding([6, 10])
|
||||
.width(Fill)
|
||||
.center_x(Fill)
|
||||
@@ -2883,7 +2883,7 @@ fn start_page_content<'a>(
|
||||
// web builds read the CI-generated snapshot. Both sources mark pinned
|
||||
// discussions and sort them before the rest of the list.
|
||||
let discussions_panel: Element<'a, Message> = {
|
||||
let mut list = column![text(crate::tr!("start-discussions")).size(15)]
|
||||
let mut list = column![text(crate::tr!("start", "discussions")).size(15)]
|
||||
.spacing(8)
|
||||
.width(Fill);
|
||||
for discussion in discussions {
|
||||
@@ -2896,7 +2896,7 @@ fn start_page_content<'a>(
|
||||
.align_y(iced::Center);
|
||||
if discussion.pinned {
|
||||
meta = meta.push(
|
||||
text(crate::tr!("start-pinned"))
|
||||
text(crate::tr!("start", "pinned"))
|
||||
.size(10)
|
||||
.style(start_primary_style),
|
||||
);
|
||||
@@ -2939,14 +2939,14 @@ fn start_page_content<'a>(
|
||||
}
|
||||
if discussions.is_empty() {
|
||||
let note = if discussions_loading {
|
||||
crate::tr!("start-loading-discussions")
|
||||
crate::tr!("start", "loading-discussions")
|
||||
} else {
|
||||
crate::tr!("start-discussions-online")
|
||||
crate::tr!("start", "discussions-online")
|
||||
};
|
||||
list = list.push(text(note).size(12).style(start_muted_style));
|
||||
}
|
||||
let open_btn = mouse_area(
|
||||
container(text(crate::tr!("start-open-discussions")).size(12))
|
||||
container(text(crate::tr!("start", "open-discussions")).size(12))
|
||||
.padding([6, 10])
|
||||
.width(Fill)
|
||||
.center_x(Fill)
|
||||
@@ -3003,7 +3003,7 @@ fn start_page_content<'a>(
|
||||
// shows, so the rail always invites support.
|
||||
let supporters: Element<'a, Message> = {
|
||||
let mut list = column![
|
||||
text(crate::tr!("start-supporters")).size(15),
|
||||
text(crate::tr!("start", "supporters")).size(15),
|
||||
Space::new().height(iced::Length::Fixed(12.0)),
|
||||
]
|
||||
.spacing(6)
|
||||
@@ -3028,7 +3028,7 @@ fn start_page_content<'a>(
|
||||
container(
|
||||
iced::widget::row![
|
||||
crate::ui::icons::themed_danger_text(crate::ui::icons::HEART, 13.0),
|
||||
text(crate::tr!("start-support-on-patreon")).size(12),
|
||||
text(crate::tr!("start", "support-on-patreon")).size(12),
|
||||
]
|
||||
.spacing(6)
|
||||
.align_y(iced::Center),
|
||||
@@ -3146,11 +3146,11 @@ fn start_page_content<'a>(
|
||||
})
|
||||
};
|
||||
let tab_bar = Row::with_children(vec![
|
||||
tab_btn(crate::tr!("start-recent-files"), super::StartSection::Recent).into(),
|
||||
tab_btn(crate::tr!("start-videos"), super::StartSection::Videos).into(),
|
||||
tab_btn(crate::tr!("start-welcome"), super::StartSection::Welcome).into(),
|
||||
tab_btn(crate::tr!("start-discussions"), super::StartSection::Discussions).into(),
|
||||
tab_btn(crate::tr!("start-supporters"), super::StartSection::Supporters).into(),
|
||||
tab_btn(crate::tr!("start", "recent-files"), super::StartSection::Recent).into(),
|
||||
tab_btn(crate::tr!("start", "videos"), super::StartSection::Videos).into(),
|
||||
tab_btn(crate::tr!("start", "welcome"), super::StartSection::Welcome).into(),
|
||||
tab_btn(crate::tr!("start", "discussions"), super::StartSection::Discussions).into(),
|
||||
tab_btn(crate::tr!("start", "supporters"), super::StartSection::Supporters).into(),
|
||||
])
|
||||
.spacing(6.0)
|
||||
.align_y(iced::Center)
|
||||
@@ -3226,11 +3226,11 @@ pub(super) fn recent_files_panel<'a>(
|
||||
) -> Element<'a, Message> {
|
||||
// Title mirrors the Supporters rail: size 15 in the bright text colour,
|
||||
// followed by a 12px gap before the content.
|
||||
let title = text(crate::tr!("start-recent-documents")).size(15);
|
||||
let title = text(crate::tr!("start", "recent-documents")).size(15);
|
||||
|
||||
let body: Element<'a, Message> = if recents.is_empty() {
|
||||
container(
|
||||
text(crate::tr!("start-no-recent-files"))
|
||||
text(crate::tr!("start", "no-recent-files"))
|
||||
.size(12)
|
||||
.style(start_muted_style)
|
||||
)
|
||||
@@ -3258,7 +3258,7 @@ pub(super) fn recent_files_panel<'a>(
|
||||
// directory line.
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
let dir = if dir.is_empty() {
|
||||
crate::tr!("start-browser-storage")
|
||||
crate::tr!("start", "browser-storage")
|
||||
} else {
|
||||
dir
|
||||
};
|
||||
@@ -3369,7 +3369,7 @@ pub(super) fn recent_files_panel<'a>(
|
||||
.padding([2, 6])
|
||||
.width(iced::Length::Fixed(46.0));
|
||||
let limit_row = row![
|
||||
text(crate::tr!("start-keep-recent-files")).size(11).style(start_muted_style).width(Fill),
|
||||
text(crate::tr!("start", "keep-recent-files")).size(11).style(start_muted_style).width(Fill),
|
||||
button(crate::ui::icons::themed(crate::ui::icons::MINUS, 11.0))
|
||||
.on_press(Message::SetRecentLimit(shown.saturating_sub(STEP)))
|
||||
.padding([3, 6])
|
||||
|
||||
+32
-32
@@ -10,43 +10,43 @@ impl OpenCADStudio {
|
||||
pub(super) fn modal_title(&self) -> String {
|
||||
use super::super::ModalKind as K;
|
||||
match self.active_modal {
|
||||
Some(K::About) => crate::tr!("modal-about"),
|
||||
Some(K::Shortcuts) => crate::tr!("modal-keyboard-shortcuts"),
|
||||
Some(K::Aliases) => crate::tr!("modal-command-aliases"),
|
||||
Some(K::Options) => crate::tr!("action-options"),
|
||||
Some(K::FindReplace) => crate::tr!("modal-find-replace"),
|
||||
Some(K::PluginManager) => crate::tr!("modal-plugin-manager"),
|
||||
Some(K::UpdateNotice) => crate::tr!("modal-update-available"),
|
||||
Some(K::Layers) => crate::tr!("modal-layer-manager"),
|
||||
Some(K::LayerStateManager) => crate::tr!("modal-layer-state-manager"),
|
||||
Some(K::About) => crate::tr!("modal", "about"),
|
||||
Some(K::Shortcuts) => crate::tr!("modal", "keyboard-shortcuts"),
|
||||
Some(K::Aliases) => crate::tr!("modal", "command-aliases"),
|
||||
Some(K::Options) => crate::tr!("action", "options"),
|
||||
Some(K::FindReplace) => crate::tr!("modal", "find-replace"),
|
||||
Some(K::PluginManager) => crate::tr!("modal", "plugin-manager"),
|
||||
Some(K::UpdateNotice) => crate::tr!("modal", "update-available"),
|
||||
Some(K::Layers) => crate::tr!("modal", "layer-manager"),
|
||||
Some(K::LayerStateManager) => crate::tr!("modal", "layer-state-manager"),
|
||||
Some(K::LayerTranslator) => crate::t!("Layer Translator").into_owned(),
|
||||
Some(K::DrawingUnits) => crate::t!("Drawing Units").into_owned(),
|
||||
Some(K::DraftingSettings) => crate::t!("Drafting Settings").into_owned(),
|
||||
Some(K::LayerStateEditor) => crate::tr!("modal-edit-layer-state"),
|
||||
Some(K::Plot) => crate::tr!("modal-plot"),
|
||||
Some(K::LayerStateEditor) => crate::tr!("modal", "edit-layer-state"),
|
||||
Some(K::Plot) => crate::tr!("modal", "plot"),
|
||||
Some(K::PrintAll) => t!("Print All").into_owned(),
|
||||
Some(K::LayoutManager) => crate::tr!("modal-layout-manager"),
|
||||
Some(K::ScaleManager) => crate::tr!("modal-scale-manager"),
|
||||
Some(K::AnnoObjectScale) => crate::tr!("modal-annotation-object-scale"),
|
||||
Some(K::Plotstyle) => crate::tr!("modal-plot-style-editor"),
|
||||
Some(K::TextStyle) => crate::tr!("modal-text-style-manager"),
|
||||
Some(K::MlStyle) => crate::tr!("modal-multiline-style-manager"),
|
||||
Some(K::TableStyle) => crate::tr!("modal-table-style-manager"),
|
||||
Some(K::MLeaderStyle) => crate::tr!("modal-multileader-style-manager"),
|
||||
Some(K::DimStyle) => crate::tr!("modal-dimension-style-manager"),
|
||||
Some(K::AssocPrompt) => crate::tr!("modal-default-application"),
|
||||
Some(K::AecDropWarning) => crate::tr!("modal-save-warning"),
|
||||
Some(K::LayoutManager) => crate::tr!("modal", "layout-manager"),
|
||||
Some(K::ScaleManager) => crate::tr!("modal", "scale-manager"),
|
||||
Some(K::AnnoObjectScale) => crate::tr!("modal", "annotation-object-scale"),
|
||||
Some(K::Plotstyle) => crate::tr!("modal", "plot-style-editor"),
|
||||
Some(K::TextStyle) => crate::tr!("modal", "text-style-manager"),
|
||||
Some(K::MlStyle) => crate::tr!("modal", "multiline-style-manager"),
|
||||
Some(K::TableStyle) => crate::tr!("modal", "table-style-manager"),
|
||||
Some(K::MLeaderStyle) => crate::tr!("modal", "multileader-style-manager"),
|
||||
Some(K::DimStyle) => crate::tr!("modal", "dimension-style-manager"),
|
||||
Some(K::AssocPrompt) => crate::tr!("modal", "default-application"),
|
||||
Some(K::AecDropWarning) => crate::tr!("modal", "save-warning"),
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
Some(K::FileInUse) => crate::tr!("modal-unable-save"),
|
||||
Some(K::FileInUse) => crate::tr!("modal", "unable-save"),
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
Some(K::ExternalChange) => crate::tr!("modal-drawing-changed"),
|
||||
Some(K::LayerDeleteWarning) => crate::tr!("modal-delete-layer"),
|
||||
Some(K::Unsaved) => crate::tr!("modal-unsaved-changes"),
|
||||
Some(K::PointStyle) => crate::tr!("modal-point-style"),
|
||||
Some(K::AttributeEditor) => crate::tr!("modal-attribute-editor"),
|
||||
Some(K::SaveDialog) => crate::tr!("modal-save-drawing-as"),
|
||||
Some(K::Recovery) => crate::tr!("modal-recovery-report"),
|
||||
Some(K::RecoveryPrompt) => crate::tr!("modal-recovery-prompt"),
|
||||
Some(K::ExternalChange) => crate::tr!("modal", "drawing-changed"),
|
||||
Some(K::LayerDeleteWarning) => crate::tr!("modal", "delete-layer"),
|
||||
Some(K::Unsaved) => crate::tr!("modal", "unsaved-changes"),
|
||||
Some(K::PointStyle) => crate::tr!("modal", "point-style"),
|
||||
Some(K::AttributeEditor) => crate::tr!("modal", "attribute-editor"),
|
||||
Some(K::SaveDialog) => crate::tr!("modal", "save-drawing-as"),
|
||||
Some(K::Recovery) => crate::tr!("modal", "recovery-report"),
|
||||
Some(K::RecoveryPrompt) => crate::tr!("modal", "recovery-prompt"),
|
||||
None => String::new(),
|
||||
}
|
||||
}
|
||||
@@ -1528,7 +1528,7 @@ fn unsaved_changes_dialog_window(
|
||||
column![
|
||||
text(name.to_owned()).size(14),
|
||||
iced::widget::Space::new().height(4),
|
||||
text(crate::tr!("modal-unsaved-save-prompt"))
|
||||
text(crate::tr!("modal", "unsaved-save-prompt"))
|
||||
.size(12)
|
||||
.style(dialog_muted_text_style),
|
||||
iced::widget::Space::new().height(20),
|
||||
|
||||
Reference in new issue
Block a user