aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js393
1 files changed, 393 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
new file mode 100644
index 0000000..f9fd5ac
--- /dev/null
+++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/ja.js
@@ -0,0 +1,393 @@
+/**
+ * Japanese — translated from locales/en.js.
+ *
+ * Register: formal — です・ます throughout, with 丁寧語 for instructions.
+ * `hub`, `node` and `GEK` are left in English: they name the CLI
+ * (`meshbay-node`), node.toml and the docs, which are English throughout.
+ * Japanese has a single plural category, so counted strings need only `other`.
+ */
+
+export default {
+ // Nav
+ 'nav.toggle_menu': 'メニューを表示',
+ 'nav.light_mode': 'ライトテーマ',
+ 'nav.dark_mode': 'ダークテーマ',
+ 'nav.logout': 'ログアウト',
+ 'nav.login': 'ログイン',
+
+ // Sidebar
+ 'sidebar.my_groups': 'マイグループ',
+ 'sidebar.no_groups': 'グループはまだありません',
+ 'sidebar.discover': '見つける',
+ 'sidebar.public_groups': '公開グループ',
+
+ // Login
+ 'login.title': 'ログイン',
+ 'login.username': 'ユーザー名',
+ 'login.password': 'パスワード',
+ 'login.submit': 'ログイン',
+ 'login.loading': 'ログインしています…',
+ 'login.no_account': 'アカウントをお持ちでないですか?',
+ 'login.register_link': 'アカウントを作成',
+
+ // Register
+ 'register.title': 'アカウントを作成',
+ 'register.username': 'ユーザー名',
+ 'register.email': 'メールアドレス',
+ 'register.password': 'パスフレーズ(12 文字以上)',
+ 'register.confirm': 'パスワードの確認',
+ 'register.submit': 'アカウントを作成',
+ 'register.loading': 'アカウントを作成しています…',
+ 'register.has_account': 'すでにアカウントをお持ちですか?',
+ 'register.login_link': 'ログイン',
+ 'register.success_title': 'アカウントを作成しました',
+ 'register.success_msg': 'ご自身の資格情報でログインできるようになりました。',
+ 'register.go_login': 'ログインへ進む',
+ 'register.err_mismatch': 'パスワードが一致しません',
+ 'register.err_min_len': {
+ other: '{n} 文字以上でご入力ください',
+ },
+ 'register.err_too_weak': '推測されやすすぎます。パスフレーズは、鍵が保管されている場所で'
+ + 'その鍵を守るものです。互いに関係のない単語をいくつか並べると効果的です。',
+ 'register.strength': '強度:約 {bits} ビット。参加している各 node に保管される鍵の'
+ + 'コピーを守るものですので、しっかり決めておく価値があります。',
+
+ // Home
+ 'home.welcome': 'MeshBay へようこそ',
+ 'home.no_groups': 'まだどのグループにも参加していません。',
+ 'home.browse_prefix': '',
+ 'home.browse_link': '公開グループ',
+ 'home.browse_suffix': 'を見てみるか、グループ管理者に招待を依頼してください。',
+ 'home.my_groups': 'マイグループ',
+
+ // Explore
+ 'explore.title': '公開グループ',
+ 'explore.search': 'グループを検索…',
+ 'explore.loading': '読み込んでいます…',
+ 'explore.empty': '利用できる公開グループはありません。',
+ 'explore.create_group': 'グループを作成',
+ 'explore.join': '参加',
+ 'explore.member': '参加済み',
+
+ // Group page
+ 'group.default_name': 'グループ',
+ 'group.tab_files': 'ファイル',
+ 'group.tab_chat': 'チャット',
+ 'group.tab_members': 'メンバー',
+ 'group.filter': 'ファイルを絞り込み…',
+ 'group.col_name': '名前',
+ 'group.col_size': 'サイズ',
+ 'group.col_type': '種類',
+ 'group.col_date': '日付',
+ 'group.empty_filter': '条件に一致するファイルはありません',
+ 'group.empty_dir': 'このフォルダーは空です',
+ 'group.download': 'ダウンロード',
+ 'group.play': '再生',
+ 'group.offline_title': 'このグループのために稼働している node は現在ありません。',
+ 'group.offline_hint': 'このグループをホストしている node が接続すると、'
+ + 'ファイルが表示されます。',
+ 'group.upload': 'アップロード',
+ 'group.mkdir': '新しいフォルダー',
+ 'group.mkdir_prompt': '新しいフォルダーの名前:',
+ 'group.view': '表示',
+ 'group.delete': '削除',
+ 'group.delete_confirm': '{name} を削除しますか?',
+ 'group.delete_group': 'グループを削除',
+ 'group.delete_group_confirm': '「{name}」を完全に削除し、すべてのメンバーを'
+ + '解除しますか?node 上のファイルは保持されます。',
+ 'group.err_transport': 'トランスポートモジュールが読み込まれていません',
+
+ // Status
+ 'status.idle': '待機中',
+ 'status.discovering': 'node を探しています…',
+ 'status.connecting': 'WebRTC で接続しています…',
+ 'status.fetching': 'インデックスを取得しています…',
+ 'status.files': {
+ other: '{n} 個のファイル',
+ },
+ 'status.offline': 'オンラインの node はありません',
+ 'status.error': '接続に失敗しました',
+
+ // Chat
+ 'chat.empty': 'まだメッセージはありません。会話を始めましょう。',
+ 'chat.placeholder': 'メッセージを入力…',
+ 'chat.send': '送信',
+ 'chat.attach': 'ファイルを添付',
+
+ // Video player
+ 'video.loading': '{name} を読み込んでいます…',
+ 'video.buffering': 'バッファリング中…',
+ 'video.close': '閉じる(Esc)',
+ 'preview.pdf_fallback': 'このブラウザーはページ内に PDF を表示しません。'
+ + 'ダウンロードしてご覧ください。いずれにせよ復号はここで行われています。',
+ 'group.upload_indexing': 'インデックスを作成中…',
+ 'video.err_transport': 'トランスポートが接続されていません',
+ 'video.err_mse': 'ストリーミング再生に対応していないコーデックです:{codec}',
+
+ // Settings
+ 'settings.title': '設定',
+ 'settings.coming_soon': '近日公開。',
+ 'settings.downloads': 'ダウンロード',
+ 'settings.dl_auto': '自動的に保存する',
+ 'settings.dl_auto_hint': 'ファイルはダイアログなしで、下で選んだフォルダーに'
+ + 'そのまま保存されます。20 個ダウンロードすれば、そこに 20 個並びます。',
+ 'settings.dl_ask': '毎回確認する',
+ 'settings.dl_ask_hint': 'ファイルごとに「名前を付けて保存」ダイアログが開きます。'
+ + 'まとめてダウンロードする場合も 1 ファイルにつき 1 回です。',
+ 'settings.dl_folder': 'フォルダー:{name}',
+ 'settings.dl_no_folder': 'フォルダーが選ばれていません。ダウンロードは'
+ + 'ブラウザーが決めた場所に保存されます',
+ 'settings.dl_choose': 'フォルダーを選択',
+ 'settings.dl_change': '変更',
+ 'settings.dl_forget': '解除',
+ 'settings.dl_path_note': 'ウェブページにパスを指定することはできないため、'
+ + 'ここに入力するものはありません。お選びになったフォルダーへのアクセスは'
+ + 'ブラウザーが許可し、MeshBay はその中にしか書き込みません。'
+ + 'セッションごとに 1 回、確認を求められることがあります。',
+ 'settings.dl_unsupported': 'このブラウザーはお好きなフォルダーへの書き込みに'
+ + '対応していないため(File System Access API がありません)、'
+ + 'ダウンロードはブラウザー自身のダウンロードフォルダーに保存されます。'
+ + 'Chrome と Edge では選択できます。',
+ 'settings.profile': 'プロフィール',
+ 'settings.username': 'ユーザー名',
+ 'settings.node_pins': 'node の識別情報',
+ 'settings.node_pins_hint': '各 node の識別鍵は、最初に接続したときに記憶されます。'
+ + 'それが変わった場合、接続は拒否されます。これが起こるのは、運営者が node を'
+ + '再インストールしたときだけのはずです。消去する前に運営者にご確認ください。',
+ 'settings.node_pins_count': {
+ other: '{n} 件を固定中',
+ },
+ 'settings.node_pins_clear': '固定した識別情報を消去',
+ 'settings.danger': 'アカウントを削除',
+ 'settings.delete_hint': 'hub から、お客様のアカウント、グループへの参加、通知を'
+ + '削除し、ユーザー名を解放します。node 上にあるものには及びません。'
+ + 'アップロードしたファイルは、その運営者が保管する場所に残り、'
+ + '各 node はお客様のために固定した識別情報を、運営者が解除するまで保持します。'
+ + '接続ログは法令に従い 1 年間保管されます。',
+ 'settings.delete_account': 'アカウントを削除する',
+ 'settings.delete_confirm': '確認のためパスフレーズをご入力ください。'
+ + 'この操作は取り消せません。',
+ 'settings.delete_confirm_btn': '完全に削除する',
+ 'settings.cancel': 'キャンセル',
+ 'settings.appearance': '外観',
+ 'settings.theme': 'テーマ',
+ 'settings.theme_light': 'ライト',
+ 'settings.theme_dark': 'ダーク',
+ 'settings.theme_system': 'システムに合わせる',
+ 'settings.language': '言語',
+ 'settings.about': 'このアプリについて',
+ 'settings.version': 'バージョン',
+ 'settings.protocol': 'プロトコル',
+ 'settings.role': '権限',
+ 'settings.groups': 'グループの通知',
+ 'settings.notifications': '通知',
+ 'settings.node_key': 'node を連携',
+ 'settings.node_key_desc': 'MeshBay の node を運営している場合は、その Ed25519 '
+ + '公開鍵をここに貼り付けて、アカウントに連携してください。'
+ + 'この鍵は node の管理ダッシュボードで確認できます。',
+ 'settings.node_key_placeholder': 'node の Ed25519 公開鍵を貼り付け(base64)',
+ 'settings.node_key_submit': 'node を連携',
+ 'settings.node_key_success': 'node を連携しました',
+ 'settings.node_key_current': '連携済みの node 鍵',
+
+ // Sidebar
+ 'sidebar.create_group': 'グループを作成',
+ 'sidebar.settings': '設定',
+ 'sidebar.admin': '管理',
+
+ // User menu
+ 'usermenu.language': '言語',
+ 'usermenu.settings': '設定',
+ 'usermenu.theme_light': 'ライトテーマ',
+ 'usermenu.theme_dark': 'ダークテーマ',
+ 'usermenu.logout': 'ログアウト',
+
+ // Admin panel
+ 'admin.title': '管理',
+ 'admin.tab_stats': '統計',
+ 'admin.tab_users': 'ユーザー',
+ 'admin.tab_groups': 'グループ',
+ 'admin.tab_nodes': 'node',
+ 'admin.tab_logs': 'ログ',
+ 'admin.col_observed_ip': '接続元',
+ 'admin.col_hint': '申告されたアドレス',
+ 'admin.col_last_seen': '最終通知',
+ 'admin.node_online': 'オンライン',
+ 'admin.node_offline': 'オフライン',
+ 'admin.no_nodes': '登録された node はありません',
+ 'admin.nodes_hint': '「接続元」は、node の鍵で署名されたリクエストとして'
+ + '通知が実際に届いたアドレスです。照会に答える際はこちらを用いてください。'
+ + '申告されたアドレスは、node が STUN サーバーから知り得た「自分のアドレス」として'
+ + '送ってきたものです。node に到達するには役立ちますが、何かの証拠にはなりません。',
+ 'admin.tab_blocklist': 'ブロックリスト',
+
+ // Admin stats
+ 'admin.stat_users': 'ユーザー',
+ 'admin.stat_groups': 'グループ',
+ 'admin.stat_nodes': 'node',
+ 'admin.stat_online': 'オンラインの node',
+
+ // Admin users
+ 'admin.users_search': 'ユーザーを検索…',
+ 'admin.col_username': 'ユーザー名',
+ 'admin.col_role': '権限',
+ 'admin.col_status': '状態',
+ 'admin.col_created': '作成日',
+ 'admin.col_actions': '操作',
+ 'admin.col_email': 'メールアドレス',
+ 'admin.col_groups': 'グループ',
+ 'admin.no_users': 'ユーザーが見つかりません',
+ 'admin.btn_suspend': '停止',
+ 'admin.btn_unsuspend': '再開',
+ 'admin.btn_details': '詳細',
+ 'admin.btn_delete': '削除',
+ 'admin.delete_confirm': 'アカウント「{user}」を削除しますか?この操作は取り消せません。'
+ + 'このユーザーがアップロードしたファイルは、それをホストする node に残り、'
+ + '各 node は固定した識別情報を、その運営者が解除するまで保持します。'
+ + '停止であれば元に戻せます。',
+ 'admin.user_detail': 'ユーザーの詳細',
+ 'admin.btn_close': '閉じる',
+ 'admin.self_note': '(ご自身)',
+
+ // Admin groups
+ 'admin.col_name': '名前',
+ 'admin.col_visibility': '公開範囲',
+ 'admin.col_members': 'メンバー',
+ 'admin.no_groups': 'グループが見つかりません',
+
+ // Admin logs
+ 'admin.col_time': '時刻',
+ 'admin.col_event': 'イベント',
+ 'admin.col_user': 'ユーザー',
+ 'admin.col_ip': 'IP',
+ 'admin.col_detail': '詳細',
+ 'admin.filter_all': 'すべてのイベント',
+ 'admin.no_logs': 'ログが見つかりません',
+ 'admin.btn_load_more': 'さらに読み込む',
+
+ // Admin blocklist
+ 'admin.col_hash': 'ハッシュ',
+ 'admin.col_reason': '理由',
+ 'admin.col_date': '日付',
+ 'admin.col_added_by': '追加者',
+ 'admin.no_blocked': 'ブロック中のハッシュはありません',
+ 'admin.add_hash': 'ハッシュをブロックリストに追加',
+ 'admin.hash_placeholder': 'blake3 ハッシュ(16 進数 64 文字)',
+ 'admin.reason_placeholder': '理由',
+ 'admin.btn_block': 'ブロック',
+ 'admin.btn_unblock': 'ブロック解除',
+
+ // Notifications
+ // Create group
+ 'create_group.title': 'グループを作成',
+ 'create_group.name': 'グループ名',
+ 'create_group.name_placeholder': '例:家族の写真、プロジェクトの資料…',
+ 'create_group.visibility': '公開範囲',
+ 'create_group.private': '非公開',
+ 'create_group.private_desc': '招待されたメンバーだけがファイルを見て利用できます',
+ 'create_group.public': '公開',
+ 'create_group.public_desc': '誰でもこのグループを見つけて閲覧できます',
+ 'create_group.join_policy': '参加方法',
+ 'create_group.invite': '招待制',
+ 'create_group.invite_desc': 'メンバーは管理者から招待される必要があります',
+ 'create_group.open': 'オープン(誰でも参加できます)',
+ 'create_group.open_desc': '承認なしで誰でも参加できます',
+ 'create_group.description': '説明',
+ 'create_group.description_hint': 'どんなグループですか?(任意)',
+ 'create_group.submit': '作成',
+ 'create_group.hint': 'グループにはファイルをホストする node が必要です。'
+ + '先にグループを作成し、あとから node を接続することもできます。',
+ 'create_group.creating': '作成しています…',
+
+ // Members
+ 'members.col_role': '権限',
+ 'members.group_role': 'グループ内の権限',
+ 'members.admin': '管理者',
+ 'members.group_admin': 'グループ管理者',
+ 'members.owner': '所有者',
+ 'members.member': 'メンバー',
+ 'members.invite_title': 'メンバーを招待',
+ 'members.username_placeholder': 'ユーザー名',
+ 'members.invite_btn': '招待',
+ 'members.invite_needs_pairing': '招待は、この node がお使いのブラウザー用に'
+ + '固定した鍵で署名されます。どなたかを招待する前に、下でペアリングしてください。',
+ 'members.invite_ask_operator': '招待できるのは、このグループをホストしている '
+ + 'node の運営者だけで、その node とペアリング済みのブラウザーからに限られます。',
+ 'members.remove': '解除',
+ 'members.remove_confirm': '{user} をこのグループから外しますか?'
+ + 'そのアカウント、ほかのグループ、アップロード済みのファイルには影響しません。',
+ 'members.remove_hint': 'メンバーを外すと参加資格がなくなり、node はその人に'
+ + 'グループ鍵を渡さなくなります。アカウントが削除されるわけではなく、'
+ + 'すでに渡っている鍵を取り戻すこともできません。それが重要であれば、'
+ + 'node 上で鍵をローテーションしてください(meshbay-node gek-init)。',
+ 'members.pair_title': 'このブラウザーを node とペアリング',
+ 'members.pair_hint': 'node が運営者としての操作(招待、ファイルの削除)を受け付けるのは、'
+ + 'ペアリング済みのブラウザーからだけです。node で '
+ + '`meshbay-node operator pair` を実行し、表示されたコードをここに入力してください。'
+ + 'このコードが hub を経由することはありません。',
+ 'members.pair_btn': 'ペアリング',
+ 'members.pair_success': 'このブラウザーは node とペアリングされました。',
+ 'members.invite_code_ready': '{user} 宛ての招待コードです。'
+ + 'いつもの連絡手段でお送りください。使えるのは 1 回だけで、hub を経由することはありません。',
+ 'members.invite_code_hint': '相手がこのグループを初めて開いたときに入力します。'
+ + 'そのときお客様がオンラインである必要はありません。',
+ 'transfers.title': '転送',
+ 'transfers.clear': '完了分を消去',
+ 'transfers.cancel': 'キャンセル',
+ 'transfers.open': '開く',
+ 'transfers.done': '完了',
+ 'transfers.cancelled': 'キャンセル済み',
+ 'transfers.failed': '失敗',
+ 'group.select': '選択',
+ 'group.select_done': '完了',
+ 'group.actions': '操作({n})',
+ 'group.download_n': 'ダウンロード({n})',
+ 'group.download_zip_n': 'フォルダーを zip でダウンロード({n})',
+ 'group.delete_n': '削除({n})',
+ 'group.delete_n_confirm': {
+ other: '{n} 件を削除しますか?{names}',
+ },
+ 'group.download_zip': {
+ other: 'zip でダウンロード({n} 個のファイル)',
+ },
+ 'group.zip_empty': 'そのフォルダーにダウンロードできるものはありません。',
+ 'group.zip_no_stream': 'このブラウザーはダウンロードをディスクへ直接書き込めないため、'
+ + '{name}({size})をいったんメモリー上で組み立てる必要があります。'
+ + '大きなアーカイブでは失敗することがあります。続けますか?',
+ 'group.rmdir': 'フォルダーを削除',
+ 'group.rmdir_confirm': 'フォルダー「{name}」を削除しますか?空である必要があります。',
+ 'group.rmdir_not_empty': 'そのフォルダーは空ではありません。先に中身を削除してください。'
+ + 'ここでの操作が、目に見えないファイルを消すことはありません。',
+ 'group.desc_edit': '説明を編集',
+ 'group.desc_add': '説明を追加',
+ 'group.desc_save': '保存',
+ 'group.desc_cancel': 'キャンセル',
+ 'group.desc_placeholder': 'このグループの目的。メンバーのホーム画面に表示されます。',
+ 'group.join_code_title': 'この node がお客様を認識する必要があります',
+ 'group.join_code_hint': '招待してくれた方にワンタイムコードを聞いて、ここに入力してください。'
+ + 'それ以降このブラウザーは認識され、再び尋ねられることはありません。',
+ 'group.join_code_btn': '参加',
+
+ 'notif.purge': 'すべて消去',
+ 'notif.title': '通知',
+ 'notif.empty': '通知はありません',
+ 'notif.mark_all_read': 'すべて既読にする',
+
+ // Sidebar
+ 'sidebar.search': 'ファイルを検索',
+
+ // Status
+
+ // Search
+ 'search.title': 'ファイルを検索',
+ 'search.placeholder': 'すべてのグループから検索…',
+ 'search.no_results': '検索条件に一致するファイルはありません。',
+ 'search.synced': '{ago}に同期',
+ 'search.cache_note': '検索は、各グループを最後に開いたときの状態を参照します。'
+ + 'グループを開くと、そのファイルがここで最新になります。',
+ 'search.col_group': 'グループ',
+ 'search.result_count': {
+ other: '{n} 個のファイルが見つかりました',
+ },
+ 'search.hint': 'キャッシュされたすべてのグループインデックスからファイル名を検索します。',
+};