refactor: make UI localization extensible and integrate upstream
This commit is contained in:
commit
6d4c031090
199 files changed
+31595
-2151
No files matched your search
@@ -81,6 +81,8 @@ fn swap_in(app: &mut SolveApp, slot: DocSlot) -> DocSlot {
|
||||
app.cam_anim = None;
|
||||
app.preview = crate::preview::PreviewState::default();
|
||||
app.viewport.hover = None;
|
||||
app.menu.props = None;
|
||||
crate::sketch_attachment_ui::clear(app);
|
||||
let out_rev = app.session.revision;
|
||||
let out = DocSlot {
|
||||
session: std::mem::replace(&mut app.session, slot.session),
|
||||
@@ -140,6 +142,8 @@ pub fn adopt(app: &mut SolveApp, session: Session) {
|
||||
let rev = app.session.revision;
|
||||
crate::dialogs::cancel(app);
|
||||
app.tool = None;
|
||||
app.menu.props = None;
|
||||
crate::sketch_attachment_ui::clear(app);
|
||||
app.session = session;
|
||||
app.session.invalidate_view(rev);
|
||||
app.cam = Camera::default();
|
||||
@@ -307,7 +311,7 @@ pub fn tabs(app: &mut SolveApp, ui: &mut egui::Ui, r: Rect, x0: f32, x1: f32) {
|
||||
t.app_bar
|
||||
},
|
||||
);
|
||||
let home_text = app.tr("Home");
|
||||
let home_text = app.tr("ui.home");
|
||||
ui.painter().text(
|
||||
home.center(),
|
||||
Align2::CENTER_CENTER,
|
||||
@@ -349,7 +353,7 @@ pub fn tabs(app: &mut SolveApp, ui: &mut egui::Ui, r: Rect, x0: f32, x1: f32) {
|
||||
};
|
||||
ui.painter().rect_filled(tr, egui::CornerRadius { nw: 5, ne: 5, sw: 0, se: 0 }, fill);
|
||||
let ink = if active { t.text } else { t.app_bar_text };
|
||||
let name_display = if name == "Untitled" { app.tr("Untitled") } else { name };
|
||||
let name_display = if name == "Untitled" { app.tr("ui.untitled") } else { name };
|
||||
let label = format!("{name_display}{}", if *dirty { " •" } else { "" });
|
||||
let g = ui.painter().layout_no_wrap(label, FontId::proportional(13.0), ink);
|
||||
let text_w = (tr.width() - 30.0).max(10.0);
|
||||
@@ -452,36 +456,29 @@ pub enum Answer {
|
||||
|
||||
/// The "save changes?" prompt for a tab being closed, or for each unsaved design when quitting.
|
||||
pub fn prompt(app: &mut SolveApp, ctx: &egui::Context) {
|
||||
let _language = crate::i18n::scope(&app.preferences.language);
|
||||
quit_step(app);
|
||||
let Some(i) = app.docs.closing else { return };
|
||||
let name = tabs_info(app).get(i).map(|x| x.0.clone()).unwrap_or_default();
|
||||
let name_display = if name == "Untitled" { crate::i18n::tr("Untitled") } else { &name };
|
||||
let name_display = if name == "Untitled" { crate::i18n::tr("ui.untitled") } else { &name };
|
||||
let mut answer: Option<Answer> = None;
|
||||
let title = if crate::i18n::current_lang() == "ja" {
|
||||
format!("{name_display} への変更を保存しますか?")
|
||||
} else {
|
||||
format!("Save changes to {name}?")
|
||||
};
|
||||
let title = crate::i18n::format("document.save_changes", &[("name", name_display)]);
|
||||
crate::frame::window(ctx, title, crate::frame::Width::Normal)
|
||||
.id(egui::Id::new("sc_close_prompt"))
|
||||
.collapsible(false)
|
||||
.resizable(false)
|
||||
.anchor(Align2::CENTER_CENTER, vec2(0.0, 0.0))
|
||||
.show(ctx, |ui| {
|
||||
if crate::i18n::current_lang() == "ja" {
|
||||
ui.label(format!("{name_display} には保存されていない変更があります。保存しない場合、変更内容は失われます。"));
|
||||
} else {
|
||||
ui.label(format!("{name} has unsaved changes. If you don't save, they are lost."));
|
||||
}
|
||||
ui.label(crate::i18n::format("document.unsaved_changes", &[("name", name_display)]));
|
||||
ui.add_space(8.0);
|
||||
ui.horizontal(|ui| {
|
||||
if ui.button(crate::i18n::tr("Save")).clicked() {
|
||||
if ui.button(crate::i18n::tr("ui.save")).clicked() {
|
||||
answer = Some(Answer::Save);
|
||||
}
|
||||
if ui.button(crate::i18n::tr("Don't Save")).clicked() {
|
||||
if ui.button(crate::i18n::tr("ui.don_t_save")).clicked() {
|
||||
answer = Some(Answer::DontSave);
|
||||
}
|
||||
if ui.button(crate::i18n::tr("Cancel")).clicked() {
|
||||
if ui.button(crate::i18n::tr("ui.cancel")).clicked() {
|
||||
answer = Some(Answer::Cancel);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user