1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
|
/**
* 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.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.danger_delete_hint': "グループはすべてのメンバーから消えます。元に戻せません。",
'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': '新しいフォルダーの名前:',
'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.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': 'ファイルを添付',
// Video player
'video.loading': '{name} を読み込んでいます…',
'video.buffering': 'バッファリング中…',
'video.resumed_at': "{time} から再開しました",
'video.from_start': "最初から再生する",
'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.profile': 'プロフィール',
'settings.username': 'ユーザー名',
'settings.email': 'Email',
'settings.email_save': 'Save',
'settings.email_saved': 'Email updated',
'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.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': 'このアプリについて',
'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. A hub on your own machine is usually http, not https.',
'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 の管理ダッシュボードで確認できます。',
'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.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': 'キャッシュされたすべてのグループインデックスからファイル名を検索します。',
// Presence, chat paging, leaving a group, the profile page
'presence.online': 'このグループをホストする node が稼働中です',
'presence.offline': 'このグループに到達できる node がありません',
'presence.unknown': '未確認',
'chat.load_older': '以前のメッセージを {n} 件読み込む',
'chat.start_of_history': '会話のはじまり',
'chat.today': '今日',
'chat.yesterday': '昨日',
'chat.unread': '新しいメッセージ',
'chat.jump_latest': '最新へ移動',
'chat.jump_new': '新しいメッセージ',
'group.leave': 'グループを退出',
'group.leave_confirm': '「{name}」を退出しますか?ファイルとチャットへのアクセスがなくなります。アップロードしたファイルは node に残り、node は固定した識別情報を運営者が削除するまで保持します。',
'group.mute': 'Mute notifications',
'group.unmute': 'Unmute notifications',
'profile.title': 'プロフィール',
'usermenu.profile': 'プロフィール',
};
|