/** * 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': 'ログイン', 'nav.minimize_tray': 'トレイに最小化', 'tray.show': 'MeshBay を表示', 'tray.quit': '終了', 'tray.start_node': 'ノードを開始', 'tray.stop_node': 'ノードを停止', // Sidebar 'sidebar.my_groups': 'マイグループ', 'sidebar.no_groups': 'グループはまだありません', 'sidebar.legal': '法的情報', 'sidebar.discover': '見つける', 'sidebar.public_groups': '公開グループ', // Login 'login.title': 'ログイン', 'login.username': 'ユーザー名', 'login.password': 'パスワード', 'login.submit': 'ログイン', 'login.loading': 'ログインしています…', 'login.no_account': 'アカウントをお持ちでないですか?', 'login.register_link': 'アカウントを作成', 'login.forgot': 'パスフレーズをお忘れですか?', 'login.show_password': 'パスフレーズを表示', 'login.hide_password': 'パスフレーズを非表示', 'reset.title': 'パスフレーズをリセット', 'reset.request_intro': 'ユーザー名とアカウントのメールアドレスを入力してください。両方が一致する場合、そのアドレスにリセットコードを送信します。', 'reset.send_code': 'コードを送信', 'reset.form_intro': 'メールで届いたコードを入力し、新しいパスフレーズを選んでください。リカバリーキーをお持ちの場合は入力すると、グループへのアクセスも復元されます。', 'reset.code': 'リセットコード', 'reset.recovery_key': 'リカバリーキー(任意)', 'reset.recovery_key_hint': 'お持ちでない場合は空欄のままにしてください。なしの場合、サインインは復元されますが、各グループには再参加が必要です。', 'reset.new_pass': '新しいパスフレーズ', 'reset.new_pass_repeat': '新しいパスフレーズをもう一度入力', 'reset.submit': 'パスフレーズをリセット', 'reset.working': 'グループの identity を復元しています…', 'reset.signin_restored': 'サインインが復元されました。', 'reset.groups_restored': '到達できたすべてのノードで、グループの identity が復元されました。', 'reset.no_recovery': 'グループの identity は復元されませんでした。各グループについて、その運用者に固定の解除と新しい招待コードの送付を依頼し、再参加してください。', 'reset.needs_operator': 'これらのグループにはまだ対応が必要です。各運用者に固定の解除と新しいコードの送付を依頼してください:', 'reset.go_app': 'アプリへ', 'reset.back_to_login': 'サインインに戻る', 'reset.err_unsupported': 'パスフレーズのリセットにはブラウザの暗号モジュールが必要ですが、ここでは利用できません。', // Register 'register.title': 'アカウントを作成', 'register.username': 'ユーザー名', 'register.email': 'メールアドレス', 'register.password': 'パスフレーズ(12 文字以上)', 'register.confirm': 'パスワードの確認', 'register.submit': 'アカウントを作成', 'register.loading': 'アカウントを作成しています…', 'register.has_account': 'すでにアカウントをお持ちですか?', 'register.login_link': 'ログイン', 'register.recovery_title': 'リカバリーキーを保存してください', 'register.recovery_intro': 'このキーは、パスフレーズを忘れた場合にグループの identity を復元します。パスワードマネージャーや安全な場所に保管してください。', 'register.recovery_copy': 'コピー', 'register.recovery_copied': 'コピーしました', 'register.recovery_warning': 'パスフレーズとこのキーの両方を失うと、ファイルは各ノードに残りますが、各グループには新しい identity で再参加することになります。', 'register.recovery_saved': 'リカバリーキーを安全な場所に保存しました。', 'register.recovery_continue': '続ける', 'register.recovery_email_opt': 'バックアップとして、このリカバリーキーもメールで送る', 'register.recovery_emailed': '確認コードと同じメールで、コピーもお使いのメールアドレスに送信されました。', 'register.recovery_not_emailed': 'これはメールで送信されていません。今すぐ保存してください。表示されるのはこの一度だけです。', 'register.success_title': 'メールアドレスを確認してください', 'register.success_msg': '確認コードをメールアドレスに送信しました。以下に入力してアカウントを有効にしてください。', 'register.go_login': 'ログインへ進む', 'register.code_placeholder': '確認コード', 'register.verify_btn': '確認', 'register.verifying': '確認中…', 'register.verified_title': 'メール確認完了', 'register.verified_msg': 'アカウントが有効になりました。ログインできます。', 'register.resend': 'コードを再送信', 'register.resend_sent': '新しいコードを送信しました。', 'login.pending_verification': 'メールアドレスがまだ確認されていません。受信トレイで確認コードをご確認ください。', 'login.verify_link': 'メールを確認', 'login.invalid': "ユーザー名またはパスフレーズが正しくありません。", 'login.locked': "このアカウントでパスフレーズの誤りが多すぎます。{minutes} 分後にもう一度お試しいただくか、パスフレーズをリセットしてください。", // Sign-in page: what MeshBay is (browser only) 'welcome.title': '本来あるべき姿のインターネット。', 'welcome.lead': 'MeshBay は、個人のファイルにどこからでもアクセスでき、自分のパソコンのストレージ上でアプリを動かせるオープンソースソフトウェアです。', 'welcome.app_chat': 'チャット', 'welcome.app_photos': '写真', 'welcome.app_media': 'メディアセンター', 'welcome.app_video': '動画プレーヤー', 'welcome.app_music': '音楽プレーヤー', 'welcome.groups': 'グループを作成して、家族や友人に一部のアプリへのアクセスを許可できます。', 'welcome.e2e': 'データはエンドツーエンドで暗号化され、各デバイスからデータを保管するパソコン(あなたのノード)へピアツーピアで直接届きます。meshbay.org のハブを経由することは一切ありません。', 'welcome.uses_title': 'できること', 'welcome.use_chat': 'グループ内でのインスタントメッセージ', 'welcome.use_photos': '家族や友人とのフォトアルバム共有', 'welcome.use_media': '自宅のメディアセンターに外出先からアクセス。ご家族みんなで使え、ストリーミングに対応し、デスクトップアプリからは Chromecast も利用できます', 'welcome.use_apps': 'ホストしているノード上で独自のアプリを開発', 'welcome.hub_title': 'meshbay.org の役割', 'welcome.hub_body': 'meshbay.org はシグナリング専用のサービスです。ログインを処理し、家庭のネットワーク越しに参加者同士を設定不要でつなぎます。', 'welcome.hub_never': 'あなたのコンテンツが届くことはありません:', 'welcome.never_transit': '何も経由しません(コンテンツもインデックスもなし)', 'welcome.never_stored': 'ファイルやメッセージは一切保存されません', 'welcome.never_e2e': '各デバイスからノードまでエンドツーエンドで暗号化', 'welcome.hub_free': 'サービスは無料です。ビジネスモデルは意図的に持たず、トラッキングも広告もありません。どうぞお楽しみください!', 'welcome.download': 'ダウンロード(ベータ版)', 'welcome.legal': '法的情報', 'register.err_mismatch': 'パスワードが一致しません', 'register.err_username_len': 'ユーザー名は{n}文字以上にしてください。', 'register.err_min_len': { other: '{n} 文字以上でご入力ください', }, 'register.err_too_weak': '推測されやすすぎます。パスフレーズは、鍵が保管されている場所で' + 'その鍵を守るものです。互いに関係のない単語をいくつか並べると効果的です。', 'register.strength': '強度:約 {bits} ビット。参加している各 node に保管される鍵の' + 'コピーを守るものですので、しっかり決めておく価値があります。', 'captcha.required': 'キャプチャを完了してください。', 'captcha.failed': 'キャプチャの検証に失敗しました — もう一度お試しください。', // Home 'home.welcome': 'MeshBay へようこそ', 'home.no_groups': 'まだどのグループにも参加していません。', 'home.browse_prefix': '', 'home.browse_link': '公開グループ', 'home.browse_suffix': 'を見てみるか、グループ管理者に招待を依頼してください。', 'home.invite_only': 'グループ管理者に招待を依頼してください。', 'home.my_groups': 'マイグループ', // Explore 'explore.title': '公開グループ', 'explore.search': 'グループを検索…', 'explore.loading': '読み込んでいます…', 'explore.empty': '利用できる公開グループはありません。', 'explore.create_group': 'グループを作成', 'explore.join': '参加', 'explore.member': '参加済み', 'explore.disabled': "This hub does not have public groups.", // Group page 'group.default_name': 'グループ', 'group.tab_files': 'ファイル', 'group.tab_chat': 'チャット', 'group.tab_video': '動画', 'group.tab_music': '音楽', 'group.tab_photos': '写真', 'group.tab_helloworld': 'HelloWorld', 'helloworld.greeting': 'ハロー、ワールド!', 'helloworld.no_directory': 'フォルダーが未選択です。設定で選んでください。', 'helloworld.counted': '{n} 件のファイル', 'settings_app.helloworld_directory_label': 'フォルダー', 'settings_app.helloworld_directory_hint': 'この参照アプリが一覧表示するフォルダーです。アプリの追加に必要なのは自身の 2 つのファイルだけであることを示すために存在します。', 'group.tab_members': 'メンバー', 'group.tab_settings': "設定", 'members.danger_leave_hint': "このグループのファイルとチャットにアクセスできなくなります。", 'members.uploads_title': "アップロード", 'members.uploads_on': "メンバーはファイルを追加できます", 'members.uploads_off': "あなただけがファイルを追加できます", 'members.uploads_disable': "無効にする", 'members.uploads_enable': "有効にする", 'members.uploads_hint': "あなた以外の全員に適用されます。ノード自身がアップロードを拒否するため、ボタンを隠すだけの話ではありません。", 'members.apps_title': "アプリケーション", 'members.apps_hint': "メンバーに表示されるこのグループの機能です。少なくとも1つは有効のままにしてください。", 'members.apps_need_one': "少なくとも1つのアプリケーションを有効にしておく必要があります。", 'members.danger_delete_hint': "グループはすべてのメンバーから消えます。元に戻せません。", 'group.filter': 'ファイルを絞り込み…', 'group.refresh_index': '一覧を更新', '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.drop_here': 'ドロップして {dir} にアップロード', 'group.drop_not_here': 'ファイルをドロップできるのは書き込み可能なフォルダーだけです。', 'group.drop_conflict': 'アップロードを中止しました — このフォルダーに既に存在します: {names}。先に名前を変更するか削除してください。', 'group.drop_invalid': 'アップロードを中止しました — ノードに保存できない名前があります: {names}', 'group.drop_unreadable': 'アップロードを中止しました — ドロップされた項目を読み取れませんでした。', 'group.drop_mkdir_failed': 'アップロードを中止しました — フォルダーを作成できませんでした ({detail})。', 'group.mkdir': '新しいフォルダー', 'group.mkdir_prompt': '新しいフォルダー名', 'group.mkdir_offline': 'ノードに接続していません。', 'group.download_offline': 'ノードに接続していません — ダウンロードを開始できません。再接続は自動で行われます。少し待って再試行してください。', 'group.download_write_stalled': 'ファイルのディスクへの書き込みが止まりました({seconds} 秒間進みません)。ぶら下がったままにせず中止しました。もう一度お試しください。', 'device.add_title': 'This browser is not linked to this node yet', 'device.add_hint': 'Your account is known here, but this browser holds a different key. Approve it from a device already linked — no operator needed.', 'device.add_btn': 'Get a linking code', 'device.add_show': 'Type this code into a device already linked to this node, within the hour:', 'device.mine_title': 'Your devices on this node', 'device.mine_hint': 'Each browser or client you use here holds its own key. They are separate from your devices on other nodes.', 'device.mine_empty': 'No device is linked here yet.', 'device.this_one': 'this one', 'device.revoke': 'Remove', 'device.revoke_confirm': 'Remove this device? It will lose access to this node until it is linked again.', 'device.approve_hint': 'Linking a new device? Enter the code it is showing.', 'device.approve_btn': 'Approve', 'device.approved': 'Device linked.', 'group.root_unavailable': '(利用不可 — ドライブが切断されています)', 'group.root_plug': '接続する', 'group.root_eject': '取り外す', 'group.root_writable': '読み書き可', 'group.root_ejected': '(取り外し済み)', '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.connecting_short': '接続中…', 'status.fetching': 'インデックスを取得しています…', 'status.files': { other: '{n} 個のファイル', }, 'status.offline': 'オンラインの node はありません', 'status.error': '接続に失敗しました', // Chat 'chat.empty': 'まだメッセージはありません。会話を始めましょう。', 'chat.placeholder': 'メッセージを入力…', 'chat.send': '送信', 'chat.attach': 'ファイルを添付', 'chat.attach_read_only': '書き込み可能な共有ディレクトリがありません — 添付は無効です', // Video player 'video.loading': '{name} を読み込んでいます…', 'video.buffering': 'バッファリング中…', 'video.resumed_at': "{time} から再開しました", 'video.from_start': "最初から再生する", 'video.audio_track': '音声トラック', 'video.audio_track_n': 'トラック {n}', 'video.subtitles': '字幕', 'video.subtitles_off': 'なし', 'video.subtitle_track_n': 'トラック {n}', 'video.subtitles_forced': '強制(表示物のみ)', 'video.subtitles_sdh': '聴覚障害者向け', 'video.err_subtitle': 'この字幕トラックを読み込めませんでした', 'video.close': '閉じる(Esc)', 'preview.pdf_fallback': 'このブラウザーはページ内に PDF を表示しません。' + 'ダウンロードしてご覧ください。いずれにせよ復号はここで行われています。', 'preview.too_large': 'このファイルは {size} で、このページがメモリに保持できる上限({limit})を超えています。代わりにダウンロードしてください。ダウンロードはディスクに直接書き込まれます。', 'download.too_large_for_memory': '「{name}」は {size} です。このブラウザーでこの大きさのファイルを保存するにはディスクへ逐次書き出すしかありませんが、ここではそれができません — ファイル全体をメモリに保持することになります。ページを再読み込みしてもう一度お試しください。解決しない場合はデスクトップアプリをお使いください。', 'group.upload_indexing': 'インデックスを作成中…', 'video.err_transport': 'トランスポートが接続されていません', 'video.err_mse': 'ストリーミング再生に対応していないコーデックです:{codec}', 'video.mode_poster': 'ポスター表示', 'video.mode_flat': 'フラット表示', 'video.filter_all': 'All', 'video.filter_movies': 'Movies', 'video.filter_series': 'Series', 'pager.range': '{from}–{to} / {total}', 'pager.previous': '前のページ', 'pager.next': '次のページ', 'video.empty': '動画が見つかりません。', 'video.no_root_configured': 'このグループにはまだ動画のルートフォルダが設定されていません — 操作者が設定画面で選択できます。', 'music.no_root_configured': 'このグループにはまだ音楽のルートフォルダが設定されていません — 操作者が設定画面で選択できます。', 'video.director': '監督', 'video.specials': '特別編', 'video.season_n': 'シーズン{n}', 'video.episode_n': '第{n}話', 'video.n_episodes': { one: '{n}話', other: '{n}話', }, 'video.fix_match': '一致を修正…', 'video.search_title': 'TMDBの一致を修正', 'video.search_placeholder': 'TMDBを検索…', 'video.search_button': '検索', 'video.search_no_results': '一致する結果が見つかりません。', 'video.search_apply_hint': '現在このタイトルでグループ化されているすべてのファイルに適用されます。', 'video.search_apply_hint_movie': 'このファイルにのみ適用されます。', 'video.source_file': 'ファイル: {name}', 'video.no_match': '確実なTMDB一致なし — ファイル名を表示しています。', 'video.rematch_one': '再マッチ', 'video.read_more': '続きを読む', 'video.read_less': '折りたたむ', // 音楽 'music.mode_grid': 'アルバム', 'music.mode_flat': 'フラットリスト', 'music.empty': '音楽が見つかりません。', 'music.unknown_album': '不明なアルバム', 'music.unknown_artist': '不明なアーティスト', 'music.various': 'その他', 'music.play_all': 'すべて再生', 'music.menu_more': 'その他…', 'music.menu_play': '再生', 'music.menu_play_next': '次に再生', 'music.menu_enqueue': 'キューに追加', 'music.n_tracks': { one: '{n}曲', other: '{n}曲', }, 'music.err_transport': 'トランスポートが接続されていません', 'music.err_playback': '再生エラー', 'music.err_transcode': 'フォーマット変換に失敗しました', 'music.player_play': '再生', 'music.player_pause': '一時停止', 'music.player_prev': '前へ', 'music.player_next': '次へ', 'music.player_shuffle': 'シャッフル', 'music.player_repeat_off': 'リピートオフ', 'music.player_repeat_all': 'すべてリピート', 'music.player_repeat_one': '1曲リピート', 'music.player_volume': '音量', 'music.player_close': 'プレーヤーを閉じる', 'playlists.menu': 'プレイリスト', 'playlists.load': 'プレイリストを読み込む', 'playlists.create': '新しいプレイリスト…', 'playlists.delete': 'プレイリストを削除', 'playlists.remove_track': '曲を削除', 'playlists.sync_now': '今すぐ同期', 'playlists.add_to': 'プレイリストに追加', 'playlists.favorites': 'お気に入り', 'playlists.none_yet': 'プレイリストがありません', 'playlists.empty_playlist': 'このプレイリストは空です', 'playlists.added': '{n} 件追加しました', 'playlists.already_there': 'すでにこのプレイリストにあります', 'playlists.name_placeholder': 'プレイリスト名', 'playlists.err_duplicate': '同じ名前のプレイリストがあります', 'playlists.confirm_delete': 'プレイリスト「{name}」を削除しますか?元に戻せません。', 'playlists.deleted': '「{name}」を削除しました', 'playlists.synced': 'プレイリストを同期しました', 'playlists.sync_failed': '同期できませんでした', 'playlists.err_no_key': 'プレイリストを端末間で同期するには、一度サインアウトしてパスワードでサインインしてください。', 'playlists.err_too_large': '「{name}」は大きすぎて他のデバイスと同期できません。{n} 曲程度のプレイリストに分けてください。', 'playlists.track_removed': '曲を削除しました', 'playlists.save_queue': 'キューをプレイリストとして保存…', 'playlists.cancel': 'キャンセル', 'playlists.save': '保存', 'music.player_queue': '再生中のキュー', 'music.queue_title': '再生中', // Photos 'photo.empty': '写真が見つかりません。', 'photo.no_roots_configured': 'このグループにはまだ写真のルートフォルダが設定されていません — 操作者が設定画面でいくつか選択できます。', 'photo.root_album': '(トップレベル)', 'photo.n_photos': { one: '{n}枚', other: '{n}枚', }, 'photo.back': '戻る', 'photo.prev': '前へ(←)', 'photo.next': '次へ(→)', 'photo.zip_album': 'アルバムをzipでダウンロード', 'photo.zoom_in': '拡大', 'photo.zoom_out': '縮小', 'photo.zoom_fit_title': 'ウィンドウに合わせる', 'photo.zoom_fit_label': '合わせる', 'photo.zoom_100': '実寸(100%)', // LAN cast 'cast.start': 'デバイスにキャスト', 'cast.stop': 'キャストを停止', 'cast.copy_url': 'ストリームURLをコピー', 'cast.copied': 'URLをコピーしました', 'cast.scanning': 'デバイスを検索中…', 'cast.no_devices': 'デバイスが見つかりません', // 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.profile': 'プロフィール', 'settings.username': 'ユーザー名', 'settings.email': 'Email', 'settings.email_save': 'Save', 'settings.email_saved': 'メールアドレスを更新しました', 'settings.email_code_sent': '新しいメールアドレスに確認コードを送信しました。', 'settings.email_code_placeholder': '確認コード', 'settings.email_verify_btn': '確認', 'settings.email_verifying': '確認中…', 'settings.email_verified': 'メールアドレスが正常に変更されました。', 'settings.notif_global_disable': 'Disable all notifications', 'settings.notif_global_hint': 'When enabled, no notifications are created for any group.', 'settings.defaults': 'デフォルト', 'settings.default_tab': 'Default tab', 'settings.default_tab_hint': 'Which tab opens first when you enter a group.', 'settings.media_page_size': 'ビデオと音楽の1ページあたりの表示数', 'settings.media_page_size_hint': '一度に表示するポスターやアルバムの数。ツールバーの矢印で次のまとまりに移動します。', 'settings.music_keep_screen_on': 'Keep screen on during music playback', 'settings.music_keep_screen_on_hint': 'Prevents the phone from locking on its own while a track is playing.', 'settings.node_pins': 'node の識別情報', 'settings.node_pins_hint': '各 node の識別鍵は、最初に接続したときに記憶されます。' + 'それが変わった場合、接続は拒否されます。これが起こるのは、運営者が node を' + '再インストールしたときだけのはずです。消去する前に運営者にご確認ください。', 'settings.node_pins_count': { other: '{n} 件を固定中', }, 'settings.node_pins_clear': '固定した識別情報を消去', 'settings.passphrase': 'パスフレーズ', 'settings.passphrase_hint': 'このアカウントのパスフレーズを変更します。ノードがオンラインのすべてのグループで identity キーが再ラップされます。ノードがオフラインのグループには、あとで再参加する必要があります。', 'settings.passphrase_change': 'パスフレーズを変更', 'settings.passphrase_current': '現在のパスフレーズ', 'settings.passphrase_new': '新しいパスフレーズ', 'settings.passphrase_new_repeat': '新しいパスフレーズをもう一度入力', 'settings.continue': '続ける', 'settings.done': '完了', 'settings.passphrase_confirm_intro': '到達できるノードを持つすべてのグループで、identity キーが今すぐ再ラップされます:', 'settings.passphrase_reachable': '今すぐ更新されます', 'settings.passphrase_unreachable': '到達できません', 'settings.passphrase_fallback_note': '到達できないグループについては、その運用者に固定の解除と新しい招待コードの送付を依頼し、再参加してください。ファイルとメッセージは失われません。', 'settings.passphrase_confirm_btn': '変更する', 'settings.passphrase_working': 'キーを再ラップしています…', 'settings.passphrase_done': 'パスフレーズを変更しました。', 'settings.passphrase_needs_operator': 'これらのグループにはまだ対応が必要です。各運用者に固定の解除と新しいコードの送付を依頼してください:', 'settings.pw_too_short': '新しいパスフレーズは 12 文字以上にしてください。', 'settings.pw_mismatch': '2 つの新しいパスフレーズが一致しません。', 'settings.pw_same': '新しいパスフレーズは現在のものと異なる必要があります。', 'settings.pw_wrong_current': '現在のパスフレーズが正しくありません。何も変更されていません。', 'settings.recovery': 'リカバリーキー', 'settings.recovery_hint': 'リカバリーキーで暗号化した identity のコピーを、すべてのグループに追加します。使用する各ブラウザで一度実行してください。これがないと、パスフレーズを失った場合は各グループに手作業で再参加することになります。', 'settings.recovery_loaded': 'このブラウザに読み込み済み — 新しいグループは自動的に対象になります。', 'settings.recovery_open': 'リカバリーキーを入力', 'settings.recovery_input_ph': 'リカバリーキーを貼り付け', 'settings.recovery_submit': 'バックアップコピーを追加', 'settings.recovery_working': 'グループを更新しています…', 'settings.recovery_done': 'グループにリカバリーコピーが作成されました。', 'settings.recovery_partial': 'これらのグループに到達できませんでした。あとで開くか、もう一度実行してください:', 'settings.recovery_need_relogin': '一度サインアウトして再度サインインしてから、もう一度お試しください。', 'settings.danger': 'アカウントを削除', 'settings.sessions_heading': 'セッション', 'settings.sign_out_everywhere': 'すべての場所からサインアウト', 'settings.sign_out_everywhere_hint': 'このセッションを含め、アカウントのすべてのセッションを終了します。自分のものではないコンピューターでサインインしたままにした場合に役立ちます。デスクトップアプリは、その端末を削除するまで端末キーで再びサインインします。', 'settings.sign_out_everywhere_confirm': 'このブラウザーを含む、すべてのブラウザーとアプリからサインアウトしますか?', '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': 'このアプリについて', 'firstrun.title': 'Which hub?', 'firstrun.hint': 'A hub holds your account and introduces you to nodes. It never sees your files, your messages or your keys.', 'firstrun.btn': 'Continue', 'firstrun.checking': 'Checking…', 'firstrun.note': 'There is no default on purpose: this application only trusts a hub for its API, never for the interface, which ships with the application itself.', 'device.this_device': 'This device', 'settings.keys_heading': 'Keys on this device', 'settings.hub_heading': 'Hub', 'settings.hub_current': 'Currently', 'settings.hub_hint': 'Changing this signs you out and restarts the window.', 'settings.hub_change': 'Change', 'settings.keys_where': 'Protected by', 'settings.keys_unprotected': 'No system keyring is running, so your keys are encrypted with a key that is not a secret. Anyone who can read this machine’s files can read them. Start a keyring, or treat this device as untrusted.', 'settings.keys_unavailable': 'This system offers no key storage at all, so this device cannot be remembered — you will be asked for your passphrase each time. That is the safe outcome: nothing was stored unprotected.', 'settings.version': 'バージョン', 'settings.protocol': 'プロトコル', 'settings.role': '権限', 'settings.groups': 'グループの通知', 'settings.notifications': '通知', 'settings.node_key': 'node を連携', 'settings.node_key_desc': 'MeshBay の node を運営している場合は、その Ed25519 ' + '公開鍵をここに貼り付けて、アカウントに連携してください。' + 'node を動かしているマシンで `meshbay-node status` を実行するか、' + 'デスクトップクライアントの Node → Overview からコピーできます。', '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.tab_general': "General", 'admin.general_groups_heading': "Groups", 'admin.allow_public_groups_label': "Allow members to create public groups", 'admin.allow_public_groups_hint': "When off, new groups can only be private and invite-only. Existing public groups are left as they are — suspend them one by one from the Groups tab.", 'admin.mail_heading': "送信メール", 'admin.mail_hint': "このハブが送信する内容と量です。重要なのは 2 つ、アカウント数では上げられない 1 時間あたりの上限と、受信者 1 人あたりの 1 日の上限です。後者が、大量に送りつけられる人が実際に受け取る数です。", 'admin.mail_this_hour': "この 1 時間の送信数", 'admin.mail_remaining': "登録とアドレス変更に残り {general} 件、パスフレーズ再設定と招待に {recovery} 件。", 'admin.mail_hourly_budget': "1 時間あたりの通数(インスタンス全体)", 'admin.mail_hourly_reserved_for_recovery': "うち再設定と招待のために確保する数", 'admin.mail_destination_daily_cap': "同一受信者への 1 日あたりの通数", 'admin.mail_destination_cooldown_seconds': "同一受信者への送信間隔(秒)", 'admin.mail_invite_link_daily_cap': '1アカウントあたり1日の招待リンクメール数', 'admin.mail_verification_resend_cooldown': "登録コード再送の間隔(秒)", 'admin.mail_reset_cooldown': "再設定コード再送の間隔(秒)", 'admin.mail_email_change_cooldown': "別のアドレスを申請できるようになるまでの秒数", 'admin.mail_save': "メール制限を保存", 'admin.mail_reset_defaults': "既定値に戻す", 'admin.login_heading': "サインイン", 'admin.login_hint': "1つのユーザー名に対してこの回数パスフレーズを誤ると、設定した時間のあいだパスフレーズによるサインインが拒否されます。すでに開いているセッションと登録済みの端末は引き続き使え、パスフレーズをリセットするとロックは解除されます。0 で無効になります。", 'admin.session_heading': 'セッション', 'admin.session_hint': 'ブラウザーは、操作も再生もないまま1つ目の時間が経過するとサインアウトします(デスクトップアプリは対象外)。2つ目の時間使われなかったセッションは更新されず、どのセッションも3つ目の時間を超えて続きません。', 'admin.session_browser_idle_hours': '無操作時のブラウザーのサインアウト(時間)', 'admin.session_refresh_idle_hours': '未使用セッションの有効期限(時間)', 'admin.session_max_hours': 'セッションの最大時間(時間)', 'admin.session_save': 'セッション設定を保存', 'admin.login_max_failures': "ロックまでの誤りの回数", 'admin.login_lockout_minutes': "ロック時間(分)", 'admin.login_save': "サインインの制限を保存", 'admin.mail_state_is_in_stats': "現在の 1 時間の使用状況は「統計」に表示されます。", 'admin.mail_state_hint': "再設定と招待は上限全体を使えます。登録とアドレス変更は、確保された分には手を付けられません。いずれかの上限に達すると、管理者に 1 時間に 1 回通知されます。", 'admin.mail_left_signups': "登録に残っている数", 'admin.mail_left_recovery': "再設定・招待に残っている数", 'admin.mail_recipients': "本日カウントした受信者", 'admin.mail_alert_all': "このハブはこの 1 時間、メール送信を停止しました。パスフレーズ再設定と招待も拒否されます。", 'admin.mail_alert_general': "登録とアドレス変更のための分はこの 1 時間で使い切りました。再設定と招待は引き続き送信されます。", 'admin.settings_readonly': "Only an admin can change these settings.", // 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_revoke': "Revoke", 'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.", '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.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} 宛ての招待コード:', 'members.invite_email_sent': 'このメンバーにコード付きのメールが送信されました。', 'members.invite_email_failed': 'メールを送信できませんでした。コードを手動で共有してください。', 'members.invite_email_opt': '招待をメールで送信(迷惑メールに入る場合があります)', 'members.invite_code_hint': 'このコードは別の手段(SMSなど)でも共有できます。' + '相手がこのグループを初めて開いたときに入力します。', 'transfers.title': '転送', 'transfers.clear': '完了分を消去', 'transfers.cancel': 'キャンセル', 'transfers.open': '開く', 'transfers.done': '完了', 'transfers.cancelled': 'キャンセル済み', 'transfers.preparing': '準備中…', 'transfers.waiting_own_slots': '待機中 — 自分の枠がすべて使用中です', 'transfers.waiting_node': '待機中 — 前に {n} 件', 'transfers.summary': '実行中 {running} · 待機中 {waiting}', 'transfers.group_running': '実行中', 'transfers.group_waiting': '待機中', 'transfers.group_paused': '一時停止中', 'transfers.group_finished': '完了', 'transfers.cancel_one': '{name} をキャンセル', 'transfers.pause': '一時停止', 'transfers.resume': '再開', 'transfers.paused': '一時停止中', 'transfers.not_pausable': '一時停止できません。設定でダウンロードフォルダーを選ぶと使えます', 'transfers.pause_one': '{name} を一時停止', 'transfers.resume_one': '{name} を再開', 'transfers.eta_seconds': '残り {n} 秒', 'transfers.eta_minutes': '残り {n} 分', 'transfers.eta_hours': '残り {n} 時間', 'transfers.failed': '失敗', 'group.select': '選択', 'group.select_done': '完了', 'group.actions': '操作({n})', 'group.download_n': 'ダウンロード({n})', 'group.download_zip_n': 'フォルダーを zip でダウンロード({n})', 'group.download_zip_one': 'フォルダーを zip でダウンロード', '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.zip_too_large': '「{name}」は {size} あり、フォルダーを zip でダウンロードできるのは ' + '{limit} までです。サブフォルダーを一つずつ、またはファイルを個別にダウンロードしてください。', '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': '参加', 'group.pass_title': 'パスフレーズを入力してください', 'group.pass_hint': 'このブラウザーではまだキーのロックが解除されていません。パスフレーズを一度入力して、ここでグループを開いてください。', 'group.pass_btn': 'ロック解除', 'notif.purge': 'すべて消去', 'notif.title': '通知', 'notif.empty': '通知はありません', 'notif.mark_all_read': 'すべて既読にする', // Sidebar 'sidebar.search': 'ファイルを検索', // Status // Search 'search.placeholder': 'すべてのグループから検索…', 'search.no_results': '検索条件に一致するファイルはありません。', 'search.col_group': 'グループ', 'search.result_count': { other: '{n} 個のファイルが見つかりました', }, 'search.hint': '入力してすべてのグループを検索します。', 'search.indexing': '{done} / {total} グループをインデックス中…', 'search.unreachable': { other: '{n} グループに接続できません' }, 'search.n_sources': { other: '{n} 個のソース' }, 'search.view_files': 'ファイル', 'search.view_videos': '動画', 'search.view_music': '音楽', 'search.view_photos': '写真', 'search.connecting': 'グループに接続中…', // Presence, chat paging, leaving a group, the profile page 'presence.online': 'このグループをホストする node が稼働中です', 'presence.offline': 'このグループに到達できる node がありません', 'presence.unknown': '未確認', 'presence.indexing': 'インデックス中 — {pct}%', 'indexdock.kind_scan': "インデックス中", 'indexdock.kind_rescan': "再読み込み中", 'indexdock.kind_reconcile': "差分を取り込み中", 'indexdock.kind_watch': "新しいファイルをインデックス中", 'indexdock.waiting': "インデックス待ち", 'indexdock.done': "インデックス完了", 'indexdock.listing': "ファイルを一覧中…", 'indexdock.percent': "{pct}%", 'indexdock.files': "{done} / {total} ファイル", 'indexdock.next': "次: {roots}", 'indexdock.next_count': "待機中: {count}", 'indexdock.open': "このグループの設定を開く", 'indexdock.hide': "次のインデックスまで隠す", 'chat.load_older': '以前のメッセージを {n} 件読み込む', 'chat.start_of_history': '会話のはじまり', 'chat.today': '今日', 'chat.yesterday': '昨日', 'chat.unread': '新しいメッセージ', 'chat.jump_latest': '最新へ移動', 'chat.jump_new': '新しいメッセージ', 'chat.unreadable': 'このメッセージを読み取れませんでした', 'chat.unreadable_signature': '未検証のメッセージ — 署名が送信者と一致しません', 'chat.unreadable_epoch': 'この端末がこの会話を読めるようになる前に書かれました', 'chat.unreadable_keys': 'チャットの鍵を取得できません — 再接続してください', 'chat.unreadable_decrypt': 'このメッセージを復号できませんでした', 'chat.unreadable_envelope': 'このメッセージは不完全な状態で届きました', 'chat.unreadable_format': 'このメッセージには新しいバージョンの MeshBay が必要です', 'chat.key_changed': 'このアカウントは見覚えのない鍵を使っています', 'chat.key_changed_hint': 'ノードはこのメッセージがこのアカウントからだと言っていますが、その端末鍵はあなたが受け入れたものではなく、署名もありません。別の場所で追加された新しい端末かもしれませんし、ノードが別人を名乗らせているのかもしれません。', 'chat.encrypted_needs_newer': 'この会話は暗号化されており、このクライアントでは読めません — MeshBay を更新してください', 'chat.encrypted_cannot_send': 'この会話は暗号化されており、この端末はまだ投稿できません', 'group.leave': 'グループを退出', 'group.leave_confirm': '「{name}」を退出しますか?ファイルとチャットへのアクセスがなくなります。アップロードしたファイルは node に残り、node は固定した識別情報を運営者が削除するまで保持します。', 'group.mute': 'Mute notifications', 'group.unmute': 'Unmute notifications', 'profile.title': 'プロフィール', 'usermenu.profile': 'プロフィール', // First-run setup wizard 'setup.welcome_title': 'MeshBay へようこそ', 'setup.welcome_message': 'お使いの node がファイルを暗号化してお使いのマシン上に保管します。node を起動して最初のグループを作成しましょう。', 'setup.node_detected': 'ローカル node が検出され、実行中です。', 'setup.node_not_running': 'node はインストールされていますが、実行されていません。', 'setup.node_start': 'node を起動', 'setup.node_starting': 'node を起動中…', 'setup.node_started': 'Node が起動しました。', 'setup.node_not_installed': 'この端末に meshbay-node がインストールされていません。', 'setup.node_install_hint': 'パッケージマネージャーでインストールし、こちらにお戻りください。', 'setup.node_startup_hint': 'ノードが起動したら、いつでもサイドバーの「Node」にアクセスして、サインイン時に自動的に起動するか、バックグラウンドサービスとして実行するように設定できます。', 'setup.skip': 'スキップ — ローカル node なしでグループを作成', 'setup.create_group': '最初のグループを作成', 'setup.dismiss': 'セットアップをスキップ', // Group 'group.retry': '再試行', // Sidebar 'sidebar.node': 'Node', // Node admin 'node.title': 'Node', 'node.service_checking': 'ノードサービスを確認中…', 'node.service_not_installed': 'サービスとしてインストールされていません', 'node.service_state_active': '実行中', 'node.service_state_inactive': '停止', 'node.service_state_failed': '失敗', 'node.service_state_activating': '起動中…', 'node.service_state_deactivating': '停止中…', 'node.service_state_unknown': '不明', 'node.service_start': '開始', 'node.service_starting': '起動中…', 'node.service_stop': '停止', 'node.service_stopping': '停止中…', 'node.service_restart': '再起動', 'node.service_restarting': '再起動中…', 'node.service_mode_hint': 'バックグラウンドサービスとして実行中 — サインインより前、起動時に開始します。', 'node.startup_mode_label': '自動的に開始:', 'node.startup_mode_off': 'オフ(手動で開始)', 'node.startup_mode_signin': 'サインイン時', 'node.startup_mode_service': 'バックグラウンドサービスとして(起動時に開始)', 'node.startup_mode_updating': 'モードを切り替え中 — 管理者の確認ダイアログをご確認ください…', 'node.startup_mode_service_unavailable_hint': 'バックグラウンドサービスモードにはインストール済みのビルドが必要です。ローカルでテストする場合は、管理者権限の PowerShell で "meshbay-node service install" を実行してください。', 'node.not_operator': 'node に接続できませんでした。node が実行中であることをご確認ください。', 'node.offline': 'Node はオフラインです', 'node.retry': '再試行', 'node.pair_needed': 'オペレーターがペアリングされていません。管理操作(招待、ファイル削除)を有効にするにはペアリングコードを入力してください。', 'node.pair_code_placeholder': 'ペアリングコード', 'node.pair_button': 'このブラウザをペアリング', 'node.pair_success': 'ペアリングに成功しました。', 'node.reload': '設定を再読み込み', 'node.reloaded': '設定を再読み込みしました。既存グループのルート変更が反映されました。', 'node.restart_needed': '追加後、グループ鍵を初期化してください(meshbay-node gek-init --group )。', 'node.no_groups': 'この node にはグループが設定されていません。', 'node.stale': 'hub に未登録', 'node.settings': 'Node settings', 'node.settings_edit_hint': 'Changes are applied immediately and saved to node.toml.', 'node.settings_save': 'Save', 'node.settings_saving': 'Saving…', 'node.settings_saved': 'Settings saved.', 'node.setting_invite_ttl': 'Invitation TTL', 'node.setting_pair_ttl': 'Pairing code TTL', 'node.setting_device_ttl': 'Device request TTL', 'node.setting_max_streams': 'Max concurrent streams', 'node.setting_max_downloads': '同時ダウンロードの上限', 'node.setting_max_uploads': '同時アップロードの上限', 'node.setting_transcode': 'Transcode incompatible video', 'node.setting_max_upload': '1ファイルあたりの上限', 'node.setting_unit_gb': 'GB', 'node.setting_unit_hours': 'hours', 'node.setting_unit_minutes': 'min', 'node.setting_on': 'On', 'node.setting_off': 'Off', 'node.unavailable': '利用不可', 'node.files': { other: '{n} 件のファイル', }, 'node.peers': { other: '{n} 件のピア', }, 'node.roots': 'ディレクトリ', 'node.add_root': 'ディレクトリを追加', 'node.remove_root': '削除', 'node.root_no_signing_key': '署名鍵がありません — 先にこの端末をノードとペアリングしてください', 'node.root_no_route': 'ノードへの経路がありません — 接続するか、ノードを動かしているマシンでアプリを使ってください', 'node.root_remove_last': 'グループには少なくとも 1 つのディレクトリが必要です', 'node.root_path_hint': 'このグループをホストしているマシン上で、ノードから見たパスです。', 'node.root_path_placeholder': '/home/user/Media', 'node.root_path': 'パス', 'node.directory': 'ディレクトリ', 'node.root_added': 'ディレクトリを追加しました。', 'node.root_remove_confirm': '「{name}」をこのグループから削除しますか?', 'node.root_removed': 'ディレクトリを削除しました。インデックスを更新するために再起動を推奨します。', 'node.attach_group': 'グループを追加', 'node.attach_pick': 'ホストするグループ', 'node.attach_dir': '共有ディレクトリ', 'node.attach_upload_dir': 'アップロードディレクトリ', 'node.attach_upload_label': 'アップロードディレクトリ(ファイルのアップロードとチャット添付用)', 'node.attached': 'グループを追加し読み込みました。まだの場合は meshbay-node gek-init --group {name} を実行してください。', 'node.detach_group': 'グループを削除', 'node.detach_confirm': '「{name}」をこの node から削除しますか?', 'node.detached': 'グループを削除しました。', 'node.gek': 'グループ鍵', 'node.no_gek': 'グループ鍵がありません', 'node.gek_init_hint': 'グループ鍵が未設定です。CLI から GEK init を実行して設定してください。', 'node.gek_public_hint': '公開グループでは鍵のローテーションは利用できません。', 'node.gek_rotate': 'グループ鍵をローテーション', 'node.gek_rotate_confirm': 'グループ鍵をローテーションしますか?接続中のメンバーは新しい鍵を自動的に受け取ります。ダウンロード済みのコンテンツには影響しません。', 'node.gek_rotated': 'グループ鍵をローテーションしました。', 'node.roster': '名簿', 'node.roster_load': '名簿を読み込む', 'node.roster_empty': 'まだ固定されたメンバーはいません。', 'node.roster_user': 'ユーザー', 'node.roster_role': '役割', 'node.roster_status': 'ステータス', 'node.roster_via': '固定元', 'node.roster_invites': { other: '{n} 件の保留中の招待', }, 'node.unpin': '固定を解除', 'node.unpin_confirm': '「{name}」の固定を解除しますか?再度ペアリングが必要になります。', 'node.unpin_done': '識別情報の固定を解除しました。', 'node.denylist': '拒否リスト', 'node.denylist_load': '拒否リストを読み込む', 'node.denylist_empty': '拒否リストは空です。', 'node.denylist_count': { other: '{n} 件のエントリ', }, 'node.denylist_remove': '削除', 'node.denylist_clear_all': 'すべて削除', 'node.denylist_clear_confirm': '「{subject}」を拒否リストから削除しますか?', 'node.denylist_cleared': '拒否リストのエントリを削除しました。', // Settings — node 'settings_node.detach_failed_continue': 'node からグループを切り離せませんでした。それでも hub 上で削除しますか?', 'settings_node.roots': '共有ディレクトリ', 'settings_node.scan_title': 'スキャン', 'settings_node.scan_hint': 'node が見逃した変更がないかディレクトリを再確認する頻度と、ファイルの変更後にインデックスするまで待つ時間。', 'settings_node.search_listed_title': '検索', 'settings_node.search_listed_label': 'このグループを検索に表示する', 'settings_node.search_listed_hint': 'オフにすると、このグループのファイルはメンバーのグループ横断検索に表示されません。メンバーはグループを開けば引き続きすべて見られます。全体の一覧から外すだけで、誰に対しても何も隠しません。', 'settings_node.scan_reconcile_label': '再確認の間隔(分)', 'settings_node.scan_debounce_label': '変更後の待機時間(秒)', 'settings_node.scan_save': '保存', 'settings_node.scan_saving': '保存中…', 'settings_node.scan_saved': '保存しました。', 'settings_node.tmdb_title': 'TMDBメタデータ', 'settings_node.tmdb_hint': '動画アプリでTMDBのポスター、あらすじ、キャストを表示できるようにします。無効にするとサムネイルのみの表示になり、第三者への通信は発生しません。', 'settings_node.tmdb_enabled': '有効', 'settings_node.tmdb_disabled': '無効', 'settings_node.tmdb_token_label': 'カスタムAPIトークン(任意)', 'settings_node.tmdb_token_placeholder': '空欄にすると同梱のデフォルトトークンを使用します', 'settings_node.tmdb_token_customized': 'カスタムトークンが設定されています。', 'settings_node.tmdb_token_default': '同梱のデフォルトトークンを使用しています。', 'settings_node.tmdb_save': '保存', 'settings_node.tmdb_language_label': '言語', 'settings_node.tmdb_language_hint': '全員に適用されます — 共有キャッシュであり、視聴者ごとのリクエストではありません。', 'settings_node.video_root_title': '動画のルートフォルダ', 'settings_node.video_root_hint': 'このグループで動画アプリの起点とするフォルダ(またはサブフォルダ)です。選択されるまで、動画には何も表示されず、TMDB への問い合わせも行われません。', 'settings_node.video_root_none': '— 未選択 —', 'settings_node.musicbrainz_title': 'MusicBrainzのメタデータ', 'settings_node.musicbrainz_hint': 'トラックに使用可能な埋め込みカバーがない場合、MusicBrainzのカバーアートと正式名称をMusicアプリで表示できるようにします。オフにするとタグ・ファイル名のみでの閲覧になり、第三者へのリクエストは発生しません。', 'settings_node.musicbrainz_enabled': '有効', 'settings_node.musicbrainz_disabled': '無効', 'settings_node.video_root_save': '保存', 'settings_node.video_root_change_confirm': '動画のルートフォルダを変更すると、全メンバーの動画タブの表示内容が変わります。続行しますか?', 'settings_node.audio_root_title': '音楽のルートフォルダ', 'settings_node.audio_root_hint': 'このグループで音楽アプリの起点とするフォルダ(またはサブフォルダ)です。選択されるまで、音楽には何も表示されず、タグ・カバー情報の読み込みも行われません。', 'settings_node.audio_root_none': '— 未選択 —', 'settings_node.audio_root_save': '保存', 'settings_node.audio_root_change_confirm': '音楽のルートフォルダを変更すると、全メンバーの音楽タブの表示内容が変わります。続行しますか?', 'settings_node.photo_roots_title': '写真のルートフォルダ', 'settings_node.photo_roots_hint': 'このグループで写真アプリの起点とするフォルダです。写真ライブラリは複数のフォルダに分かれていることが多いため、複数選択できます。少なくとも1つ追加されるまで、写真には何も表示されません。', 'settings_node.photo_roots_none': '— 未選択 —', 'settings_node.photo_roots_add_placeholder': 'フォルダを追加…', 'settings_node.photo_roots_add': '追加', 'settings_node.photo_roots_remove': '削除', 'settings_node.photo_roots_save': '保存', 'settings_node.shared_directories_title': '共有ディレクトリ', 'settings_node.shared_directories_hint': 'このグループと共有されているフォルダー。読み書きを切り替えてアップロードを許可し、外付けドライブにはリムーバブルを設定します。', 'folder_tree.title_single': 'フォルダーを選択', 'folder_tree.title_multi': 'フォルダーを選択', 'folder_tree.choose': '選択…', 'folder_tree.remove': '外す', 'folder_tree.add': 'フォルダーを追加…', 'folder_tree.confirm': '決定', 'folder_tree.expand': '展開', 'folder_tree.collapse': '折りたたむ', 'folder_tree.nothing_selected': '未選択', 'folder_tree.empty': 'このグループにはまだ共有ディレクトリがありません。', 'folder_tree.writable_only': 'ここには読み書き可能なディレクトリしか選べません — ファイルが書き込まれます。', 'folder_tree.no_writable_root': 'このグループには書き込み可能なディレクトリがありません。まず「共有ディレクトリ」で読み書きを有効にしてください。', 'folder_tree.read_only_blocked': '読み取り専用 — 書き込みできません', 'settings_app.save': '保存', 'settings_app.saving': '保存中…', 'settings_app.disabled_hint': 'このアプリを有効にすると設定できます。', 'settings_app.video_directories_label': '動画フォルダー', 'settings_app.video_directories_hint': 'このグループの映画や番組がある場所です。それ以外は動画タブに表示されません。', 'settings_app.music_directories_label': '音楽フォルダー', 'settings_app.music_directories_hint': 'このグループのアルバムがある場所です。それ以外は音楽タブに表示されません。', 'settings_app.photo_directories_label': '写真フォルダー', 'settings_app.photo_directories_hint': 'このグループのアルバムがある場所です。それ以外は写真タブに表示されません。', 'settings_app.chat_directory_label': '添付ファイルのフォルダー', 'settings_app.chat_directory_hint': 'チャットで送られたファイルの書き込み先です。読み書き可能なディレクトリである必要があります。', 'settings_app.chat_no_writable_root': 'このグループには書き込み可能なディレクトリがないため、添付は無効です。', 'settings_app.chat_link_preview_label': 'リンクのプレビュー', 'settings_app.chat_link_preview_hint': 'メンバーがリンクを投稿すると、ノードがページのタイトルと画像を取得します。これは他人が選んだサイトへの、あなたのマシンからのリクエストです。', 'settings_app.chat_encrypted_always': 'このグループのチャットは常に暗号化されています。無効にはできません。', 'settings_app.chat_rotate_epoch': 'チャット鍵を更新する', 'settings_app.chat_rotate_epoch_hint': 'メンバーは履歴全体を引き続き読めます。グループから外された相手は、これ以降に書かれた内容を読めません。メンバーや端末を削除すると、これは自動的に行われます。', 'settings_app.tmdb_token_prompt': 'TMDB に登録して、自分の API キーを発行してください。', 'settings_app.tmdb_token_link': 'キーを取得', 'settings_node.roots_offline_hint': 'ノードに接続していません — 変更はローカルノード経由で行われ、次回の再読み込みで反映されます。', 'settings_node.directories_title': 'アプリのディレクトリ', 'settings_node.directories_hint': '共有フォルダと、動画・音楽・写真の各アプリがそれぞれの起点として使用するフォルダです。', // Wizard 'wizard.title': 'グループを作成', 'wizard.detecting': 'ローカル node を検出中…', 'wizard.node_not_found': 'ローカル node が検出できませんでした。meshbay-node が実行中であることをご確認ください。', 'wizard.node_offline_warning': 'Node が実行されていません。グループは hub 上のみに作成されます。後から Node ページで node を接続できます。', 'wizard.retry': '再試行', 'wizard.wrong_account': 'node は実行中ですが、設定されたユーザー名がお使いのアカウントと一致しません。node.toml の hub.username をご確認ください。', 'wizard.skip_node': 'node なしで続行', 'wizard.directories': '共有ディレクトリ', 'wizard.directories_hint': 'このグループで共有するディレクトリを選択してください。少なくとも 1 つ必要です。', 'wizard.add_directory': 'ディレクトリを追加', 'wizard.remove': '削除', 'wizard.set_upload': 'アップロード先に設定', 'wizard.upload_target': 'アップロード先', 'wizard.create_and_setup': '作成してセットアップ', 'wizard.create_hub_only': 'hub のみに作成', 'wizard.setting_up': 'グループをセットアップ中…', 'wizard.step_create_hub': 'hub 上にグループを作成中', 'wizard.step_attach': 'node に接続中', 'wizard.step_apps': 'アプリを選択中', 'wizard.step_add_roots': 'ディレクトリを追加中', 'wizard.step_gek': '暗号化鍵を初期化中', 'wizard.step_pair': 'ペアリングをセットアップ中', 'wizard.step_index': 'ファイルをインデックス中', 'wizard.indexing_progress': 'インデックス中… {pct}%', 'wizard.indexing_current_dir': 'スキャン中: {dir}', 'wizard.done_title': 'グループを作成しました', 'wizard.done_message': 'グループの準備ができました。node がホストし、暗号化が設定されています。次は「設定」タブからメンバーを招待しましょう。', 'wizard.go_to_group': 'グループを開く', 'wizard.finish_later': 'セットアップを後で完了', 'node.stun_servers': 'STUN Servers', 'node.stun_hint': 'Servers used for WebRTC NAT traversal (ICE candidate gathering).', 'node.stun_add': 'Add', 'node.stun_add_placeholder': 'stun:host:port', 'node.stun_remove': 'Remove', 'node.stun_move_up': 'Move up', 'node.stun_move_down': 'Move down', 'node.stun_save': 'Save', 'node.stun_saving': 'Saving…', 'node.stun_saved': 'STUN servers saved.', 'node.stun_reset': 'Reset to defaults', 'node.stun_empty': 'No STUN servers configured. NAT traversal will not work.', 'node.stun_duplicate': 'This server is already in the list.', 'node.stun_invalid': 'STUN URL must start with stun:', 'node.ice_interfaces': 'ICE Interfaces', 'node.ice_auto_hint': 'Auto mode — virtual and VPN interfaces (Tailscale, Docker, libvirt, etc.) are excluded automatically.', 'node.ice_manual_hint': 'Manual mode — only the listed interfaces are used for ICE candidate gathering.', 'node.ice_add': 'Add', 'node.ice_add_placeholder': 'e.g. eth0, wlp0s20f3', 'node.ice_remove': 'Remove', 'node.ice_save': 'Save', 'node.ice_saving': 'Saving…', 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', 'node.overview': 'Overview', 'node.overview_version': 'Version', 'node.overview_node_id': 'Node ID', 'node.overview_node_key': 'node の鍵', 'node.overview_node_key_copy': 'コピー', 'node.overview_node_key_copied': 'コピーしました', 'node.overview_quic_port': 'QUIC port', 'node.overview_hub': 'Hub', 'node.node_roster': 'Node roster', 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', 'node.roster_scope': 'Scope', 'node.roster_scope_node': 'node-wide', 'node.peers_title': 'Connected peers', 'node.peers_empty': 'No peers connected.', 'node.peers_user': 'User', 'node.peers_ip': 'IP', 'node.peers_group': 'Group', 'node.peers_state': 'State', 'node.audit_title': 'Audit log', 'node.audit_all_events': 'All events', 'node.audit_empty': 'No audit entries.', 'node.audit_time': 'Time', 'node.audit_event': 'Event', 'node.audit_user': 'User', 'node.audit_ip': 'IP', 'node.audit_group': 'Group', 'node.audit_detail': 'Detail', 'node.maintenance': 'Maintenance', 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', 'node.maintenance_prune': 'Prune stale entries', 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', 'node.loading': 'Loading…', 'node.audit_export': 'Export CSV', 'node.audit_exporting': 'Exporting…', 'node.audit_prev': 'Previous', 'node.audit_next': 'Next', 'node.audit_page': 'Page {n}', 'node.audit_exported': 'Exported {n} entries.', 'node.unlink_title': 'Unlink from hub', 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', 'node.unlink_button': 'Unlink this node', 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', 'node.tab_overview': 'Overview', 'node.tab_groups': 'Groups', 'node.tab_roster': 'Roster', 'node.tab_peers': 'Peers', 'node.tab_audit': 'Audit', 'node.tab_settings': 'Settings', 'node.root_rw': '読み書き', 'node.root_ro': '読み取り専用', 'node.removable': 'リムーバブル', // In-page confirm/alert (ask.js) 'dialog.ok': 'OK', 'dialog.cancel': 'キャンセル', };