Refactor WebDAV i18n and UI for improved flexibility and localization

- i18n Updates:
   - Refactored WebDAV-related translations into nested JSON structures for better organization.
   - Added support for pluralization in time intervals (minutes and hours) across all locales (en-us, ja-jp, ru-ru, zh-cn, zh-tw).

 - UI Enhancements:
   - Updated `DataSettings` and `WebDavSettings` components to use the new i18n keys for time intervals.
   - Improved the `Select` dropdown for sync intervals with dynamic pluralization based on locale.
   - Adjusted input field widths for better alignment and consistency.

 - Code Cleanup:
   - Removed redundant comments and unused code in `WebDavSettings.tsx`.
   - Simplified button and input styling for a cleaner layout.
This commit is contained in:
lucifer9 2025-02-18 15:55:41 +08:00 committed by 亢奋猫
parent 14680f98e4
commit d2139abcb9
7 changed files with 157 additions and 91 deletions

View File

@ -573,25 +573,29 @@
"empty_database_id": "Database_id is not configured"
},
"title": "Data Settings",
"webdav.autoSync": "Auto Backup",
"webdav.autoSync.off": "Off",
"webdav.backup.button": "Backup to WebDAV",
"webdav.host": "WebDAV Host",
"webdav.host.placeholder": "http://localhost:8080",
"webdav.hours": "Hours",
"webdav.lastSync": "Last Backup",
"webdav.minutes": "Minutes",
"webdav.noSync": "Waiting for next backup",
"webdav.password": "WebDAV Password",
"webdav.path": "WebDAV Path",
"webdav.path.placeholder": "/backup",
"webdav.restore.button": "Restore from WebDAV",
"webdav.restore.content": "Restore from WebDAV will overwrite the current data, continue?",
"webdav.restore.title": "Restore from WebDAV",
"webdav.syncError": "Backup Error",
"webdav.syncStatus": "Backup Status",
"webdav.title": "WebDAV",
"webdav.user": "WebDAV User"
"webdav": {
"autoSync": "Auto Backup",
"autoSync.off": "Off",
"backup.button": "Backup to WebDAV",
"host": "WebDAV Host",
"host.placeholder": "http://localhost:8080",
"minute_interval_one": "{{count}} minute",
"minute_interval_other": "{{count}} minutes",
"hour_interval_one": "{{count}} hour",
"hour_interval_other": "{{count}} hours",
"lastSync": "Last Backup",
"noSync": "Waiting for next backup",
"password": "WebDAV Password",
"path": "WebDAV Path",
"path.placeholder": "/backup",
"restore.button": "Restore from WebDAV",
"restore.content": "Restore from WebDAV will overwrite the current data, continue?",
"restore.title": "Restore from WebDAV",
"syncError": "Backup Error",
"syncStatus": "Backup Status",
"title": "WebDAV",
"user": "WebDAV User"
}
},
"display.custom.css": "Custom CSS",
"display.custom.css.placeholder": "/* Put custom CSS here */",

View File

@ -573,6 +573,29 @@
"empty_database_id": "Database_idが設定されていません"
},
"title": "データ設定",
"webdav": {
"autoSync": "自動バックアップ",
"autoSync.off": "オフ",
"backup.button": "WebDAVにバックアップ",
"host": "WebDAVホスト",
"host.placeholder": "http://localhost:8080",
"minute_interval_one": "{{count}} 分",
"minute_interval_other": "{{count}} 分",
"hour_interval_one": "{{count}} 時間",
"hour_interval_other": "{{count}} 時間",
"lastSync": "最終バックアップ",
"noSync": "次回のバックアップを待機中",
"password": "WebDAVパスワード",
"path": "WebDAVパス",
"path.placeholder": "/backup",
"restore.button": "WebDAVから復元",
"restore.content": "WebDAVから復元すると現在のデータが上書きされます。続行しますか",
"restore.title": "WebDAVから復元",
"syncError": "バックアップエラー",
"syncStatus": "バックアップ状態",
"title": "WebDAV",
"user": "WebDAVユーザー"
},
"webdav.autoSync": "自動バックアップ",
"webdav.autoSync.off": "オフ",
"webdav.backup.button": "WebDAVにバックアップ",
@ -591,7 +614,11 @@
"webdav.syncError": "バックアップエラー",
"webdav.syncStatus": "バックアップ状態",
"webdav.title": "WebDAV",
"webdav.user": "WebDAVユーザー"
"webdav.user": "WebDAVユーザー",
"minute_interval_one": "{{count}} 分",
"minute_interval_other": "{{count}} 分",
"hour_interval_one": "{{count}} 時間",
"hour_interval_other": "{{count}} 時間"
},
"display.custom.css": "カスタムCSS",
"display.custom.css.placeholder": "/* ここにカスタムCSSを入力 */",

View File

@ -573,25 +573,31 @@
"empty_database_id": "Не настроен Database_id"
},
"title": "Настройки данных",
"webdav.autoSync": "Автоматическое резервное копирование",
"webdav.autoSync.off": "Выключено",
"webdav.backup.button": "Резервное копирование на WebDAV",
"webdav.host": "Хост WebDAV",
"webdav.host.placeholder": "http://localhost:8080",
"webdav.hours": "часов",
"webdav.lastSync": "Последняя синхронизация",
"webdav.minutes": "минут",
"webdav.noSync": "Ожидание следующего резервного копирования",
"webdav.password": "Пароль WebDAV",
"webdav.path": "Путь WebDAV",
"webdav.path.placeholder": "/backup",
"webdav.restore.button": "Восстановление с WebDAV",
"webdav.restore.content": "Восстановление с WebDAV перезапишет текущие данные, продолжить?",
"webdav.restore.title": "Восстановление с WebDAV",
"webdav.syncError": "Ошибка резервного копирования",
"webdav.syncStatus": "Статус резервного копирования",
"webdav.title": "WebDAV",
"webdav.user": "Пользователь WebDAV"
"webdav": {
"autoSync": "Автоматическое резервное копирование",
"autoSync.off": "Выключено",
"backup.button": "Резервное копирование на WebDAV",
"host": "Хост WebDAV",
"host.placeholder": "http://localhost:8080",
"minute_interval_one": "{{count}} минута",
"minute_interval_few": "{{count}} минуты",
"minute_interval_many": "{{count}} минут",
"hour_interval_one": "{{count}} час",
"hour_interval_few": "{{count}} часа",
"hour_interval_many": "{{count}} часов",
"lastSync": "Последняя синхронизация",
"noSync": "Ожидание следующего резервного копирования",
"password": "Пароль WebDAV",
"path": "Путь WebDAV",
"path.placeholder": "/backup",
"restore.button": "Восстановление с WebDAV",
"restore.content": "Восстановление с WebDAV перезапишет текущие данные, продолжить?",
"restore.title": "Восстановление с WebDAV",
"syncError": "Ошибка резервного копирования",
"syncStatus": "Статус резервного копирования",
"title": "WebDAV",
"user": "Пользователь WebDAV"
}
},
"display.custom.css": "Пользовательский CSS",
"display.custom.css.placeholder": "/* Здесь введите пользовательский CSS */",

View File

@ -573,25 +573,33 @@
"empty_database_id": "未配置Database_id"
},
"title": "数据设置",
"webdav.autoSync": "自动备份",
"webdav.autoSync.off": "关闭",
"webdav.backup.button": "备份到 WebDAV",
"webdav.host": "WebDAV 地址",
"webdav.host.placeholder": "http://localhost:8080",
"webdav.hours": "小时",
"webdav.lastSync": "上次备份时间",
"webdav.minutes": "分钟",
"webdav.noSync": "等待下次备份",
"webdav.password": "WebDAV 密码",
"webdav.path": "WebDAV 路径",
"webdav.path.placeholder": "/backup",
"webdav.restore.button": "从 WebDAV 恢复",
"webdav.restore.content": "从 WebDAV 恢复将覆盖当前数据,是否继续?",
"webdav.restore.title": "从 WebDAV 恢复",
"webdav.syncError": "备份错误",
"webdav.syncStatus": "备份状态",
"webdav.title": "WebDAV",
"webdav.user": "WebDAV 用户名"
"webdav": {
"autoSync": "自动备份",
"autoSync.off": "关闭",
"backup.button": "备份到 WebDAV",
"host": "WebDAV 地址",
"host.placeholder": "http://localhost:8080",
"minute_interval_one": "{{count}} 分钟",
"minute_interval_other": "{{count}} 分钟",
"hour_interval_one": "{{count}} 小时",
"hour_interval_other": "{{count}} 小时",
"lastSync": "上次备份时间",
"noSync": "等待下次备份",
"password": "WebDAV 密码",
"path": "WebDAV 路径",
"path.placeholder": "/backup",
"restore.button": "从 WebDAV 恢复",
"restore.content": "从 WebDAV 恢复将覆盖当前数据,是否继续?",
"restore.title": "从 WebDAV 恢复",
"syncError": "备份错误",
"syncStatus": "备份状态",
"title": "WebDAV",
"user": "WebDAV 用户名"
},
"minute_interval_one": "{{count}} 分钟",
"minute_interval_other": "{{count}} 分钟",
"hour_interval_one": "{{count}} 小时",
"hour_interval_other": "{{count}} 小时"
},
"display.custom.css": "自定义 CSS",
"display.custom.css.placeholder": "/* 这里写自定义CSS */",

View File

@ -571,27 +571,35 @@
"empty_database_id": "未配置Database_id"
},
"title": "數據設定",
"webdav.autoSync": "自動備份",
"webdav.autoSync.off": "關閉",
"webdav.backup.button": "從 WebDAV 備份",
"webdav.host": "WebDAV 主機位址",
"webdav.host.placeholder": "http://localhost:8080",
"webdav.hours": "小時",
"webdav.lastSync": "上次同步時間",
"webdav.minutes": "分鐘",
"webdav.noSync": "等待下次備份",
"webdav.password": "WebDAV 密碼",
"webdav.path": "WebDAV Path",
"webdav.path.placeholder": "/backup",
"webdav.restore.button": "從 WebDAV 恢復",
"webdav.restore.content": "從 WebDAV 恢復將覆蓋當前資料,是否繼續?",
"webdav.restore.title": "從 WebDAV 恢復",
"webdav.syncError": "備份錯誤",
"webdav.syncStatus": "備份狀態",
"webdav.title": "WebDAV",
"webdav.user": "WebDAV 使用者名稱",
"webdav": {
"autoSync": "自動備份",
"autoSync.off": "關閉",
"backup.button": "備份到 WebDAV",
"host": "WebDAV 主機位址",
"host.placeholder": "http://localhost:8080",
"minute_interval_one": "{{count}} 分鐘",
"minute_interval_other": "{{count}} 分鐘",
"hour_interval_one": "{{count}} 小時",
"hour_interval_other": "{{count}} 小時",
"lastSync": "上次備份時間",
"noSync": "等待下次備份",
"password": "WebDAV 密碼",
"path": "WebDAV 路徑",
"path.placeholder": "/backup",
"restore.button": "從 WebDAV 恢復",
"restore.content": "從 WebDAV 恢復將覆蓋當前資料,是否繼續?",
"restore.title": "從 WebDAV 恢復",
"syncError": "備份錯誤",
"syncStatus": "備份狀態",
"title": "WebDAV",
"user": "WebDAV 使用者名稱"
},
"app_data": "應用數據",
"app_logs": "應用日誌"
"app_logs": "應用日誌",
"minute_interval_one": "{{count}} 分鐘",
"minute_interval_other": "{{count}} 分鐘",
"hour_interval_one": "{{count}} 小時",
"hour_interval_other": "{{count}} 小時"
},
"display.custom.css": "自定義 CSS",
"display.custom.css.placeholder": "/* 這裡寫自定義 CSS */",

View File

@ -87,7 +87,7 @@ const NotionSettings: FC = () => {
value={notionDatabaseID || ''}
onChange={handleNotionDatabaseIdChange}
onBlur={handleNotionDatabaseIdChange}
style={{ width: 315 }}
style={{ width: 250 }}
placeholder={t('settings.data.notion.database_id_placeholder')}
/>
</HStack>
@ -95,7 +95,7 @@ const NotionSettings: FC = () => {
<SettingDivider />
<SettingRow>
<SettingRowTitle>{t('settings.data.notion.api_key')}</SettingRowTitle>
<HStack alignItems="center" gap="5px">
<HStack alignItems="center" gap="5px" style={{ width: 315 }}>
<Input
type="password"
value={notionApiKey || ''}
@ -104,7 +104,7 @@ const NotionSettings: FC = () => {
style={{ width: 250 }}
placeholder={t('settings.data.notion.api_key_placeholder')}
/>
<Button onClick={handleNotionConnectionCheck} style={{ width: 60 }}>
<Button onClick={handleNotionConnectionCheck}>
{t('settings.data.notion.check.button')}
</Button>
</HStack>

View File

@ -163,7 +163,6 @@ const WebDavSettings: FC = () => {
<SettingRow>
<SettingRowTitle>{t('settings.general.backup.title')}</SettingRowTitle>
<HStack gap="5px" justifyContent="space-between">
{/* 添加 在线备份 在线还原 按钮 */}
<Button onClick={onBackup} icon={<SaveOutlined />} loading={backuping}>
{t('settings.data.webdav.backup.button')}
</Button>
@ -178,18 +177,32 @@ const WebDavSettings: FC = () => {
<Select value={syncInterval} onChange={onSyncIntervalChange} disabled={!webdavHost} style={{ width: 120 }}>
<Select.Option value={0}>{t('settings.data.webdav.autoSync.off')}</Select.Option>
<Select.Option value={1}>
1 {i18n.language === 'en-US' ? t('settings.data.webdav.minute') : t('settings.data.webdav.minutes')}
{t('settings.data.webdav.minute_interval', { count: 1 })}
</Select.Option>
<Select.Option value={5}>
{t('settings.data.webdav.minute_interval', { count: 5 })}
</Select.Option>
<Select.Option value={15}>
{t('settings.data.webdav.minute_interval', { count: 15 })}
</Select.Option>
<Select.Option value={30}>
{t('settings.data.webdav.minute_interval', { count: 30 })}
</Select.Option>
<Select.Option value={5}>5 {t('settings.data.webdav.minutes')}</Select.Option>
<Select.Option value={15}>15 {t('settings.data.webdav.minutes')}</Select.Option>
<Select.Option value={30}>30 {t('settings.data.webdav.minutes')}</Select.Option>
<Select.Option value={60}>
1 {i18n.language === 'en-US' ? t('settings.data.webdav.hour') : t('settings.data.webdav.hours')}
{t('settings.data.webdav.hour_interval', { count: 1 })}
</Select.Option>
<Select.Option value={120}>
{t('settings.data.webdav.hour_interval', { count: 2 })}
</Select.Option>
<Select.Option value={360}>
{t('settings.data.webdav.hour_interval', { count: 6 })}
</Select.Option>
<Select.Option value={720}>
{t('settings.data.webdav.hour_interval', { count: 12 })}
</Select.Option>
<Select.Option value={1440}>
{t('settings.data.webdav.hour_interval', { count: 24 })}
</Select.Option>
<Select.Option value={120}>2 {t('settings.data.webdav.hours')}</Select.Option>
<Select.Option value={360}>6 {t('settings.data.webdav.hours')}</Select.Option>
<Select.Option value={720}>12 {t('settings.data.webdav.hours')}</Select.Option>
<Select.Option value={1440}>24 {t('settings.data.webdav.hours')}</Select.Option>
</Select>
</SettingRow>
{webdavSync && syncInterval > 0 && (