From d6fe12d097531a5c69b0adbb42f0b74b3c315888 Mon Sep 17 00:00:00 2001 From: Baofeng Zhang Date: Wed, 14 Jan 2026 13:51:07 +0900 Subject: [PATCH] feat: add Japanese translations --- assets/locales/en.toml | 1 + assets/locales/ja.toml | 63 +++++++++++++++++++++++++++++++++++++++ assets/locales/zh-CN.toml | 1 + src/gui/board/render.rs | 2 +- src/i18n/mod.rs | 10 +++++-- 5 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 assets/locales/ja.toml diff --git a/assets/locales/en.toml b/assets/locales/en.toml index 0ba6819..88a25d1 100644 --- a/assets/locales/en.toml +++ b/assets/locales/en.toml @@ -16,6 +16,7 @@ pin = "Pin" unpin = "Unpin" # Settings +settings_button = "Settings" settings_title = "Ropy Settings" settings_back = "←" settings_cancel = "Cancel" diff --git a/assets/locales/ja.toml b/assets/locales/ja.toml new file mode 100644 index 0000000..afe9987 --- /dev/null +++ b/assets/locales/ja.toml @@ -0,0 +1,63 @@ +# Japanese translations for Ropy +# 日本語翻訳 + +# Application +app_name = "Ropy" +app_description = "RustとGPUIで構築されたクリップボードマネージャー" + +# Tray menu +tray_show = "表示" +tray_quit = "終了" + +# Main window +search_placeholder = "/ で検索 ... " +no_records = "クリップボード履歴がありません" +clear_all = "すべてクリア" +pin = "ピン留め" +unpin = "ピン留め解除" + +# Settings +settings_button = "設定" +settings_title = "Ropy 設定" +settings_back = "←" +settings_cancel = "キャンセル" +settings_save = "保存" + +# Settings sections +settings_language = "言語" +settings_language_description = "使用する言語を選択してください" + +settings_theme = "テーマ" +settings_theme_light = "ライト" +settings_theme_dark = "ダーク" +settings_theme_system = "システム" + +settings_hotkey = "ホットキー設定" +settings_activation_key = "起動キー" +settings_hotkey_hint = "形式: control+shift+d または cmd+shift+v" +settings_hotkey_invalid = "無効なホットキー形式です" + +settings_storage = "ストレージ設定" +settings_max_history = "最大履歴件数" + +settings_system = "システム" +settings_autostart = "システム起動時に起動" +settings_autostart_on = "オン" +settings_autostart_off = "オフ" + +# Content types +content_type_text = "テキスト" +content_type_image = "画像" +content_type_file = "ファイル" + +# Messages +message_copied = "クリップボードにコピーしました" +message_deleted = "レコードを削除しました" +message_cleared = "履歴をクリアしました" + +# About +about_title = "Ropy について" +about_version = "バージョン" +about_description = "RustとGPUIで構築された軽量クリップボードマネージャーです。" +about_github = "GitHub" +about_back = "←" diff --git a/assets/locales/zh-CN.toml b/assets/locales/zh-CN.toml index f380295..827021b 100644 --- a/assets/locales/zh-CN.toml +++ b/assets/locales/zh-CN.toml @@ -16,6 +16,7 @@ pin = "固定" unpin = "取消固定" # 设置 +settings_button = "设置" settings_title = "Ropy 设置" settings_back = "←" settings_cancel = "取消" diff --git a/src/gui/board/render.rs b/src/gui/board/render.rs index 8ca5240..8a96a56 100644 --- a/src/gui/board/render.rs +++ b/src/gui/board/render.rs @@ -127,7 +127,7 @@ pub fn render_header(board: &RopyBoard, cx: &mut Context<'_, RopyBoard>) -> impl Button::new("settings-button") .ghost() .icon(Icon::empty().path("settings.svg")) - .tooltip("Settings") + .tooltip(board.i18n.t("settings_button")) .on_click(cx.listener(|this, _, window, cx| { this.show_settings = true; window.focus(&this.focus_handle); diff --git a/src/i18n/mod.rs b/src/i18n/mod.rs index b127e42..4ac19b0 100644 --- a/src/i18n/mod.rs +++ b/src/i18n/mod.rs @@ -11,6 +11,8 @@ pub enum Language { English, #[serde(rename = "zh-CN")] ChineseSimplified, + #[serde(rename = "ja")] + Japanese, } impl Language { @@ -18,11 +20,12 @@ impl Language { match self { Language::English => "English", Language::ChineseSimplified => "简体中文", + Language::Japanese => "日本語", } } pub fn all() -> Vec { - vec![Language::English, Language::ChineseSimplified] + vec![Language::English, Language::ChineseSimplified, Language::Japanese] } } @@ -71,6 +74,7 @@ impl I18n { let content = match language { Language::English => include_str!("../../assets/locales/en.toml"), Language::ChineseSimplified => include_str!("../../assets/locales/zh-CN.toml"), + Language::Japanese => include_str!("../../assets/locales/ja.toml"), }; Translations::from_toml(content) } @@ -125,6 +129,7 @@ mod tests { fn test_language_display_name() { assert_eq!(Language::English.display_name(), "English"); assert_eq!(Language::ChineseSimplified.display_name(), "简体中文"); + assert_eq!(Language::Japanese.display_name(), "日本語"); } #[test] @@ -171,8 +176,9 @@ mod tests { #[test] fn test_language_all() { let languages = Language::all(); - assert_eq!(languages.len(), 2); + assert_eq!(languages.len(), 3); assert!(languages.contains(&Language::English)); assert!(languages.contains(&Language::ChineseSimplified)); + assert!(languages.contains(&Language::Japanese)); } }