mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 00:17:15 +02:00
Merge branch 'develop' of https://github.com/NodeBB/NodeBB into develop
This commit is contained in:
@@ -56,7 +56,7 @@
|
||||
"federation/pruning": "Съхранение",
|
||||
"federation/safety": "Доверие и защита",
|
||||
"federation/analytics": "Анализи",
|
||||
"federation/errors": "Errors",
|
||||
"federation/errors": "Грешки",
|
||||
|
||||
"section-appearance": "Външен вид",
|
||||
"appearance/themes": "Теми",
|
||||
|
||||
@@ -68,15 +68,15 @@
|
||||
"analytics.intro": "Тази страница показва състоянието на федериране на Вашия форум с други инстанции/сървъри",
|
||||
"analytics.details": "NodeBB следи операциите по изпращане и получаване на данни чрез ActivityPub. Вие също може да ги прегледате за всеки сървър – почасово или по дни. Имайте предвид, че броячите се увеличават само при <em>успешни</em> пращания и получавания.",
|
||||
"analytics.by-hostname": "Филтриране по име на сървър",
|
||||
"analytics.in": "Incoming",
|
||||
"analytics.out": "Outgoing",
|
||||
"analytics.in": "Входящи",
|
||||
"analytics.out": "Изходящи",
|
||||
"analytics.received": "Получени",
|
||||
"analytics.sent": "Изпратени",
|
||||
"analytics.errors": "Errors",
|
||||
"analytics.errors": "Грешки",
|
||||
"analytics.term": "Времева скала",
|
||||
"analytics.hourly": "По часове",
|
||||
"analytics.daily": "По дни",
|
||||
|
||||
"errors.intro": "The following %1 error(s) were recorded by this instance within the last 24 hours.",
|
||||
"errors.payload-gone": "The payload for this error no longer exists."
|
||||
"errors.intro": "Следните грешки (%1) бяха записани от тази инсталация в рамките на последните 24 часа.",
|
||||
"errors.payload-gone": "Данните за тази грешка вече не съществуват."
|
||||
}
|
||||
@@ -77,6 +77,6 @@
|
||||
"analytics.hourly": "Stündlich",
|
||||
"analytics.daily": "Täglich",
|
||||
|
||||
"errors.intro": "The following %1 error(s) were recorded by this instance within the last 24 hours.",
|
||||
"errors.intro": "Die folgenden %1 Fehler wurden von dieser Instanz in den letzten 24 Stunden protokolliert.",
|
||||
"errors.payload-gone": "Die Nutzlast für diesen Fehler ist nicht mehr vorhanden."
|
||||
}
|
||||
@@ -56,7 +56,7 @@
|
||||
"federation/pruning": "אחסון",
|
||||
"federation/safety": "אמון ובטיחות",
|
||||
"federation/analytics": "Analytics",
|
||||
"federation/errors": "Errors",
|
||||
"federation/errors": "שגיאות",
|
||||
|
||||
"section-appearance": "מראה חיצוני",
|
||||
"appearance/themes": "ערכות נושא",
|
||||
|
||||
@@ -77,6 +77,6 @@
|
||||
"analytics.hourly": "Orario",
|
||||
"analytics.daily": "Giornaliero",
|
||||
|
||||
"errors.intro": "The following %1 error(s) were recorded by this instance within the last 24 hours.",
|
||||
"errors.intro": "Nelle ultime 24 ore, questa istanza ha registrato il seguente %1 errore(i).",
|
||||
"errors.payload-gone": "Il payload per questo errore non esiste più."
|
||||
}
|
||||
@@ -47,38 +47,38 @@
|
||||
"wrote-on": "に投稿 <a href=\\\"%1\\\" class=\\\"timeago text-muted\\\" title=\\\"%2\\\"></a>",
|
||||
"replied-to-user-ago": "<a component=\\\"post/parent\\\" data-topid=\\\"%1\\\" href=\\\"%2\\\">%3</a>に返信 <a href=\\\"%4\\\" class=\\\"timeago text-muted\\\" title=\\\"%5\\\"></a>",
|
||||
"replied-to-user-on": "<a component=\\\"post/parent\\\" data-topid=\\\"%1\\\" href=\\\"%2\\\">%3</a>に<a href=\\\"%4\\\" class=\\\"timeago text-muted\\\" title=\\\"%5\\\"></a>返信",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
"user-unlocked-topic-on": "%1 unlocked this topic on %2",
|
||||
"user-pinned-topic-ago": "%1 pinned this topic %2",
|
||||
"user-pinned-topic-on": "%1 pinned this topic on %2",
|
||||
"user-unpinned-topic-ago": "%1 unpinned this topic %2",
|
||||
"user-unpinned-topic-on": "%1 unpinned this topic on %2",
|
||||
"user-deleted-topic-ago": "%1 deleted this topic %2",
|
||||
"user-deleted-topic-on": "%1 deleted this topic on %2",
|
||||
"user-restored-topic-ago": "%1 restored this topic %2",
|
||||
"user-restored-topic-on": "%1 restored this topic on %2",
|
||||
"user-moved-topic-from-ago": "%1 moved this topic from %2 %3",
|
||||
"user-moved-topic-from-on": "%1 moved this topic from %2 on %3",
|
||||
"user-shared-topic-ago": "%1 shared this topic %2",
|
||||
"user-shared-topic-on": "%1 shared this topic on %2",
|
||||
"user-queued-post-ago": "%1 <a href=\"%2\">queued</a> post for approval %3",
|
||||
"user-queued-post-on": "%1 <a href=\"%2\">queued</a> post for approval on %3",
|
||||
"user-referenced-topic-ago": "%1 <a href=\"%2\">referenced</a> this topic %3",
|
||||
"user-referenced-topic-on": "%1 <a href=\"%2\">referenced</a> this topic on %3",
|
||||
"user-forked-topic-ago": "%1 <a href=\"%2\">forked</a> this topic %3",
|
||||
"user-forked-topic-on": "%1 <a href=\"%2\">forked</a> this topic on %3",
|
||||
"user-crossposted-topic-ago": "%1 crossposted this topic to %2 %3",
|
||||
"user-crossposted-topic-on": "%1 crossposted this topicto %2 on %3",
|
||||
"user-locked-topic-ago": "%1がこのスレッドをロック %2",
|
||||
"user-locked-topic-on": "%1がこのスレッドを%2にロック",
|
||||
"user-unlocked-topic-ago": "%1がこのスレッドのロックを解除 %2",
|
||||
"user-unlocked-topic-on": "%1がこのスレッドのロックを%2に解除",
|
||||
"user-pinned-topic-ago": "%1がこのスレッドをピン留め %2",
|
||||
"user-pinned-topic-on": "%1がこのスレッドを%2にピン留め",
|
||||
"user-unpinned-topic-ago": "%1がこのスレッドのピン留めを解除 %2",
|
||||
"user-unpinned-topic-on": "%1がこのスレッドのピン留めを%2に解除",
|
||||
"user-deleted-topic-ago": "%1がこのスレッドを削除 %2",
|
||||
"user-deleted-topic-on": "%1がこのスレッドを%2に削除",
|
||||
"user-restored-topic-ago": "%1がこのスレッドをリストア %2",
|
||||
"user-restored-topic-on": "%1がこのスレッドを%2にリストア",
|
||||
"user-moved-topic-from-ago": "%1がこのスレッドを%2から移動 %3",
|
||||
"user-moved-topic-from-on": "%1がこのスレッドを%2から%3に移動",
|
||||
"user-shared-topic-ago": "%1がこのスレッドをシェア %2",
|
||||
"user-shared-topic-on": "%1がこのスレッドを%2にシェア",
|
||||
"user-queued-post-ago": "%1が<a href=\\\"%2\\\">承認待ち</a>で投稿 %3",
|
||||
"user-queued-post-on": "%1が<a href=\\\"%2\\\">承認待ち</a>で%3に投稿",
|
||||
"user-referenced-topic-ago": "%1がこのスレッドを<a href=\\\"%2\\\">参照</a> %3",
|
||||
"user-referenced-topic-on": "%1が%3にこのスレッドを<a href=\\\"%2\\\">参照</a>",
|
||||
"user-forked-topic-ago": "%1がこのスレッドを<a href=\\\"%2\\\">フォーク</a> %3",
|
||||
"user-forked-topic-on": "%1が%3にこのスレッドを<a href=\\\"%2\\\">フォーク</a>",
|
||||
"user-crossposted-topic-ago": "%1がこのスレッドを%2へクロスポスト %3",
|
||||
"user-crossposted-topic-on": "%1が%3にこのスレッドを%2へクロスポスト",
|
||||
"bookmark-instructions": "ここをクリックすると、このスレッドの最後に読んでいた投稿へ移動します。",
|
||||
"flag-post": "Flag this post",
|
||||
"flag-user": "Flag this user",
|
||||
"already-flagged": "Already Flagged",
|
||||
"view-flag-report": "View Flag Report",
|
||||
"resolve-flag": "Resolve Flag",
|
||||
"merged-message": "This topic has been merged into <a href=\"%1\">%2</a>",
|
||||
"forked-message": "This topic was forked from <a href=\"%1\">%2</a>",
|
||||
"flag-post": "この投稿を報告",
|
||||
"flag-user": "このユーザーを報告",
|
||||
"already-flagged": "すでに報告済み",
|
||||
"view-flag-report": "フラグレポートを表示",
|
||||
"resolve-flag": "フラグを解決",
|
||||
"merged-message": "このスレッドは<a href=\\\"%1\\\">%2</a>にマージされました",
|
||||
"forked-message": "このスレッドは<a href=\\\"%1\\\">%2</a>からフォークされました",
|
||||
"deleted-message": "このスレッドが削除されました。スレッド管理権を持っているユーザーにしか読めません。",
|
||||
"following-topic.message": "このスレッドが更新された際に通知を受け取ります。",
|
||||
"not-following-topic.message": "あなたはスレッド一覧を未読にすると、このスレッドを参照できます。ただし誰かがこのスレッドに投稿したときは通知を受信できません。",
|
||||
@@ -92,8 +92,8 @@
|
||||
"watch.title": "新しい投稿の通知を受ける",
|
||||
"unwatch.title": "このスレッドの通知を停止します",
|
||||
"share-this-post": "投稿を共有",
|
||||
"share-mail-subject": "Check out this post on \"%1\"",
|
||||
"share-mail-body": "I thought you might be interested in this post: %1",
|
||||
"share-mail-subject": "「%1」のこの投稿をご覧ください",
|
||||
"share-mail-body": "この投稿にご興味あるかもしれません: %1",
|
||||
"watching": "ウォッチ中",
|
||||
"not-watching": "未ウォッチ",
|
||||
"ignoring": "無視中",
|
||||
@@ -107,14 +107,14 @@
|
||||
"thread-tools.lock": "スレッドをロック",
|
||||
"thread-tools.unlock": "スレッドをアンロック",
|
||||
"thread-tools.move": "スレッドを移動",
|
||||
"thread-tools.crosspost": "Crosspost Topic",
|
||||
"thread-tools.crosspost": "スレッドをクロスポスト",
|
||||
"thread-tools.move-posts": "投稿を移動",
|
||||
"thread-tools.move-all": "すべてを移動",
|
||||
"thread-tools.change-owner": "Change Owner",
|
||||
"thread-tools.manage-editors": "Manage Editors",
|
||||
"thread-tools.change-owner": "オーナーを変更",
|
||||
"thread-tools.manage-editors": "編集者を管理",
|
||||
"thread-tools.select-category": "カテゴリを選択",
|
||||
"thread-tools.fork": "スレッドをフォーク",
|
||||
"thread-tools.tag": "Tag Topic",
|
||||
"thread-tools.tag": "スレッドにタグ",
|
||||
"thread-tools.delete": "スレッドを削除",
|
||||
"thread-tools.delete-posts": "投稿を削除します",
|
||||
"thread-tools.delete-confirm": "本当にこの投稿を削除しますか?",
|
||||
@@ -122,37 +122,37 @@
|
||||
"thread-tools.restore-confirm": "本当にこのスレッドを戻しますか?",
|
||||
"thread-tools.purge": "スレッドを切り離します",
|
||||
"thread-tools.purge-confirm": "本当にこのスレッドを切り離しますか?",
|
||||
"thread-tools.merge-topics": "トピックを置き換える",
|
||||
"thread-tools.merge": "Merge Topic",
|
||||
"topic-move-success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic-move-multiple-success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic-move-all-success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic-move-undone": "Topic move undone",
|
||||
"topic-move-posts-success": "Posts will be moved shortly. Click here to undo.",
|
||||
"topic-move-posts-undone": "Post move undone",
|
||||
"thread-tools.merge-topics": "スレッドを置き換える",
|
||||
"thread-tools.merge": "スレッドをマージ",
|
||||
"topic-move-success": "このスレッドはまもなく「%1」に移動されます。元に戻すにはここをクリック。",
|
||||
"topic-move-multiple-success": "これらのスレッドはまもなく「%1」に移動されます。元に戻すにはここをクリック。",
|
||||
"topic-move-all-success": "すべてのスレッドはまもなく「%1」に移動されます。元に戻すにはここをクリック。",
|
||||
"topic-move-undone": "スレッドの移動を元に戻しました",
|
||||
"topic-move-posts-success": "投稿はまもなく移動されます。元に戻すにはここをクリック。",
|
||||
"topic-move-posts-undone": "投稿の移動を元に戻しました",
|
||||
"post-delete-confirm": "本当にこの投稿を削除しますか?",
|
||||
"post-restore-confirm": "本当にこの投稿を元に戻しますか?",
|
||||
"post-purge-confirm": "本当にこの投稿を切り離しますか?",
|
||||
"pin-modal-expiry": "Expiration Date",
|
||||
"pin-modal-help": "You can optionally set an expiration date for the pinned topic(s) here. Alternatively, you can leave this field blank to have the topic stay pinned until it is manually unpinned.",
|
||||
"pin-modal-expiry": "有効期限",
|
||||
"pin-modal-help": "固定スレッドの有効期限をオプションで設定できます。空欄の場合は手動で固定解除するまで固定されたままになります。",
|
||||
"load-categories": "板をローディング中...",
|
||||
"confirm-move": "移動",
|
||||
"confirm-crosspost": "Cross-post",
|
||||
"confirm-crosspost": "クロスポスト",
|
||||
"confirm-fork": "フォーク",
|
||||
"bookmark": "ブックマーク",
|
||||
"bookmarks": "ブックマーク",
|
||||
"bookmarks.has-no-bookmarks": "まだ投稿をブックマークしていません。",
|
||||
"copy-permalink": "Copy Permalink",
|
||||
"go-to-original": "View Original Post",
|
||||
"copy-permalink": "パーマリンクをコピー",
|
||||
"go-to-original": "元の投稿を表示",
|
||||
"loading-more-posts": "もっと見る",
|
||||
"move-topic": "スレッドを移動",
|
||||
"move-topics": "スレッドを移動する",
|
||||
"crosspost-topic": "Cross-post Topic",
|
||||
"crosspost-topic": "スレッドをクロスポスト",
|
||||
"move-post": "投稿を移動",
|
||||
"post-moved": "投稿を移動しました!",
|
||||
"fork-topic": "スレッドをフォーク",
|
||||
"enter-new-topic-title": "Enter new topic title",
|
||||
"fork-topic-instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic",
|
||||
"enter-new-topic-title": "新しいスレッドのタイトルを入力",
|
||||
"fork-topic-instruction": "フォークする投稿をクリックし、新しいスレッドのタイトルを入力してフォークをクリック",
|
||||
"fork-no-pids": "投稿が選択されていません!",
|
||||
"no-posts-selected": "No posts selected!",
|
||||
"x-posts-selected": "%1 post(s) selected",
|
||||
@@ -183,8 +183,8 @@
|
||||
"composer.schedule": "Schedule",
|
||||
"composer.replying-to": "%1へ返答中",
|
||||
"composer.new-topic": "新規スレッド",
|
||||
"composer.editing-in": "Editing post in %1",
|
||||
"composer.untitled-topic": "Untitled Topic",
|
||||
"composer.editing-in": "%1の投稿を編集中",
|
||||
"composer.untitled-topic": "タイトルなしのスレッド",
|
||||
"composer.uploading": "アップロード中...",
|
||||
"composer.thumb-url-label": "スレッドのサムネイルのURLを入力して",
|
||||
"composer.thumb-title": "スレッドにサムネイルを追加",
|
||||
@@ -199,11 +199,11 @@
|
||||
"sort-by": "並び替え",
|
||||
"oldest-to-newest": "古いものから新しい順",
|
||||
"newest-to-oldest": "新しいものから古い順",
|
||||
"recently-replied": "Recently Replied",
|
||||
"recently-created": "Recently Created",
|
||||
"recently-replied": "最近返信",
|
||||
"recently-created": "最近作成",
|
||||
"most-votes": "最高評価",
|
||||
"most-posts": "最大投稿",
|
||||
"most-views": "Most Views",
|
||||
"most-views": "最多閲覧",
|
||||
"stale.title": "新しいスレッドを作りますか?",
|
||||
"stale.warning": "あなたが返信しようとしてるスレッドが古いスレッドです。新しいスレッドを作って、そしてこのスレッドが参考として入れた方を勧めます。そうしますか?",
|
||||
"stale.create": "新しいスレッドを作ります。",
|
||||
|
||||
@@ -205,35 +205,35 @@
|
||||
"info.moderation-note.success": "モデレーションは保存されませんでした",
|
||||
"info.moderation-note.add": "ノートに追加",
|
||||
"sessions.description": "このページでは、このフォーラムでアクティブなセッションを表示し、必要に応じてそれらを取り消すことができます。あなたのアカウントからログアウトすることによって自分のセッションを取り消すことができます。",
|
||||
"revoke-session": "Revoke Session",
|
||||
"browser-version-on-platform": "%1 %2 on %3",
|
||||
"consent.title": "あなたの権利& 同意",
|
||||
"revoke-session": "セッションを無効にする",
|
||||
"browser-version-on-platform": "%3 上の %1 %2",
|
||||
"consent.title": "あなたの権利と同意",
|
||||
"consent.lead": "このコミュニティフォーラムはあなたの個人情報を収集し処理します。",
|
||||
"consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights & Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
|
||||
"consent.email-intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.",
|
||||
"consent.intro": "この情報は、このコミュニティでの体験をパーソナライズし、投稿をユーザーアカウントに関連付けるために厳密に使用します。登録時にユーザー名とメールアドレスの提供を求められました。このウェブサイトでユーザープロフィールを完成させるために、オプションで追加情報を提供することもできます。<br /><br />この情報はユーザーアカウントの存続期間中保持され、アカウントを削除することでいつでも同意を撤回できます。いつでも、権利と同意ページからこのウェブサイトへの貢献のコピーをリクエストできます。<br /><br />ご質問やご不明な点がある場合は、このフォーラムの管理チームまでお問い合わせください。",
|
||||
"consent.email-intro": "更新の提供や、あなたに関連する新しいアクティビティの通知のために、登録メールアドレスにメールを送信することがあります。ユーザー設定ページで、コミュニティダイジェストの頻度(完全に無効化を含む)と、メールで受け取る通知の種類をカスタマイズできます。",
|
||||
"consent.digest-frequency": "ユーザー設定で明示的に変更されていない限り、このコミュニティは %1 ごとに電子メールダイジェストを配信します。",
|
||||
"consent.digest-off": "ユーザー設定で明示的に変更されていない限り、このコミュニティは電子メールダイジェストを送信しません。",
|
||||
"consent.received": "あなたはあなたの情報を収集し処理するためにこのウェブサイトに同意を提供しました。 追加の操作は必要ありません。",
|
||||
"consent.received": "このウェブサイトにデータ収集・処理の同意をいただいています。追加の操作は必要ありません。",
|
||||
"consent.not-received": "データの収集と処理に関する同意を提供していません。 このウェブサイトの管理者は、いつでも一般データ保護規則に準拠するためにあなたのアカウントを削除することを選択することができます。",
|
||||
"consent.give": "同意を与える",
|
||||
"consent.give": "同意する",
|
||||
"consent.right-of-access": "あなたにはアクセス権があります",
|
||||
"consent.right-of-access-description": "あなたは要求に応じてこのウェブサイトによって収集されたデータにアクセスする権利があります。 下の適切なボタンをクリックしてこのデータのコピーを取得することができます。",
|
||||
"consent.right-to-rectification": "あなたには矯正の権利があります",
|
||||
"consent.right-to-rectification-description": "あなたは私たちに提供された不正確なデータを変更または更新する権利を有します。 あなたのプロフィールは編集して更新することができ、投稿内容はいつでも編集することができます。 そうでない場合は、このサイトの管理チームにお問い合わせください。",
|
||||
"consent.right-of-access-description": "このウェブサイトが収集したデータに、要求に応じてアクセスする権利があります。下のボタンからデータのコピーを取得できます。",
|
||||
"consent.right-to-rectification": "あなたには訂正を求める権利があります",
|
||||
"consent.right-to-rectification-description": "提供した不正確なデータを変更・更新する権利があります。プロフィールは編集で更新でき、投稿内容もいつでも編集できます。できない場合は、このサイトの管理チームにお問い合わせください。",
|
||||
"consent.right-to-erasure": "あなたには消去する権利があります",
|
||||
"consent.right-to-erasure-description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.",
|
||||
"consent.right-to-erasure-description": "いつでも、アカウントを削除することでデータ収集および/または処理への同意を撤回できます。個人プロフィールは削除できますが、投稿したコンテンツは残ります。アカウント<strong>と</strong>コンテンツの両方を削除したい場合は、このウェブサイトの管理チームにお問い合わせください。",
|
||||
"consent.right-to-data-portability": "あなたはデータを移動する権利があります",
|
||||
"consent.right-to-data-portability-description": "あなたは私たちにあなたとあなたのアカウントに関して収集されたデータの機械読み取り可能なエクスポートを要求することができます。 下の適切なボタンをクリックしてそれを行うことができます。",
|
||||
"consent.export-profile": "Export Profile (.json)",
|
||||
"consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.",
|
||||
"consent.export-profile": "プロフィールをエクスポート(.json)",
|
||||
"consent.export-profile-success": "プロフィールをエクスポート中です。完了すると通知が届きます。",
|
||||
"consent.export-uploads": "アップデートしたコンテンツをエクスポート(.zip)",
|
||||
"consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.",
|
||||
"consent.export-uploads-success": "アップロードをエクスポート中です。完了すると通知が届きます。",
|
||||
"consent.export-posts": "投稿をエクスポート (.csv)",
|
||||
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
|
||||
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
|
||||
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
|
||||
"emailUpdate.required": "<strong>This field is required</strong>.",
|
||||
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.",
|
||||
"emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.",
|
||||
"emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below."
|
||||
"consent.export-posts-success": "投稿をエクスポート中です。完了すると通知が届きます。",
|
||||
"emailUpdate.intro": "以下にメールアドレスを入力してください。このフォーラムでは、予定されたダイジェストと通知、およびパスワード紛失時のアカウント復旧にメールアドレスを使用します。",
|
||||
"emailUpdate.optional": "<strong>このフィールドは任意です</strong>。メールアドレスの提供は必須ではありませんが、確認済みメールがないとアカウントを復旧したりメールでログインしたりできません。",
|
||||
"emailUpdate.required": "<strong>このフィールドは必須です</strong>。",
|
||||
"emailUpdate.change-instructions": "入力したメールアドレスに確認メールが送信されます。そのリンクにアクセスするとメールアドレスの所有権が確認され、アカウントで有効になります。いつでもアカウントページから登録メールを更新できます。",
|
||||
"emailUpdate.password-challenge": "アカウントの所有権を確認するためにパスワードを入力してください。",
|
||||
"emailUpdate.pending": "メールアドレスはまだ確認されていませんが、確認を求めるメールが送信されました。そのリクエストを無効にして新しい確認リクエストを送信する場合は、以下のフォームに記入してください。"
|
||||
}
|
||||
@@ -56,7 +56,7 @@
|
||||
"federation/pruning": "存储",
|
||||
"federation/safety": "信任与安全",
|
||||
"federation/analytics": "分析",
|
||||
"federation/errors": "Errors",
|
||||
"federation/errors": "错误",
|
||||
|
||||
"section-appearance": "界面",
|
||||
"appearance/themes": "主题",
|
||||
|
||||
@@ -68,15 +68,15 @@
|
||||
"analytics.intro": "本页面概述了您的论坛与其他实例/服务器之间的联合状态",
|
||||
"analytics.details": "NodeBB 会跟踪 ActivityPub 的接收和发送活动,您可以按主机名查看每小时或每日的统计数据。请注意,这些指标仅在接收和发送<em>成功</em>时才会增加。",
|
||||
"analytics.by-hostname": "按主机名筛选",
|
||||
"analytics.in": "Incoming",
|
||||
"analytics.out": "Outgoing",
|
||||
"analytics.in": "入站",
|
||||
"analytics.out": "出站",
|
||||
"analytics.received": "已接收的活动",
|
||||
"analytics.sent": "已发送的活动",
|
||||
"analytics.errors": "Errors",
|
||||
"analytics.errors": "错误",
|
||||
"analytics.term": "时间尺度",
|
||||
"analytics.hourly": "每时",
|
||||
"analytics.daily": "每日",
|
||||
|
||||
"errors.intro": "The following %1 error(s) were recorded by this instance within the last 24 hours.",
|
||||
"errors.payload-gone": "The payload for this error no longer exists."
|
||||
"errors.intro": "该实例在过去 24 小时内记录了以下 %1 个错误。",
|
||||
"errors.payload-gone": "此错误的负载已不存在。"
|
||||
}
|
||||
@@ -267,5 +267,5 @@
|
||||
"activitypub.pubKey-not-found": "无法解析公钥,因此无法进行有效载荷验证。",
|
||||
"activitypub.origin-mismatch": "接收对象的原点与发送者的原点不一致",
|
||||
"activitypub.not-implemented": "请求被拒绝的原因是接收方服务器没有执行该请求或其中的某个方面",
|
||||
"activitypub.orphan": "The received object is not associated with any known local user."
|
||||
"activitypub.orphan": "收到的对象未与任何已知的本地用户相关联。"
|
||||
}
|
||||
@@ -158,6 +158,10 @@ paths:
|
||||
$ref: 'read/admin/federation/pruning.yaml'
|
||||
/api/admin/federation/safety:
|
||||
$ref: 'read/admin/federation/safety.yaml'
|
||||
/api/admin/federation/analytics:
|
||||
$ref: 'read/admin/federation/analytics.yaml'
|
||||
/api/admin/federation/errors:
|
||||
$ref: 'read/admin/federation/errors.yaml'
|
||||
"/api/admin/appearance/themes":
|
||||
$ref: 'read/admin/appearance/themes.yaml'
|
||||
"/api/admin/appearance/skins":
|
||||
@@ -381,4 +385,4 @@ paths:
|
||||
/api/ap:
|
||||
$ref: 'read/ap.yaml'
|
||||
/api/outgoing:
|
||||
$ref: 'read/outgoing.yaml'
|
||||
$ref: 'read/outgoing.yaml'
|
||||
|
||||
50
public/openapi/read/admin/federation/analytics.yaml
Normal file
50
public/openapi/read/admin/federation/analytics.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
get:
|
||||
tags:
|
||||
- admin
|
||||
summary: Get federation analytics data
|
||||
parameters:
|
||||
- name: host
|
||||
in: query
|
||||
description: The hostname to filter analytics for
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: example.org
|
||||
- name: term
|
||||
in: query
|
||||
description: The time period to retrieve analytics for (daily or hourly)
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
example: hourly
|
||||
responses:
|
||||
"200":
|
||||
description: Analytics data
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
instances:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
received:
|
||||
type: array
|
||||
items:
|
||||
type: number
|
||||
receivedErr:
|
||||
type: array
|
||||
items:
|
||||
type: number
|
||||
sent:
|
||||
type: array
|
||||
items:
|
||||
type: number
|
||||
hideSave:
|
||||
type: number
|
||||
description: A flag to instruct the template engine to hide the save button
|
||||
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
|
||||
29
public/openapi/read/admin/federation/errors.yaml
Normal file
29
public/openapi/read/admin/federation/errors.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
get:
|
||||
tags:
|
||||
- admin
|
||||
summary: Get federation error data
|
||||
responses:
|
||||
"200":
|
||||
description: Error data
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
allOf:
|
||||
- type: object
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
errors:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
stack:
|
||||
type: string
|
||||
hostname:
|
||||
type: string
|
||||
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps
|
||||
@@ -104,7 +104,6 @@ federationController.errors = async function (req, res) {
|
||||
|
||||
res.render('admin/federation/errors', {
|
||||
title: '[[admin/menu:federation/errors]]',
|
||||
hideSave: 1,
|
||||
errors,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -464,7 +464,11 @@ describe('Inbox', () => {
|
||||
const object = await activitypub.mocks.notes.public(this.postData);
|
||||
const { activity } = helpers.mocks.like({ object });
|
||||
this.voterUid = activity.actor;
|
||||
await activitypub.inbox.like({ body: activity });
|
||||
try {
|
||||
await activitypub.inbox.like({ body: activity });
|
||||
} catch (e) {
|
||||
// expected
|
||||
}
|
||||
});
|
||||
|
||||
after(async function () {
|
||||
|
||||
@@ -122,7 +122,10 @@ describe('Privilege logic for remote users/content (ActivityPub)', () => {
|
||||
object: note,
|
||||
}));
|
||||
|
||||
await activitypub.inbox.update({ body: activity });
|
||||
assert.rejects(
|
||||
activitypub.inbox.update({ body: activity }),
|
||||
{ message: '[[error:no-privileges]]' },
|
||||
);
|
||||
|
||||
const postData = await posts.getPostData(note.id);
|
||||
assert.strictEqual(postData.content, oldContent);
|
||||
@@ -154,7 +157,10 @@ describe('Privilege logic for remote users/content (ActivityPub)', () => {
|
||||
|
||||
it('should ignore remote deletion of said note', async () => {
|
||||
({ activity } = helpers.mocks.delete({ object: note }));
|
||||
await activitypub.inbox.delete({ body: activity });
|
||||
assert.rejects(
|
||||
activitypub.inbox.delete({ body: activity }),
|
||||
{ message: '[[error:no-privileges]]' },
|
||||
);
|
||||
|
||||
const exists = await posts.exists(note.id);
|
||||
assert.strictEqual(exists, true);
|
||||
|
||||
@@ -4,9 +4,9 @@ const assert = require('assert');
|
||||
const nconf = require('nconf');
|
||||
const { createHash } = require('crypto');
|
||||
|
||||
const db = require('../mocks/databasemock');
|
||||
const user = require('../../src/user');
|
||||
const utils = require('../../src/utils');
|
||||
const db = require('../../src/database');
|
||||
const activitypub = require('../../src/activitypub');
|
||||
|
||||
describe('http signature signing and verification', () => {
|
||||
@@ -42,13 +42,13 @@ describe('http signature signing and verification', () => {
|
||||
const endpoint = `${nconf.get('url')}/uid/${uid}/inbox`;
|
||||
const payload = { foo: 'bar' };
|
||||
const keyData = await activitypub.getPrivateKey('uid', uid);
|
||||
const { digest } = await activitypub.sign(keyData, endpoint, payload);
|
||||
const hash = createHash('sha256');
|
||||
hash.update(JSON.stringify(payload));
|
||||
const checksum = hash.digest('base64');
|
||||
const checksum = `SHA-256=${hash.digest('base64')}`;
|
||||
const { digest } = await activitypub.sign(keyData, endpoint, checksum);
|
||||
|
||||
assert(digest);
|
||||
assert.strictEqual(digest, `SHA-256=${checksum}`);
|
||||
assert.strictEqual(digest, checksum);
|
||||
});
|
||||
|
||||
it('should create a key for NodeBB itself if a uid of 0 is passed in', async () => {
|
||||
|
||||
Reference in New Issue
Block a user