From d8c6c780c26f0b9bb56501532edbdd395b6fc4dc Mon Sep 17 00:00:00 2001 From: sevonj <100710152+sevonj@users.noreply.github.com> Date: Tue, 23 Jun 2026 14:39:06 +0300 Subject: [PATCH] i18n: gettext in rust source --- po/POTFILES.in | 42 +++++++++++++ po/es.po | 85 +++++++++++++++++++++++++- po/et.po | 85 +++++++++++++++++++++++++- po/fi.po | 93 ++++++++++++++++++++++++++--- po/pl.po | 89 +++++++++++++++++++++++++-- po/pt_BR.po | 89 +++++++++++++++++++++++++-- po/ru.po | 85 +++++++++++++++++++++++++- po/scratchmark.pot | 72 +++++++++++++++++++++- po/tr.po | 89 +++++++++++++++++++++++++-- po/zh_CN.po | 89 +++++++++++++++++++++++++-- repo-tools/pot_update.py | 6 +- src/error.rs | 24 ++++---- src/widgets/library/library_view.rs | 23 ++++--- src/widgets/window.rs | 7 ++- src/widgets/window_title.rs | 3 +- 15 files changed, 831 insertions(+), 50 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index 3452a87..9181f2f 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -29,3 +29,45 @@ data/resources/ui/preferences/file_ext_item.ui data/resources/ui/shortcuts.ui data/resources/ui/window.ui data/resources/ui/window_title.ui +src/config.rs +src/data/document.rs +src/data/document_stats.rs +src/data/folder.rs +src/data/markdown_buffer/formatting.rs +src/data/markdown_buffer/mod.rs +src/data/mod.rs +src/data/project.rs +src/data/sort.rs +src/error.rs +src/main.rs +src/settings.rs +src/util/file_actions.rs +src/util/mod.rs +src/util/regex.rs +src/widgets/editor/document_stats_view.rs +src/widgets/editor/editor_view.rs +src/widgets/editor/file_changed_on_disk_dialog.rs +src/widgets/editor/minimap.rs +src/widgets/editor/mod.rs +src/widgets/editor/search_bar.rs +src/widgets/editor/text_view.rs +src/widgets/editor_placeholder.rs +src/widgets/library/delete_confirm_dialog.rs +src/widgets/library/document_create_popover.rs +src/widgets/library/document_row.rs +src/widgets/library/folder_create_popover.rs +src/widgets/library/folder_row.rs +src/widgets/library/item_rename_popover.rs +src/widgets/library/library_view.rs +src/widgets/library/mod.rs +src/widgets/library/project_err_placeholder.rs +src/widgets/library/project_list_box.rs +src/widgets/library/project_view.rs +src/widgets/markdown_format_bar.rs +src/widgets/mod.rs +src/widgets/preferences.rs +src/widgets/preferences/dialog.rs +src/widgets/preferences/file_ext_add_popover.rs +src/widgets/preferences/file_ext_item.rs +src/widgets/window.rs +src/widgets/window_title.rs diff --git a/po/es.po b/po/es.po index e1aacff..0cbac0e 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: scratchmark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-06-15 15:26+0300\n" +"POT-Creation-Date: 2026-06-23 14:38+0300\n" "PO-Revision-Date: 2026-05-28 11:41+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language-Team: Estonian \n" "Language-Team: Finnish \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Russian \n" "Language-Team: LANGUAGE \n" @@ -650,3 +650,73 @@ msgstr "" #: data/resources/ui/window.ui:223 msgid "First Accessed" msgstr "" + +#: src/error.rs:25 +msgid "Couldn't create file" +msgstr "" + +#: src/error.rs:26 +msgid "Couldn't access file" +msgstr "" + +#: src/error.rs:27 +msgid "Couldn't create folder" +msgstr "" + +#: src/error.rs:28 +msgid "Couldn't move item" +msgstr "" + +#: src/error.rs:29 +msgid "File contains invalid characters" +msgstr "" + +#: src/error.rs:30 +msgid "File has changed on disk" +msgstr "" + +#: src/error.rs:31 +msgid "Invalid path" +msgstr "" + +#: src/widgets/library/library_view.rs:426 +#: src/widgets/library/library_view.rs:446 +msgid "Couldn't move to trash" +msgstr "" + +#: src/widgets/library/library_view.rs:429 +#: src/widgets/library/library_view.rs:449 +msgid "Moved to trash" +msgstr "" + +#: src/widgets/library/library_view.rs:477 +msgid "Couldn't delete document" +msgstr "" + +#: src/widgets/library/library_view.rs:483 +msgid "Document deleted" +msgstr "" + +#: src/widgets/library/library_view.rs:517 +msgid "Couldn't delete folder" +msgstr "" + +#: src/widgets/library/library_view.rs:523 +msgid "Folder deleted" +msgstr "" + +#: src/widgets/window.rs:429 +msgid "Couldn't move file" +msgstr "" + +#: src/widgets/window.rs:636 +msgid "Saved" +msgstr "" + +#: src/widgets/window.rs:953 +msgid "Open document has been moved or deleted" +msgstr "" + +#: src/widgets/window_title.rs:72 +msgid " (Focus Mode)" +msgstr "" diff --git a/po/tr.po b/po/tr.po index 5efb3e3..1568109 100644 --- a/po/tr.po +++ b/po/tr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-06-15 15:26+0300\n" +"POT-Creation-Date: 2026-06-23 14:38+0300\n" "PO-Revision-Date: 2026-06-04 08:07+0000\n" "Last-Translator: sevon \n" "Language-Team: Turkish \n" "Language-Team: Chinese (Simplified Han script) ) -> std::fmt::Result { + use ScratchmarkError::*; + match self { - Self::FileCreateFail => write!(f, "Couldn't create file."), - Self::FileOpenFail => write!(f, "Couldn't read file."), - Self::FolderCreateFail => write!(f, "Couldn't create folder."), - Self::ItemMoveFail => write!(f, "Couldn't move item."), - Self::InvalidChars => write!(f, "File contains invalid characters."), - Self::FileChanged => write!(f, "File has changed on disk."), - Self::IsRootDir => write!(f, "This action can't be done to a project root folder."), - Self::NotRootDir => write!(f, "This action can only be done to a project root folder."), - Self::InvalidPath => write!(f, "Invalid path."), + FileCreateFail => write!(f, "{}", gettext("Couldn't create file")), + FileOpenFail => write!(f, "{}", gettext("Couldn't access file")), + FolderCreateFail => write!(f, "{}", gettext("Couldn't create folder")), + ItemMoveFail => write!(f, "{}", gettext("Couldn't move item")), + InvalidChars => write!(f, "{}", gettext("File contains invalid characters")), + FileChanged => write!(f, "{}", gettext("File has changed on disk")), + InvalidPath => write!(f, "{}", gettext("Invalid path")), + IsRootDir => write!(f, "This action can't be done to a project root folder"), + NotRootDir => write!(f, "This action can only be done to a project root folder"), } } } diff --git a/src/widgets/library/library_view.rs b/src/widgets/library/library_view.rs index bbaa139..943b322 100644 --- a/src/widgets/library/library_view.rs +++ b/src/widgets/library/library_view.rs @@ -8,6 +8,7 @@ mod imp { use std::sync::OnceLock; use adw::subclass::prelude::*; + use gettextrs::gettext; use gtk::CompositeTemplate; use gtk::FileDialog; use gtk::gio::Cancellable; @@ -422,10 +423,10 @@ mod imp { if let Err(e) = File::for_path(&path).trash(None::<&Cancellable>) { println!("{e}"); - obj.emit_by_name::<()>("toast", &[&"Couldn't move to trash"]); + obj.emit_by_name::<()>("toast", &[&gettext("Couldn't move to trash")]); } obj.emit_by_name::<()>("path-removed", &[&path]); - obj.emit_by_name::<()>("toast", &[&"Moved to trash"]); + obj.emit_by_name::<()>("toast", &[&gettext("Moved to trash")]); for project in self.projects.borrow().deref().values() { if path.starts_with(project.project().path()) { @@ -442,10 +443,10 @@ mod imp { if let Err(e) = File::for_path(&path).trash(None::<&Cancellable>) { println!("{e}"); - obj.emit_by_name::<()>("toast", &[&"Couldn't move to trash"]); + obj.emit_by_name::<()>("toast", &[&gettext("Couldn't move to trash")]); } obj.emit_by_name::<()>("path-removed", &[&path]); - obj.emit_by_name::<()>("toast", &[&"Moved to trash"]); + obj.emit_by_name::<()>("toast", &[&gettext("Moved to trash")]); for project in self.projects.borrow().deref().values() { if path.starts_with(project.project().path()) { @@ -471,12 +472,15 @@ mod imp { let obj = imp.obj(); if let Err(e) = std::fs::remove_file(&path) { println!("{e}"); - obj.emit_by_name::<()>("toast", &[&"Couldn't delete folder."]); + obj.emit_by_name::<()>( + "toast", + &[&gettext("Couldn't delete document")], + ); return; } obj.emit_by_name::<()>("path-removed", &[&path]); - obj.emit_by_name::<()>("toast", &[&"Permanently deleted"]); + obj.emit_by_name::<()>("toast", &[&gettext("Document deleted")]); for project in imp.projects.borrow().deref().values() { if path.starts_with(project.project().path()) { @@ -508,12 +512,15 @@ mod imp { let obj = imp.obj(); if let Err(e) = std::fs::remove_dir_all(&path) { println!("{e}"); - obj.emit_by_name::<()>("toast", &[&"Couldn't delete folder."]); + obj.emit_by_name::<()>( + "toast", + &[&gettext("Couldn't delete folder")], + ); return; } obj.emit_by_name::<()>("path-removed", &[&path]); - obj.emit_by_name::<()>("toast", &[&"Permanently deleted"]); + obj.emit_by_name::<()>("toast", &[&gettext("Folder deleted")]); for project in imp.projects.borrow().deref().values() { if path.starts_with(project.project().path()) { diff --git a/src/widgets/window.rs b/src/widgets/window.rs index 77002bd..822c1ea 100644 --- a/src/widgets/window.rs +++ b/src/widgets/window.rs @@ -15,6 +15,7 @@ mod imp { use adw::ToolbarView; use adw::prelude::*; use adw::subclass::prelude::*; + use gettextrs::gettext; use gtk::Builder; use gtk::Button; use gtk::CompositeTemplate; @@ -425,7 +426,7 @@ mod imp { if let Err(e) = imp.library_view.move_item(old_path, new_path.clone()) { println!("{e}"); - imp.toast("Couldn't move file."); + imp.toast(&gettext("Couldn't move file")); } if is_open_in_editor { @@ -632,7 +633,7 @@ mod imp { imp.toast(&e.to_string()); return; } - imp.toast("Saved"); + imp.toast(&gettext("Saved")); } } )); @@ -949,7 +950,7 @@ mod imp { if !open_document_path.is_empty() { let open_document_path = PathBuf::from(open_document_path); if !open_document_path.exists() { - self.toast("Opened document has been moved or deleted."); + self.toast(&gettext("Open document has been moved or deleted")); } self.load_document(open_document_path); } diff --git a/src/widgets/window_title.rs b/src/widgets/window_title.rs index 4455232..d117267 100644 --- a/src/widgets/window_title.rs +++ b/src/widgets/window_title.rs @@ -3,6 +3,7 @@ mod imp { use std::cell::RefCell; use adw::subclass::prelude::*; + use gettextrs::gettext; use gtk::CompositeTemplate; use gtk::glib; use gtk::glib::Properties; @@ -68,7 +69,7 @@ mod imp { }; let focus = if self.focus_mode.get() { - " (Focus Mode)" + &gettext(" (Focus Mode)") } else { "" };