feat(frontend): i18n expansion, admin/profile i18n, grid/list view fix, empty state

- Add 5 new locales (hi, ar, ru, ja, ko) — now 14 total
- Admin panel: 117 i18n keys, confirm modal, animated tabs, no inline handlers
- Profile page: 58 i18n keys with data-i18n attributes
- Fix i18n safeT() shadowing bug and translationsLoaded timing
- Fix grid/list view: list header no longer shows in grid mode on login
- Fix classList.toggle hidden sync for view switching across all nav functions
- Revert .hidden important that broke login page rendering
- Add files empty state (no_files + empty_hint) with translations
- Fix language selector dropdown scroll and styling
- Fix admin panel scroll with sticky tabs
This commit is contained in:
Diocrafts
2026-03-09 00:08:34 +01:00
parent f409a9edd7
commit df336da679
43 changed files with 6645 additions and 2043 deletions
+555
View File
@@ -0,0 +1,555 @@
{
"app": {
"title": "OxiCloud",
"description": "ミニマリストクラウドストレージシステム"
},
"nav": {
"files": "ファイル",
"shared": "共有",
"recent": "最近",
"favorites": "お気に入り",
"photos": "写真",
"trash": "ゴミ箱"
},
"photos": {
"empty_state": "写真はまだありません",
"empty_hint": "画像や動画をアップロードするとここに表示されます",
"items_selected": "件選択中",
"view_daily": "日",
"view_monthly": "月",
"view_yearly": "年"
},
"actions": {
"search": "ファイルを検索...",
"new_folder": "新しいフォルダ",
"upload": "アップロード",
"upload_files": "ファイルをアップロード",
"upload_folder": "フォルダをアップロード",
"upload.uploading": "アップロード中...",
"upload.complete": "{count} / {total} アップロード完了",
"rename": "名前を変更",
"move": "移動先...",
"move_to": "移動先",
"delete": "削除",
"download": "ダウンロード",
"view": "表示",
"cancel": "キャンセル",
"confirm": "確認",
"share": "共有",
"favorite": "お気に入りに追加",
"unfavorite": "お気に入りから削除",
"copy": "コピー",
"notify": "通知",
"send": "送信",
"clear_recent": "最近をクリア",
"logout": "ログアウト",
"create": "作成",
"search_btn": "検索",
"close": "閉じる",
"delete_permanently": "完全に削除",
"empty_trash": "ゴミ箱を空にする"
},
"user_menu": {
"appearance": "外観",
"about": "OxiCloudについて",
"about_description": "RustとClean Architectureで構築されたクラウドストレージプラットフォーム。高速・安全・プライベート。",
"admin_panel": "管理パネル",
"profile": "マイプロフィール",
"role_user": "ユーザー"
},
"share": {
"dialogTitle": "共有リンク",
"linkLabel": "共有リンク:",
"copyLink": "コピー",
"permissions": "権限:",
"permissionRead": "読み取り",
"permissionWrite": "書き込み",
"permissionReshare": "再共有",
"password": "パスワード保護:",
"generatePassword": "生成",
"expiration": "有効期限:",
"update": "共有を更新",
"remove": "共有を削除",
"notifyTitle": "通知を送信",
"notifyEmailLabel": "メールアドレス:",
"notifyMessageLabel": "メッセージ(任意):",
"notifySend": "通知を送信",
"shareWithOthers": "他のユーザーと共有",
"sharePublicly": "公開共有",
"shareSettings": "共有設定",
"shareCopied": "リンクがクリップボードにコピーされました",
"shareCreated": "共有リンクが正常に作成されました",
"shareUpdated": "共有設定が正常に更新されました",
"shareRemoved": "共有が正常に削除されました"
},
"share_dialogTitle": "共有リンク",
"share_linkLabel": "共有リンク:",
"share_copyLink": "コピー",
"share_permissions": "権限:",
"share_permissionRead": "読み取り",
"share_permissionWrite": "書き込み",
"share_permissionReshare": "再共有",
"share_password": "パスワード保護:",
"share_generatePassword": "生成",
"share_expiration": "有効期限:",
"share_update": "共有を更新",
"share_remove": "共有を削除",
"share_notifyTitle": "通知を送信",
"share_notifyEmailLabel": "メールアドレス:",
"share_notifyMessageLabel": "メッセージ(任意):",
"share_notifySend": "通知を送信",
"shared": {
"backToFiles": "ファイルに戻る",
"pageTitle": "共有リソース",
"pageDescription": "共有ファイルとフォルダの管理",
"filterType": "種類:",
"filterAll": "すべて",
"filterFiles": "ファイル",
"filterFolders": "フォルダ",
"sortBy": "並び替え:",
"sortByName": "名前",
"sortByDate": "共有日",
"sortByExpiration": "有効期限",
"search": "検索",
"colName": "名前",
"colType": "種類",
"colDateShared": "共有日",
"colExpiration": "有効期限",
"colPermissions": "権限",
"colPassword": "パスワード",
"colActions": "操作",
"emptyStateTitle": "共有リソースはまだありません",
"emptyStateDesc": "ファイルやフォルダを共有すると、ここに表示されます",
"goToFiles": "ファイルへ移動",
"typeFile": "ファイル",
"typeFolder": "フォルダ",
"noExpiration": "期限なし",
"hasPassword": "あり",
"noPassword": "なし",
"editShare": "共有を編集",
"notifyShare": "通知する",
"copyLink": "リンクをコピー",
"removeShare": "共有を削除",
"linkCopied": "リンクがクリップボードにコピーされました!",
"linkCopyFailed": "リンクのコピーに失敗しました",
"itemUpdated": "共有設定が正常に更新されました",
"itemRemoved": "共有が正常に削除されました",
"invalidEmail": "有効なメールアドレスを入力してください",
"notificationSent": "通知が正常に送信されました",
"notificationFailed": "通知の送信に失敗しました",
"shared_backToFiles": "ファイルに戻る",
"shared_pageTitle": "共有リソース",
"shared_pageDescription": "共有ファイルとフォルダの管理",
"shared_filterType": "種類:",
"shared_filterAll": "すべて",
"shared_filterFiles": "ファイル",
"shared_filterFolders": "フォルダ",
"shared_sortBy": "並び替え:",
"shared_sortByName": "名前",
"shared_sortByDate": "共有日",
"shared_sortByExpiration": "有効期限",
"shared_search": "検索",
"shared_colName": "名前",
"shared_colType": "種類",
"shared_colDateShared": "共有日",
"shared_colExpiration": "有効期限",
"shared_colPermissions": "権限",
"shared_colPassword": "パスワード",
"shared_colActions": "操作",
"shared_emptyStateTitle": "共有リソースはまだありません",
"shared_emptyStateDesc": "ファイルやフォルダを共有すると、ここに表示されます",
"shared_goToFiles": "ファイルへ移動",
"shared_typeFile": "ファイル",
"shared_typeFolder": "フォルダ",
"shared_noExpiration": "期限なし",
"shared_hasPassword": "あり",
"shared_noPassword": "なし",
"shared_editShare": "共有を編集",
"shared_notifyShare": "通知する",
"shared_copyLink": "リンクをコピー",
"shared_removeShare": "共有を削除",
"shared_linkCopied": "リンクがクリップボードにコピーされました!",
"shared_linkCopyFailed": "リンクのコピーに失敗しました",
"shared_itemUpdated": "共有設定が正常に更新されました",
"shared_itemRemoved": "共有が正常に削除されました",
"shared_invalidEmail": "有効なメールアドレスを入力してください",
"shared_notificationSent": "通知が正常に送信されました",
"shared_notificationFailed": "通知の送信に失敗しました"
},
"files": {
"name": "名前",
"type": "種類",
"size": "サイズ",
"modified": "更新日",
"no_files": "このフォルダにファイルはありません",
"empty_hint": "ファイルをアップロードするかフォルダを作成して始めましょう",
"loading": "ファイルを読み込み中…",
"view_grid": "グリッド表示",
"view_list": "リスト表示",
"file_types": {
"document": "ドキュメント",
"image": "画像",
"video": "動画",
"audio": "音声",
"pdf": "PDF",
"text": "テキスト",
"folder": "フォルダ",
"spreadsheet": "スプレッドシート",
"presentation": "プレゼンテーション",
"archive": "アーカイブ",
"installer": "インストーラー",
"code": "コード"
}
},
"dialogs": {
"rename_folder": "フォルダ名を変更",
"rename_file": "ファイル名を変更",
"new_name": "新しい名前",
"new_folder_title": "新しいフォルダ",
"folder_name": "フォルダ名",
"folder_placeholder": "マイフォルダ",
"rename_title": "名前を変更",
"move_file": "ファイルを移動",
"move_folder": "フォルダを移動",
"select_destination": "移動先フォルダを選択:",
"select_this_folder": "このフォルダを選択",
"go_to_parent": ".. (親フォルダ)",
"no_subfolders": "サブフォルダなし",
"root": "ルート",
"delete_confirmation": "本当に削除しますか",
"and_contents": "およびすべての内容",
"no_undo": "この操作は元に戻せません",
"confirm_title": "操作の確認",
"confirm_delete": "ゴミ箱に移動",
"confirm_delete_file": "ファイル「{{name}}」をゴミ箱に移動しますか?",
"confirm_delete_folder": "フォルダ「{{name}}」とそのすべての内容をゴミ箱に移動しますか?",
"confirm_permanent_delete": "完全に削除",
"confirm_permanent_delete_msg": "このアイテムを完全に削除しますか?この操作は元に戻せません。",
"confirm_empty_trash": "ゴミ箱を空にする",
"confirm_delete_share": "共有リンクを削除",
"confirm_delete_share_msg": "この共有リンクを削除しますか?",
"share_file": "ファイルを共有",
"existing_shares": "既存の共有",
"share_options": "共有オプション",
"password": "パスワード",
"expiration": "有効期限",
"permissions": "権限",
"generated_link": "生成されたリンク",
"notify": "通知を送信",
"recipient": "宛先",
"message": "メッセージ"
},
"dropzone": {
"drag_files": "ファイルをここにドラッグするか、クリックして選択",
"drop_files": "ファイルをドロップしてアップロード"
},
"permissions": {
"read": "読み取り",
"write": "書き込み",
"reshare": "再共有"
},
"errors": {
"file_not_found": "ファイルが見つかりません",
"folder_not_found": "フォルダが見つかりません",
"delete_error": "削除エラー",
"upload_error": "ファイルのアップロードエラー",
"rename_error": "名前変更エラー",
"move_error": "移動エラー",
"empty_name": "名前を空にすることはできません",
"name_exists": "同じ名前のファイルまたはフォルダが既に存在します",
"generic_error": "エラーが発生しました"
},
"breadcrumb": {
"home": "ホーム"
},
"trash": {
"empty_trash": "ゴミ箱を空にする",
"empty_state": "ゴミ箱は空です",
"original_location": "元の場所",
"deleted_date": "削除日",
"actions": "操作",
"restore": "復元",
"delete_permanently": "完全に削除",
"empty_confirm": "ゴミ箱を空にしますか?すべてのアイテムが完全に削除されます。"
},
"auth": {
"login_title": "サインイン",
"username": "ユーザー名",
"username_placeholder": "ユーザー名を入力",
"password": "パスワード",
"password_placeholder": "パスワードを入力",
"login_button": "サインイン",
"no_account": "アカウントをお持ちでないですか?",
"register": "登録",
"admin_setup": "初回ですか?",
"setup": "管理者をセットアップ",
"register_title": "アカウント作成",
"email": "メール",
"email_placeholder": "メールアドレスを入力",
"confirm_password": "パスワードの確認",
"confirm_password_placeholder": "パスワードを再入力",
"register_button": "アカウント作成",
"have_account": "既にアカウントをお持ちですか?",
"login": "サインイン",
"setup_title": "初期設定",
"setup_step1": "管理者",
"setup_step2": "システム",
"setup_step3": "完了",
"admin_username": "管理者ユーザー名",
"admin_email": "管理者メール",
"admin_password": "管理者パスワード",
"create_admin": "管理者を作成",
"back_to_login": "設定済みですか?",
"admin_success": "管理者アカウントが正常に作成されました!サインインできます。",
"account_success": "アカウントが正常に作成されました!サインインできます。",
"passwords_mismatch": "パスワードが一致しません",
"admin_create_error": "管理者アカウントの作成エラー",
"or": "または",
"sso_login": "SSOでサインイン",
"sso_login_provider": "{{provider}}でサインイン"
},
"storage": {
"title": "ストレージ",
"calculating": "計算中...",
"used": "{{percentage}}% 使用中 ({{used}} / {{total}})"
},
"viewer": {
"unsupported_file": "このファイル形式はプレビューできません。",
"download_file": "ファイルをダウンロード",
"zoom_in": "拡大",
"zoom_out": "縮小",
"zoom_reset": "ズームリセット"
},
"language_selector": {
"title": "ようこそ!",
"subtitle": "続行するには言語を選択してください",
"continue": "続行",
"languages": {
"en": "English",
"es": "Español",
"zh": "中文",
"fa": "فارسی",
"fr": "Français",
"de": "Deutsch",
"pt": "Português",
"ja": "日本語"
}
},
"favorites": {
"empty_state": "お気に入りはまだありません",
"empty_hint": "ファイルやフォルダにスターを付けてお気に入りに追加",
"add": "お気に入りに追加",
"remove": "お気に入りから削除",
"added_title": "お気に入りに追加しました",
"added_msg": "お気に入りに追加しました",
"removed_title": "お気に入りから削除しました",
"removed_msg": "お気に入りから削除しました"
},
"recent": {
"title": "最近",
"clear": "最近をクリア",
"accessed": "アクセス日",
"empty_state": "最近のファイルはありません",
"empty_hint": "開いたファイルがここに表示されます"
},
"notifications": {
"file_renamed": "ファイル名を変更しました",
"file_renamed_to": "ファイル名を「{{name}}」に変更しました",
"folder_renamed": "フォルダ名を変更しました",
"folder_renamed_to": "フォルダ名を「{{name}}」に変更しました",
"file_uploaded": "ファイルをアップロードしました",
"file_deleted": "ファイルをゴミ箱に移動しました",
"folder_deleted": "フォルダをゴミ箱に移動しました",
"item_deleted_permanently": "アイテムを完全に削除しました",
"trash_emptied": "ゴミ箱を正常に空にしました",
"title": "通知",
"empty": "通知はありません"
},
"batch": {
"one_selected": "1件選択中",
"n_selected": "{{count}}件選択中",
"confirm_delete": "{{count}}件のアイテムをゴミ箱に移動しますか?",
"move_title": "{{count}}件のアイテムを移動",
"add_favorites": "お気に入りに追加",
"move_copy": "移動またはコピー"
},
"admin": {
"page_title": "管理パネル",
"back_to_app": "OxiCloudに戻る",
"loading": "読み込み中…",
"access_denied": "アクセス拒否",
"access_denied_desc": "管理者権限が必要です。",
"sign_in": "サインイン",
"tab_dashboard": "ダッシュボード",
"tab_users": "ユーザー",
"tab_oidc": "SSO / OIDC",
"total_users": "総ユーザー数",
"active_users": "アクティブ",
"admins": "管理者",
"version": "バージョン",
"storage_overview": "ストレージ概要",
"used": "使用済み",
"total_quota": "合計クォータ",
"usage_pct": "使用率",
"users_over_80": "クォータ80%超",
"users_over_quota": "クォータ超過",
"system": "システム",
"auth_label": "認証",
"oidc_label": "OIDC",
"quotas_label": "クォータ",
"enabled": "有効",
"disabled": "無効",
"active": "アクティブ",
"off": "オフ",
"allow_registration": "公開セルフ登録を許可",
"registration_warning": "公開登録は無効です。管理者のみがユーザーを作成できます。",
"user_management": "ユーザー管理",
"create_user": "ユーザー作成",
"col_user": "ユーザー",
"col_role": "役割",
"col_auth": "認証",
"col_status": "ステータス",
"col_storage": "ストレージ",
"col_last_login": "最終ログイン",
"col_actions": "操作",
"loading_users": "ユーザーを読み込み中…",
"failed_load_users": "読み込み失敗",
"no_users_found": "ユーザーなし",
"showing_users": "{{from}}-{{to}} / {{total}} を表示",
"prev": "前へ",
"next": "次へ",
"inactive": "非アクティブ",
"you_badge": "(あなた)",
"local": "ローカル",
"never": "未ログイン",
"just_now": "たった今",
"minutes_ago": "{{n}}分前",
"hours_ago": "{{n}}時間前",
"days_ago": "{{n}}日前",
"edit_quota_title": "クォータを編集",
"reset_password_title": "パスワードリセット",
"toggle_role_title": "役割を切替",
"deactivate_title": "無効化",
"activate_title": "有効化",
"delete_title": "削除",
"sso_title": "シングルサインオン (OIDC / SSO)",
"enable_sso": "SSO認証を有効化",
"provider_name": "プロバイダー名",
"issuer_url": "発行者URL",
"issuer_url_hint": "OpenID Connect発行者URL",
"auto_discover": "自動検出",
"discovering": "検出中…",
"client_id": "クライアントID",
"client_secret": "クライアントシークレット",
"client_secret_placeholder": "現在の値を維持するには空に",
"secret_configured": "クライアントシークレット設定済み",
"callback_url": "コールバックURL",
"callback_url_hint": "(IdPに登録)",
"advanced_settings": "詳細設定",
"scopes": "スコープ",
"auto_provision": "初回ログイン時に自動プロビジョニング",
"admin_groups": "管理者グループ",
"admin_groups_hint": "カンマ区切りのOIDCグループ名",
"disable_password": "パスワードログイン無効化(OIDCのみ)",
"password_warning": "すべてのパスワードログインが無効に!",
"test_btn": "テスト",
"save_btn": "保存",
"saving": "保存中…",
"settings_saved": "設定が保存されました — OIDC: {{status}}",
"quota_modal_title": "ストレージクォータ更新",
"quota_user_label": "ユーザー:",
"new_quota": "新しいクォータ",
"quota_unlimited_hint": "0で無制限",
"cancel": "キャンセル",
"create_user_title": "新規ユーザー作成",
"username_label": "ユーザー名",
"username_placeholder": "taro",
"username_hint": "3〜32文字",
"password_label": "パスワード",
"password_placeholder": "8文字以上",
"email_label": "メール",
"email_optional": "(任意)",
"email_placeholder": "user@example.com(空なら自動生成)",
"role_label": "役割",
"role_user": "ユーザー",
"role_admin": "管理者",
"quota_label": "クォータ",
"creating": "作成中…",
"reset_pw_title": "パスワードリセット",
"new_password_label": "新しいパスワード",
"resetting": "リセット中…",
"reset_btn": "リセット",
"confirm_role_change": "役割を{{role}}に変更?",
"confirm_deactivate": "このユーザーを無効化しますか?",
"confirm_activate": "このユーザーを有効化しますか?",
"confirm_delete_user": "ユーザー「{{name}}」を削除?取り消せません!",
"confirm_action": "操作の確認",
"confirm_yes": "確認",
"confirm_no": "キャンセル",
"error_username_short": "ユーザー名は3文字以上",
"error_password_short": "パスワードは8文字以上",
"error_generic": "失敗",
"error_network": "ネットワークエラー: {{message}}",
"error_create_user": "ユーザー作成失敗"
},
"profile": {
"page_title": "プロフィール",
"back_to_app": "OxiCloudに戻る",
"loading": "読み込み中…",
"not_authenticated": "未認証",
"not_authenticated_desc": "プロフィールを表示するにはサインインしてください。",
"sign_in": "サインイン",
"role_admin": "管理者",
"role_user": "ユーザー",
"account_details": "アカウント詳細",
"username": "ユーザー名",
"email": "メール",
"role": "役割",
"last_login": "最終ログイン",
"storage": "ストレージ",
"used": "使用済み",
"quota": "クォータ",
"usage": "使用率",
"unlimited": "無制限",
"app_passwords": "アプリパスワード",
"app_pw_desc": "WebDAV、CalDAV、CardDAVクライアント用のパスワードを生成します。各パスワードは一度だけ表示されます。",
"app_pw_label_placeholder": "ラベル(例:Thunderbird、macOS)",
"generate": "生成",
"generating": "生成中…",
"new_password_for": "新しいパスワード:",
"copy_warning": "このパスワードを今コピーしてください。再度表示できません。",
"copy_to_clipboard": "クリップボードにコピー",
"col_label": "ラベル",
"col_created": "作成日",
"col_last_used": "最終使用",
"col_status": "ステータス",
"active": "アクティブ",
"revoked": "失効済み",
"revoke_title": "失効",
"no_app_passwords": "アプリパスワードはまだありません。",
"client_sessions": "クライアントセッション",
"client_sessions_desc": "Nextcloud互換クライアント接続時に自動生成されます。",
"col_client": "クライアント",
"never": "未ログイン",
"just_now": "たった今",
"minutes_ago": "{{n}}分前",
"hours_ago": "{{n}}時間前",
"days_ago": "{{n}}日前",
"change_password": "パスワード変更",
"current_password": "現在のパスワード",
"new_password": "新しいパスワード",
"min_8_chars": "8文字以上",
"confirm_password": "新しいパスワードの確認",
"update_password": "パスワードを更新",
"updating": "更新中…",
"password_updated": "パスワードが正常に更新されました",
"passwords_no_match": "パスワードが一致しません",
"password_too_short": "パスワードは8文字以上必要です",
"password_change_failed": "パスワードの変更に失敗しました",
"error_network": "ネットワークエラー: {{message}}",
"error_label_required": "ラベルを入力してください",
"error_create_pw": "アプリパスワードの作成に失敗しました",
"confirm_revoke": "アプリパスワード「{{label}}」を失効させますか?使用中のクライアントは動作しなくなります。",
"error_revoke": "失効に失敗しました"
}
}