From 2ed9f70e201c6a11f6bf8be17285f9fe1ddee862 Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 6 Jun 2025 23:36:17 +0800 Subject: [PATCH] feat(settings): enhance UI labels and descriptions for clarity - Updated various settings components to use title-cased labels for better readability. - Added descriptions for action-related settings to improve user understanding. - Adjusted localization strings to reflect new label structures and descriptions. Signed-off-by: Innei --- .../renderer/src/modules/settings/control.tsx | 15 ++- .../renderer/src/modules/settings/section.tsx | 5 +- .../src/modules/settings/tabs/general.tsx | 29 ++-- .../src/pages/settings/(settings)/about.tsx | 3 +- .../pages/settings/(settings)/appearance.tsx | 2 +- .../settings/(settings)/data-control.tsx | 2 +- .../src/pages/settings/(settings)/feeds.tsx | 2 +- .../src/pages/settings/(settings)/general.tsx | 2 +- .../pages/settings/(settings)/integration.tsx | 2 +- .../pages/settings/(settings)/invitations.tsx | 2 +- .../src/pages/settings/(settings)/list.tsx | 2 +- .../settings/(settings)/notifications.tsx | 2 +- .../src/pages/settings/(settings)/profile.tsx | 4 +- .../pages/settings/(settings)/shortcuts.tsx | 2 +- .../src/modules/settings/routes/General.tsx | 23 +++- locales/settings/en.json | 19 +-- locales/settings/ja.json | 124 +++++++++++++++++- locales/settings/zh-CN.json | 16 ++- locales/settings/zh-TW.json | 13 +- 19 files changed, 214 insertions(+), 55 deletions(-) diff --git a/apps/desktop/layer/renderer/src/modules/settings/control.tsx b/apps/desktop/layer/renderer/src/modules/settings/control.tsx index 0fe7ef942..3fa329ad8 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/control.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/control.tsx @@ -7,6 +7,7 @@ import { Switch } from "@follow/components/ui/switch/index.jsx" import { cn } from "@follow/utils/utils" import type { ChangeEventHandler, ReactNode } from "react" import { useId, useState } from "react" +import { titleCase } from "title-case" export const SettingCheckbox: Component<{ label: string @@ -22,7 +23,7 @@ export const SettingCheckbox: Component<{ onCheckedChange={onCheckedChange} className="cursor-auto" /> - + ) } @@ -35,7 +36,7 @@ export const SettingSwitch: Component<{ const id = useId() return (
- +
) @@ -60,7 +61,7 @@ export const SettingInput: Component<{ )} > @@ -77,7 +78,9 @@ export const SettingTabbedSegment: Component<{ return (
- + (
-
{label}
+
+ {typeof label === "string" ? titleCase(label) : label} +
diff --git a/apps/desktop/layer/renderer/src/modules/settings/section.tsx b/apps/desktop/layer/renderer/src/modules/settings/section.tsx index 3a6178523..fb50b8d20 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/section.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/section.tsx @@ -5,6 +5,7 @@ import { cn } from "@follow/utils/utils" import type { FC, PropsWithChildren, ReactNode } from "react" import { cloneElement } from "react" import * as React from "react" +import { titleCase } from "title-case" import { SettingActionItem, SettingDescription, SettingSwitch } from "./control" @@ -15,11 +16,11 @@ export const SettingSectionTitle: FC<{ }> = ({ title, margin }) => (
- {title} + {typeof title === "string" ? titleCase(title) : title}
) diff --git a/apps/desktop/layer/renderer/src/modules/settings/tabs/general.tsx b/apps/desktop/layer/renderer/src/modules/settings/tabs/general.tsx index c7f466b1c..c4b7b3a11 100644 --- a/apps/desktop/layer/renderer/src/modules/settings/tabs/general.tsx +++ b/apps/desktop/layer/renderer/src/modules/settings/tabs/general.tsx @@ -93,10 +93,12 @@ export const SettingGeneral = () => { value: t("general.action.title"), }, defineSettingItem("summary", { - label: t("general.action.summary"), + label: t("general.action.summary.label"), + description: t("general.action.summary.description"), }), defineSettingItem("translation", { - label: t("general.action.translation"), + label: t("general.action.translation.label"), + description: t("general.action.translation.description"), }), TranslationModeSelector, ActionLanguageSelector, @@ -141,7 +143,7 @@ export const SettingGeneral = () => { description: t("general.show_quick_timeline.description"), }), - { type: "title", value: t("general.unread") }, + { type: "title", value: t("general.mark_as_read.title") }, defineSettingItem("scrollMarkUnread", { label: t("general.mark_as_read.scroll.label"), @@ -229,8 +231,11 @@ export const LanguageSelector = ({ const isMobile = useMobile() return ( -
- {t("general.language")} +
+
+ {t("general.language.title")} + {t("general.language.description")} +
{ const translationMode = useGeneralSettingKey("translationMode") return ( - -
+ <> +
{t("general.translation_mode.label")} { />
{t("general.translation_mode.description")} - + ) } @@ -301,8 +306,12 @@ const ActionLanguageSelector = () => { const actionLanguage = useGeneralSettingKey("actionLanguage") return ( -
- {t("general.action_language.label")} +
+
+ {t("general.action_language.label")} + {t("general.action_language.description")} +
+ ( <> diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/appearance.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/appearance.tsx index d29265461..55805ee9e 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/appearance.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/appearance.tsx @@ -3,7 +3,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" const iconName = "i-mgc-palette-cute-re" -const priority = 1010 +const priority = (1000 << 1) + 10 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/data-control.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/data-control.tsx index b9f1604ea..1582dbf5b 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/data-control.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/data-control.tsx @@ -4,7 +4,7 @@ import { SettingDataControl } from "~/modules/settings/tabs/data-control" import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" -const priority = 1025 +const priority = (1000 << 1) + 30 export const loader = defineSettingPageData({ icon: , diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/feeds.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/feeds.tsx index 6467cb1c7..b6a3e8598 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/feeds.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/feeds.tsx @@ -3,7 +3,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" const iconName = "i-mgc-certificate-cute-re" -const priority = 1060 +const priority = (1000 << 2) + 20 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/general.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/general.tsx index 1540cff38..85ef8e953 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/general.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/general.tsx @@ -3,7 +3,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" const iconName = "i-mgc-settings-7-cute-re" -const priority = 1000 +const priority = 1000 << 1 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/integration.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/integration.tsx index 657612cb3..8350d8a4c 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/integration.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/integration.tsx @@ -3,7 +3,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" const iconName = "i-mgc-department-cute-re" -const priority = 1030 +const priority = (1000 << 1) + 20 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/invitations.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/invitations.tsx index ca0fddc74..73abaa3bd 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/invitations.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/invitations.tsx @@ -5,7 +5,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData, DisableWhy } from "~/modules/settings/utils" const iconName = "i-mgc-love-cute-re" -const priority = 1070 +const priority = (1000 << 3) + 20 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/list.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/list.tsx index 033ad6823..77f42a1c3 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/list.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/list.tsx @@ -5,7 +5,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData, DisableWhy } from "~/modules/settings/utils" const iconName = "i-mgc-rada-cute-re" -const priority = 1050 +const priority = (1000 << 2) + 10 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/notifications.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/notifications.tsx index b489a2a08..5f22f37aa 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/notifications.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/notifications.tsx @@ -5,7 +5,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData, DisableWhy } from "~/modules/settings/utils" const iconName = "i-mgc-notification-cute-re" -const priority = 1040 +const priority = (1000 << 1) + 50 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/profile.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/profile.tsx index 0d59169e8..b6386854b 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/profile.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/profile.tsx @@ -14,10 +14,10 @@ import { defineSettingPageData } from "~/modules/settings/utils" import { signOut } from "~/queries/auth" const iconName = "i-mgc-user-setting-cute-re" -const priority = 1090 +const priority = (1000 << 3) + 10 export const loader = defineSettingPageData({ icon: iconName, - name: "titles.profile", + name: "titles.account", priority, }) diff --git a/apps/desktop/layer/renderer/src/pages/settings/(settings)/shortcuts.tsx b/apps/desktop/layer/renderer/src/pages/settings/(settings)/shortcuts.tsx index c6aa52ed8..924b4558c 100644 --- a/apps/desktop/layer/renderer/src/pages/settings/(settings)/shortcuts.tsx +++ b/apps/desktop/layer/renderer/src/pages/settings/(settings)/shortcuts.tsx @@ -5,7 +5,7 @@ import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" const iconName = "i-mgc-hotkey-cute-re" -const priority = 1080 +const priority = (1000 << 1) + 40 export const loader = defineSettingPageData({ icon: iconName, diff --git a/apps/mobile/src/modules/settings/routes/General.tsx b/apps/mobile/src/modules/settings/routes/General.tsx index d311b07f5..fae43dbed 100644 --- a/apps/mobile/src/modules/settings/routes/General.tsx +++ b/apps/mobile/src/modules/settings/routes/General.tsx @@ -70,7 +70,14 @@ function LanguageSetting({ settingKey }: { settingKey: "language" | "actionLangu return ( @@ -128,7 +135,7 @@ export const GeneralScreen: NavigationControllerView = () => { > {/* Language */} - + @@ -136,7 +143,10 @@ export const GeneralScreen: NavigationControllerView = () => { {/* Content Behavior */} - + { }} /> - + { {/* Unread */} - + GitHub で課題を報告してください 。", "about.iconLibrary": "使用されているアイコンライブラリは によって著作権が保護されており、再配布できません。", "about.licenseInfo": "Copyright © {{currentYear}} {{appName}}. All rights reserved.", @@ -22,6 +23,7 @@ "actions.action_card.feed_options.feed_title": "フィードタイトル", "actions.action_card.feed_options.feed_url": "フィードURL", "actions.action_card.feed_options.site_url": "サイトURL", + "actions.action_card.feed_options.status": "ステータス", "actions.action_card.feed_options.subscription_view": "購読ビュー", "actions.action_card.field": "フィールド", "actions.action_card.from": "から", @@ -39,14 +41,24 @@ "actions.action_card.operator": "オペレーター", "actions.action_card.or": "または", "actions.action_card.rewrite_rules": "リライトルール", + "actions.action_card.settings": "設定", "actions.action_card.silence": "サイレント", "actions.action_card.source_content": "ソースコンテンツを表示する", + "actions.action_card.star": "スター", "actions.action_card.then_do": "次に行う…", "actions.action_card.to": "へ", "actions.action_card.translate_into": "翻訳する", "actions.action_card.value": "値", "actions.action_card.webhooks": "Webhooks", "actions.action_card.when_feeds_match": "フィードが一致した場合…", + "actions.condition": "条件", + "actions.conditions": "条件", + "actions.edit_condition": "条件を編集", + "actions.edit_rewrite_rule": "リライトルールを編集", + "actions.edit_rule": "ルールを編集", + "actions.edit_webhook": "Webhookを編集", + "actions.info": "アクションは、サーバーまたはクライアント側でタスクを実行するために自動化できるルールのコレクションです。", + "actions.navigate.prompt": "保存されていないアクションの変更があります。本当に離れますか?", "actions.newRule": "新しいルール", "actions.save": "保存", "actions.saveSuccess": "🎉 アクションが保存されました。", @@ -54,11 +66,22 @@ "actions.title": "アクション", "appearance.code_highlight_theme": "コードハイライトテーマ", "appearance.content": "コンテンツ", + "appearance.content_font.default": "デフォルト(UIフォント)", "appearance.content_font.label": "コンテンツフォント", + "appearance.content_font_size": "コンテンツフォントサイズ", + "appearance.content_line_height.label": "コンテンツ行の高さ", + "appearance.content_line_height.loose": "ゆるい", + "appearance.content_line_height.normal": "普通", + "appearance.content_line_height.relaxed": "リラックス", + "appearance.content_line_height.snug": "ぴったり", + "appearance.content_line_height.tight": "タイト", "appearance.custom_css.button": "編集", "appearance.custom_css.description": "コンテンツに Custom CSS を適用できます", "appearance.custom_css.label": "Custom CSS", "appearance.custom_font": "カスタムフォント", + "appearance.date_format": "日付形式", + "appearance.font.custom": "カスタム", + "appearance.font.system": "システムUI", "appearance.fonts": "フォント", "appearance.general": "一般", "appearance.guess_code_language.description": "ラベルがないコードブロックの言語を推測するためにモデルを使用する主要なプログラミング言語", @@ -78,7 +101,12 @@ "appearance.save": "保存", "appearance.sidebar": "サイドバー", "appearance.sidebar_title": "外観", + "appearance.subscriptions": "購読", + "appearance.text_size.default": "デフォルト", "appearance.text_size.label": "テキストサイズ", + "appearance.text_size.large": "大", + "appearance.text_size.medium": "中", + "appearance.text_size.smaller": "小", "appearance.theme.dark": "ダーク", "appearance.theme.label": "テーマ", "appearance.theme.light": "ライト", @@ -97,27 +125,57 @@ "appearance.zen_mode.description": "Zen モードは、邪魔されることなくコンテンツに集中できる読書モードです。Zenモードを有効にすると、サイドバーが非表示になります。", "appearance.zen_mode.label": "Zen モード", "common.give_star": "私たちの製品が好きですか?GitHub で Star を付けましょう!", + "customizeToolbar.more_actions.description": "ドロップダウンメニューに表示されます", + "customizeToolbar.more_actions.title": "その他のアクション", + "customizeToolbar.quick_actions.description": "よく使用するアクションをカスタマイズして並べ替える", + "customizeToolbar.quick_actions.title": "クイックアクション", + "customizeToolbar.reset_layout": "デフォルトレイアウトにリセット", "customizeToolbar.title": "ツールバーをカスタマイズ", "data_control.app_cache_limit.description": "アプリの最大キャッシュを設定します。 このサイズに達すると空き容量を確保するために古いアイテムから削除されます。", "data_control.app_cache_limit.label": "キャッシュリミット", "data_control.clean_cache.button": "キャッシュをクリア", + "data_control.clean_cache.cancel": "キャンセル", + "data_control.clean_cache.clear": "クリア", "data_control.clean_cache.description": "空き容量を確保するためにキャッシュをクリアします。", "data_control.clean_cache.description_web": "サービスワーカーのキャッシュを削除して空き容量を確保します。", + "data_control.data_sources": "データソース", + "data_control.export_local_database.label": "ローカルデータベースをエクスポート", + "data_control.import_opml.label": "OPMLから購読をインポート", + "data_control.utils": "ユーティリティ", + "discoverFilters.filters": "フィルタ", + "discoverFilters.language": "言語", + "discoverFilters.title": "発見フィルタ", + "feeds.claim": "フィードを認証", "feeds.claimTips": "フィードを認証してチップを受け取るには、購読リストのフィードを右クリックして「フィードをクレーム」を選択してください。", "feeds.noFeeds": "認証されたフィードはありません", + "feeds.subscription": "購読済みフィード", "feeds.tableHeaders.name": "名前", "feeds.tableHeaders.subscriptionCount": "購読者", "feeds.tableHeaders.tipAmount": "受け取った報酬", + "general.action.summary.description": "AIを使用してエントリの要約を生成します。", + "general.action.summary.label": "AI要約", + "general.action.title": "AIアクション", + "general.action.translation.description": "エントリを選択した言語に翻訳します。", + "general.action.translation.label": "AI翻訳", + "general.action_language.default": "デフォルト(UI言語)", + "general.action_language.description": "AI アクションの言語を選択します。", + "general.action_language.label": "AI ターゲット言語", + "general.advanced": "高度", "general.app": "アプリ", "general.auto_expand_long_social_media.description": "ソーシャルメディアに含まれる長いテキストを展開して表示します。", "general.auto_expand_long_social_media.label": "ソーシャルメディアを展開", "general.auto_group.description": "サイトのドメインごとに自動でグループ化する。", "general.auto_group.label": "自動グループ化", "general.cache": "キャッシュ", + "general.content": "コンテンツ", "general.data": "データ", "general.data_file.label": "データファイル", "general.data_persist.description": "ローカルデータを保持してオフラインアクセスとローカル検索を可能にします。", "general.data_persist.label": "オフライン使用のためにデータを保持", + "general.enhanced.description": "強化された設定を有効にすると、より多くのカスタマイズオプションが提供されますが、予期しない問題が発生する可能性もあります。", + "general.enhanced.disabled.tip": "強化された設定は無効になっています。一般設定 - 詳細設定で有効にできます。", + "general.enhanced.enabled.tip": "強化された設定が有効になっています。一般設定 - 詳細設定で無効にできます。", + "general.enhanced.label": "強化された設定", "general.export.button": "エクスポート", "general.export.description": "あなたのフィードを OPML ファイルにエクスポートします。", "general.export.folder_mode.description": "エクスポートするフォルダーを決めて管理します。", @@ -132,7 +190,12 @@ "general.export_database.label": "データベースをエクスポート", "general.group_by_date.description": "エントリを日付ごとにグループ化します。", "general.group_by_date.label": "日付ごとにグループ化", - "general.language": "言語", + "general.hide_all_read_subscriptions.description": "購読リストで未読エントリのない購読を非表示にします。", + "general.hide_all_read_subscriptions.label": "既読を非表示", + "general.hide_private_subscriptions_in_timeline.description": "購読リストからプライベート購読を非表示にし、タイムラインからそれらのエントリを非表示にします(この設定に関係なく、それらは常に公開されません)。", + "general.hide_private_subscriptions_in_timeline.label": "プライベートを非表示", + "general.language.description": "アプリの表示言語を選択します。", + "general.language.title": "言語", "general.launch_at_login": "ログイン時に起動", "general.log_file.button": "ログ", "general.log_file.description": "システムにログファイルがあると表示します。", @@ -143,13 +206,16 @@ "general.mark_as_read.render.label": "表示中に既読にする", "general.mark_as_read.scroll.description": "表示からスクロールアウトしたときにエントリを自動的に既読にします。", "general.mark_as_read.scroll.label": "スクロール時に既読にする", + "general.mark_as_read.title": "既読にする", "general.minimize_to_tray.description": "ウィンドウを閉じるとシステムトレイに最小化します", "general.minimize_to_tray.label": "トレイに最小化", "general.network": "ネットワーク", + "general.open_links_in_external_app.label": "外部アプリでリンクを開く", "general.privacy": "プライバシー", "general.proxy.description": "ネットワークリクエストを代理します。例: socks://proxy.example.com:1080", "general.proxy.label": "プロキシ", "general.rebuild_database.button": "再構築", + "general.rebuild_database.cancel": "キャンセル", "general.rebuild_database.description": "レンダリングに問題がある場合、データベースの再構築が解決するかもしれません。", "general.rebuild_database.label": "データベースを再構築", "general.rebuild_database.title": "データベースを再構築", @@ -165,12 +231,25 @@ "general.startup_screen.subscription": "購読", "general.startup_screen.timeline": "タイムライン", "general.startup_screen.title": "スタートアップスクリーン", + "general.subscription": "購読", + "general.subscriptions": "購読", "general.timeline": "タイムライン", - "general.unread": "未読", + "general.translation_mode.bilingual": "バイリンガル比較", + "general.translation_mode.description": "エントリリストで翻訳されたテキストの表示方法を選択します。", + "general.translation_mode.label": "AI翻訳モード", + "general.translation_mode.translation-only": "翻訳のみ", "general.voices": "音声", + "integration.cubox.autoMemo.description": "テキストを選択してCuboxに保存する際に、自動的にメモモードを使用します。", + "integration.cubox.autoMemo.label": "自動メモモード", + "integration.cubox.enable.description": "利用可能な場合、'Cuboxに保存'ボタンを表示します。", + "integration.cubox.enable.label": "有効", + "integration.cubox.title": "Cubox", + "integration.cubox.token.description": "完全なCubox API URLを入力してください。形式:https://cubox.pro/c/api/save/xxxxxxxxx。こちらで取得できます:", + "integration.cubox.token.label": "Cubox API URL", "integration.eagle.enable.description": "利用可能な場合、'Eagle にメディアを保存' ボタンを表示します。", "integration.eagle.enable.label": "有効化", "integration.eagle.title": "Eagle", + "integration.general": "一般", "integration.instapaper.enable.description": "利用可能な場合、'Instapaper に保存' ボタンを表示します。", "integration.instapaper.enable.label": "有効化", "integration.instapaper.password.label": "Instapaper パスワード", @@ -202,9 +281,17 @@ "integration.readwise.title": "Readwise", "integration.readwise.token.description": "こちらで取得できます:", "integration.readwise.token.label": "Readwise アクセス トークン", + "integration.save_ai_summary_as_description.label": "AI要約を説明として保存", "integration.sidebar_title": "統合", "integration.tip": "ヒント:あなたの機密データはローカルに保存され、サーバーにアップロードされません。", "integration.title": "統合", + "integration.zotero.enable.description": "利用可能な場合、'Zoteroに保存'ボタンを表示します。", + "integration.zotero.enable.label": "有効", + "integration.zotero.title": "Zotero", + "integration.zotero.token.description": "Zotero APIトークン。こちらで取得できます:", + "integration.zotero.token.label": "Zotero APIトークン", + "integration.zotero.userID.description": "Zotero ユーザーID。こちらで取得できます:", + "integration.zotero.userID.label": "Zotero ユーザーID", "invitation.activate": "アクティベート", "invitation.codeOptions.betaUser": "1. ベータユーザーから招待を受ける。", "invitation.codeOptions.discord": "2. Discord サーバーに参加して、時々プレゼントをもらいましょう。", @@ -214,8 +301,10 @@ "invitation.confirmModal.continue": "続行", "invitation.confirmModal.message": "招待コードを生成するには、{{INVITATION_PRICE}} Power が必要です。", "invitation.confirmModal.title": "確認", + "invitation.created_at": "作成日", "invitation.earlyAccess": "現在、Folo はアーリーアクセス中で、招待コードが必要です。", "invitation.earlyAccessMessage": "😰 申し訳ありません。Folo は現在アーリーアクセス中で、招待コードが必要です。", + "invitation.generate": "生成", "invitation.generateButton": "新しいコードを生成", "invitation.generateCost": "{{INVITATION_PRICE}} Power を消費して、友達のために招待コードを生成できます。", "invitation.getCodeMessage": "以下の方法で招待コードを取得できます:", @@ -256,16 +345,31 @@ "lists.feeds.title": "タイトル", "lists.image": "画像", "lists.info": "リストは、他の人と共有したり販売したりできる定期購読のリストです。購読者はこのリストにあるすべてのフィードを同期してアクセスできます。", + "lists.manage_list": "リストを管理", "lists.noLists": "リストがありません", + "lists.select_feeds": "現在のリストに追加するフィードを選択", "lists.submit": "送信", "lists.subscriptions": "購読者", "lists.title": "タイトル", "lists.view": "表示", + "notifications.channel": "チャンネル", + "notifications.current": "(現在のクライアント)", + "notifications.info": "Foloはアクションを通じて堅牢で多機能な通知機能を提供します。特定のフィード、ビュー、キーワードの通知をカスタマイズできます。以下は登録された通知チャンネルです。", + "notifications.test": "テスト通知", + "notifications.test_success": "テスト通知が正常に送信されました。", + "notifications.token": "クライアントトークン", + "privacy.privacy": "プライバシー", + "privacy.terms": "利用規約", "profile.avatar.label": "アバター", "profile.change_password.label": "パスワードを変更", "profile.confirm_password.label": "パスワードの確認", "profile.current_password.label": "現在のパスワード", + "profile.danger_zone": "危険ゾーン", + "profile.delete_account.label": "アカウントを削除", + "profile.edit_email": "メールを編集", + "profile.edit_profile": "プロフィールを編集", "profile.email.change": "Email を変更", + "profile.email.change_note": "メールを変更したい場合は、新しいメールを確認する必要があります。", "profile.email.changed": "Email 変更しました。", "profile.email.changed_verification_sent": "新たな Email に確認メールを送信しました。", "profile.email.label": "Email", @@ -273,6 +377,8 @@ "profile.email.unverified": "未確認", "profile.email.verification_sent": "確認メールを送信しました", "profile.email.verified": "確認済み", + "profile.email.verify_email": "続行するにはメール({{email_address}})を確認してください", + "profile.email.verify_status": "あなたのメールは{{status}}です", "profile.handle.description": "あなた個人の識別子です", "profile.handle.label": "ハンドル", "profile.link_social.authentication": "認証", @@ -284,6 +390,8 @@ "profile.no_password": "パスワードを リセット します。", "profile.password.label": "パスワード", "profile.reset_password_mail_sent": "パスワードリセットメールを送信しました", + "profile.security": "セキュリティ", + "profile.set_avatar": "アバターを設定", "profile.sidebar_title": "プロフィール", "profile.submit": "送信", "profile.title": "プロフィール設定", @@ -307,12 +415,18 @@ "rsshub.add_new_instance": "新たなインスタンスを追加", "rsshub.description": "RSSHub コミュニティ駆動のオープンソース RSS ネットワークです。Folo は内蔵の専用インスタンスを提供し、そのインスタンスを使って数千のサブスクリプションコンテンツをサポートします。また独自あるいはサードパーティのインスタンスを使用することで、より安定したコンテンツ取得を実現できます。", "rsshub.public_instances": "利用可能なインスタンス", + "rsshub.table.delete.confirm": "このインスタンスを削除してもよろしいですか?", + "rsshub.table.delete.label": "削除", + "rsshub.table.delete.success": "インスタンスが正常に削除されました。", "rsshub.table.description": "説明", "rsshub.table.edit": "編集", "rsshub.table.inuse": "利用中", + "rsshub.table.limit_reached": "制限に達しました", "rsshub.table.official": "公式", "rsshub.table.owner": "所有者", "rsshub.table.price": "月額の費用", + "rsshub.table.private": "プライベート", + "rsshub.table.unavailable": "利用不可", "rsshub.table.unlimited": "無制限", "rsshub.table.use": "利用", "rsshub.table.userCount": "ユーザー数", @@ -325,6 +439,7 @@ "rsshub.useModal.title": "RSSHub インスタンス", "rsshub.useModal.useWith": "使用する {{amount}} ", "titles.about": "About", + "titles.account": "アカウント", "titles.actions": "アクション", "titles.appearance": "外観", "titles.data_control": "データコントロール", @@ -333,9 +448,11 @@ "titles.integration": "統合", "titles.invitations": "招待", "titles.lists": "リスト", + "titles.notifications": "通知", "titles.power": "Power", - "titles.profile": "プロフィール", + "titles.privacy": "プライバシー", "titles.shortcuts": "ショートカット", + "titles.sign_out": "サインアウト", "wallet.balance.activePoints": "アクティブなポイント", "wallet.balance.dailyReward": "デイリー報酬", "wallet.balance.title": "残高", @@ -387,6 +504,7 @@ "wallet.withdraw.button": "引き出し", "wallet.withdraw.error": "引き出しに失敗しました:{{error}}", "wallet.withdraw.modalTitle": "Power を引き出す", + "wallet.withdraw.receiveRSS3": "{{amount}} RSS3を受け取ります", "wallet.withdraw.submitButton": "送信", "wallet.withdraw.success": "引き出しが成功しました!", "wallet.withdraw.toRss3Label": "RSS3 で引き出す" diff --git a/locales/settings/zh-CN.json b/locales/settings/zh-CN.json index cd60e6284..fa9ab5148 100644 --- a/locales/settings/zh-CN.json +++ b/locales/settings/zh-CN.json @@ -1,5 +1,6 @@ { "about.changelog": "更新日志", + "about.checkForUpdates": "检查更新", "about.feedbackInfo": "{{appName}}({{commitSha}})正处于开发的早期阶段。如果你有任何反馈或建议,请随时在我们的 GitHub 上提出 。", "about.iconLibrary": "使用的图标库受版权保护,版权所有者为 ,不得重新分发。", "about.licenseInfo": "Copyright © {{currentYear}} {{appName}}. 保留所有权利。", @@ -144,15 +145,20 @@ "discoverFilters.filters": "筛选", "discoverFilters.language": "语言", "discoverFilters.title": "发现筛选", + "feeds.claim": "认证订阅源", "feeds.claimTips": "要认证你的订阅源并接收打赏,请在订阅列表中右键点击订阅源并选择「认证」。", "feeds.noFeeds": "没有已认证的订阅源", + "feeds.subscription": "已订阅的订阅源", "feeds.tableHeaders.name": "名称", "feeds.tableHeaders.subscriptionCount": "订阅数", "feeds.tableHeaders.tipAmount": "收到的打赏", - "general.action.summary": "AI 总结", + "general.action.summary.description": "使用 AI 生成条目摘要。", + "general.action.summary.label": "AI 摘要", "general.action.title": "自动化", - "general.action.translation": "AI 翻译", + "general.action.translation.description": "将条目翻译成所选语言。", + "general.action.translation.label": "AI 翻译", "general.action_language.default": "默认(界面语言)", + "general.action_language.description": "选择 AI 操作的语言,例如 AI 摘要、AI 翻译。", "general.action_language.label": "自动化语言", "general.advanced": "高级", "general.app": "应用程序", @@ -188,7 +194,8 @@ "general.hide_all_read_subscriptions.label": "隐藏已读", "general.hide_private_subscriptions_in_timeline.description": "从你的订阅列表中隐藏私密订阅,并从你的时间线上隐藏它们的条目(无论此设置如何,它们对公众始终是不可见的)。", "general.hide_private_subscriptions_in_timeline.label": "隐藏私密", - "general.language": "语言", + "general.language.description": "选择应用的显示语言。", + "general.language.title": "语言", "general.launch_at_login": "开机时启动", "general.log_file.button": "显示", "general.log_file.description": "在系统中显示日志文件。", @@ -199,6 +206,7 @@ "general.mark_as_read.render.label": "在可视区域中时标记为已读", "general.mark_as_read.scroll.description": "当条目滚动出可视区域时自动将其标记为已读。", "general.mark_as_read.scroll.label": "滚动时标记为已读", + "general.mark_as_read.title": "标记已读", "general.minimize_to_tray.description": "关闭窗口时最小化到系统托盘。", "general.minimize_to_tray.label": "最小化到托盘", "general.network": "网络", @@ -230,7 +238,6 @@ "general.translation_mode.description": "选择译文在条目列表中的显示方式。", "general.translation_mode.label": "翻译偏好", "general.translation_mode.translation-only": "仅译文", - "general.unread": "未读", "general.voices": "声音", "integration.cubox.autoMemo.description": "自动使用 Memo 模式保存选中的文本到 Cubox。", "integration.cubox.autoMemo.label": "自动 Memo 模式", @@ -444,7 +451,6 @@ "titles.notifications": "通知", "titles.power": "Power", "titles.privacy": "隐私", - "titles.profile": "个人资料", "titles.shortcuts": "快捷键", "titles.sign_out": "登出", "wallet.balance.activePoints": "活跃度", diff --git a/locales/settings/zh-TW.json b/locales/settings/zh-TW.json index 3cb7ac109..90ad1a617 100644 --- a/locales/settings/zh-TW.json +++ b/locales/settings/zh-TW.json @@ -152,10 +152,13 @@ "feeds.tableHeaders.name": "名稱", "feeds.tableHeaders.subscriptionCount": "訂閱數", "feeds.tableHeaders.tipAmount": "收到的贊助", - "general.action.summary": "AI 總結", + "general.action.summary.description": "使用 AI 生成條目摘要。", + "general.action.summary.label": "AI 總結", "general.action.title": "自動化操作", - "general.action.translation": "AI 翻譯", + "general.action.translation.description": "將條目翻譯成選定的語言。", + "general.action.translation.label": "AI 翻譯", "general.action_language.default": "預設(介面語言)", + "general.action_language.description": "選擇 AI 操作的語言,例如 AI 總結、AI 翻譯。", "general.action_language.label": "自動化翻譯語言", "general.advanced": "進階", "general.app": "App", @@ -191,7 +194,8 @@ "general.hide_all_read_subscriptions.label": "隱藏列表", "general.hide_private_subscriptions_in_timeline.description": "從你的訂閱列表中隱藏私人訂閱,並從你的時間軸上隱藏它們的條目(無論此設置為何,它們對公眾始終是不可見的)。", "general.hide_private_subscriptions_in_timeline.label": "隱藏私人", - "general.language": "語言", + "general.language.description": "選擇應用程式的顯示語言。", + "general.language.title": "語言", "general.launch_at_login": "登入時啟動", "general.log_file.button": "顯示", "general.log_file.description": "在系統中顯示記錄檔案。", @@ -202,6 +206,7 @@ "general.mark_as_read.render.label": "顯示時標記為已讀", "general.mark_as_read.scroll.description": "當條目捲動離開視圖時自動標記為已讀。", "general.mark_as_read.scroll.label": "捲動時標記為已讀", + "general.mark_as_read.title": "標記為已讀", "general.minimize_to_tray.description": "關閉視窗時最小化到工作列通知區域", "general.minimize_to_tray.label": "最小化到通知區域", "general.network": "網路", @@ -233,7 +238,6 @@ "general.translation_mode.description": "選擇譯文在條目列表中的顯示方式。", "general.translation_mode.label": "翻譯偏好", "general.translation_mode.translation-only": "僅譯文", - "general.unread": "未讀", "general.voices": "聲音", "integration.cubox.autoMemo.description": "當選取文字儲存到 Cubox 時,自動使用備忘模式。", "integration.cubox.autoMemo.label": "自動備忘模式", @@ -447,7 +451,6 @@ "titles.notifications": "通知", "titles.power": "Power", "titles.privacy": "隱私", - "titles.profile": "個人資料", "titles.shortcuts": "快捷鍵", "titles.sign_out": "登出", "wallet.balance.activePoints": "活躍度",