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
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
|
/**
* 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.how_title': 'しくみ',
'welcome.step_home': '自宅のパソコンに MeshBay をインストール。ファイルはその場所に置いたままです。',
'welcome.step_anywhere': 'スマートフォン、ノートパソコン、どのブラウザからでも、どこにいてもログインできます。',
'welcome.step_share': 'グループを作って、家族や友人を招待しましょう。',
'welcome.uses_title': 'できること',
'welcome.use_chat': 'グループ内でのインスタントメッセージ',
'welcome.use_photos': '家族や友人とのフォトアルバム共有',
'welcome.use_media': '自宅のメディアセンターに外出先からアクセス。ご家族みんなで使え、ストリーミングに対応し、デスクトップアプリからは Chromecast も利用できます',
'welcome.use_apps': 'ホストしているノード上で独自のアプリを開発',
'welcome.private_title': '最初からプライベート',
'welcome.private_body': 'ファイルやメッセージは暗号化され、あなたの端末から自分のパソコンへ直接届きます。meshbay.org は端末どうしをつなぐ手助けをするだけで、あなたのコンテンツが経由することはありません。',
'welcome.badge_free': '無料',
'welcome.badge_open': 'オープンソース',
'welcome.badge_no_ads': '広告なし',
'welcome.badge_no_tracking': 'トラッキングなし',
'welcome.docs_title': 'ドキュメント',
'welcome.docs_source': 'ソースコード',
'welcome.docs_repo': 'git.meshbay.org',
'welcome.docs_user': 'ユーザー向け',
'welcome.docs_quickstart': 'クイックスタート',
'welcome.docs_userguide': 'ユーザーガイド',
'welcome.docs_devel': '開発者向け',
'welcome.docs_design': '設計',
'welcome.docs_protocol': 'プロトコル',
'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.link_title': "リンクで招待",
'members.link_hint': "まだアカウントを持っていない人向けです。リンクは1回だけ、このアドレスで登録したアカウントでのみ使えます。",
'members.link_email_placeholder': "メールアドレス",
'members.link_btn': "リンクを作成",
'members.link_ready': "{email} への招待リンク:",
'members.link_copy': "コピー",
'members.link_copied': "コピーしました",
'members.link_email_sent': "リンクをメールで送信しました。",
'members.link_email_refused': "メールを送信できませんでした。リンクを直接共有してください。",
'members.links_pending': "招待リンク",
'members.link_status_expired': "期限切れ",
'members.link_expires': "{date} に期限切れ",
'members.link_cancel': "取り消す",
'invite.title': "招待されています",
'invite.none': "このタブで待機中の招待はありません。受け取ったリンクをもう一度開いてください。",
'invite.signed_out': "このハブのグループに招待されています。招待が送られたメールアドレスでアカウントを作成するか、すでにお持ちならサインインしてください。",
'invite.register': "アカウントを作成",
'invite.signin': "サインイン",
'invite.confirm': "{inviter} さんが {group} への参加に招待しています。",
'invite.join': "参加",
'invite.ignore': "無視",
'invite.open': "グループを開く",
'invite.already_member': "すでに {group} のメンバーです。",
'invite.other_account': "この招待は別のメールアドレスに送られました。そのアドレスで登録したアカウントでサインインしてください。エイリアスやドットも完全に一致する必要があります。",
'invite.invalid': "この招待は無効です。使用済み、取り消し済み、または期限切れです。新しい招待を依頼してください。",
'invite.joining': "参加しています…",
'invite.after_register': "招待されたグループに参加するにはサインインしてください。",
'invite.paste_title': "招待リンクで参加",
'invite.paste_placeholder': "ここにリンクを貼り付け",
'invite.paste_btn': "続行",
'invite.paste_invalid': "招待リンクではありません。",
'invite.paste_other_hub': "この招待は別のハブのものです。",
'group.link_spent': "この招待リンクは、グループをホストしているマシンでは無効になっています。新しいリンクを依頼してください。",
'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 <name>)。',
'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': 'キャンセル',
};
|