Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master

th-downstream
Jenkins 7 years ago
commit a7b8cb9493

@ -0,0 +1,18 @@
# frozen_string_literal: true
class ActivityPub::FollowsController < Api::BaseController
include SignatureVerification
def show
render(
json: FollowRequest.includes(:account).references(:account).find_by!(
id: params.require(:id),
accounts: { domain: nil, username: params.require(:account_username) },
target_account: signed_request_account
),
serializer: ActivityPub::FollowSerializer,
adapter: ActivityPub::Adapter,
content_type: 'application/activity+json'
)
end
end

@ -50,6 +50,7 @@
"column_header.unpin": "فك التدبيس",
"column_subheading.navigation": "التصفح",
"column_subheading.settings": "الإعدادات",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.",
"compose_form.lock_disclaimer.lock": "مقفل",
"compose_form.placeholder": "فيمَ تفكّر؟",
@ -213,6 +214,7 @@
"search_popout.tips.user": "مستخدِم",
"search_results.total": "{count, number} {count, plural, one {result} و {results}}",
"standalone.public_title": "نظرة على ...",
"status.block": "Block @{name}",
"status.cannot_reblog": "تعذرت ترقية هذا المنشور",
"status.delete": "إحذف",
"status.embed": "إدماج",
@ -221,6 +223,7 @@
"status.media_hidden": "الصورة مستترة",
"status.mention": "أذكُر @{name}",
"status.more": "المزيد",
"status.mute": "Mute @{name}",
"status.mute_conversation": "كتم المحادثة",
"status.open": "وسع هذه المشاركة",
"status.pin": "تدبيس على الملف الشخصي",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "Какво си мислиш?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Изтриване",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media hidden",
"status.mention": "Споменаване",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Deslligar",
"column_subheading.navigation": "Navegació",
"column_subheading.settings": "Configuració",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges a seguidors.",
"compose_form.lock_disclaimer.lock": "bloquejat",
"compose_form.placeholder": "En què estàs pensant?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "usuari",
"search_results.total": "{count, number} {count, plural, un {result} altres {results}}",
"standalone.public_title": "Una mirada a l'interior ...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Aquesta publicació no pot ser retootejada",
"status.delete": "Esborrar",
"status.embed": "Incrustar",
@ -221,6 +223,7 @@
"status.media_hidden": "Multimèdia amagat",
"status.mention": "Esmentar @{name}",
"status.more": "Més",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Silenciar conversació",
"status.open": "Ampliar aquest estat",
"status.pin": "Fixat en el perfil",

@ -50,6 +50,7 @@
"column_header.unpin": "Lösen",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Einstellungen",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Dein Profil ist nicht {locked}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
"compose_form.lock_disclaimer.lock": "gesperrt",
"compose_form.placeholder": "Worüber möchtest du schreiben?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}",
"standalone.public_title": "Ein kleiner Einblick …",
"status.block": "Block @{name}",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.delete": "Löschen",
"status.embed": "Einbetten",
@ -221,6 +223,7 @@
"status.media_hidden": "Medien versteckt",
"status.mention": "@{name} erwähnen",
"status.more": "Mehr",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Thread stummschalten",
"status.open": "Diesen Beitrag öffnen",
"status.pin": "Im Profil anheften",

@ -727,6 +727,10 @@
{
"defaultMessage": "locked",
"id": "compose_form.lock_disclaimer.lock"
},
{
"defaultMessage": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"id": "compose_form.hashtag_warning"
}
],
"path": "app/javascript/mastodon/features/compose/containers/warning_container.json"
@ -1053,7 +1057,7 @@
"id": "lists.delete"
},
{
"defaultMessage": "There is nothing in this list yet.",
"defaultMessage": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"id": "empty_column.list"
}
],
@ -1244,6 +1248,22 @@
"defaultMessage": "Favourite",
"id": "status.favourite"
},
{
"defaultMessage": "Mute @{name}",
"id": "status.mute"
},
{
"defaultMessage": "Mute conversation",
"id": "status.mute_conversation"
},
{
"defaultMessage": "Unmute conversation",
"id": "status.unmute_conversation"
},
{
"defaultMessage": "Block @{name}",
"id": "status.block"
},
{
"defaultMessage": "Report @{name}",
"id": "status.report"
@ -1276,6 +1296,14 @@
{
"defaultMessage": "Are you sure you want to delete this status?",
"id": "confirmations.delete.message"
},
{
"defaultMessage": "Block",
"id": "confirmations.block.confirm"
},
{
"defaultMessage": "Are you sure you want to block {name}?",
"id": "confirmations.block.message"
}
],
"path": "app/javascript/mastodon/features/status/index.json"

@ -54,6 +54,7 @@
"column_subheading.lists": "Lists",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "What is on your mind?",
@ -220,6 +221,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
"status.embed": "Embed",
@ -228,6 +230,7 @@
"status.media_hidden": "Media hidden",
"status.mention": "Mention @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Depingli",
"column_subheading.navigation": "Navigado",
"column_subheading.settings": "Agordoj",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Via konta ne estas ŝlosita. Iu ajn povas sekvi vin por vidi viajn privatajn pepojn.",
"compose_form.lock_disclaimer.lock": "ŝlosita",
"compose_form.placeholder": "Pri kio vi pensas?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "uzanto",
"search_results.total": "{count, number} {count, plural, one {rezultato} other {rezultatoj}}",
"standalone.public_title": "Rigardeti…",
"status.block": "Block @{name}",
"status.cannot_reblog": "Tiun publikaĵon oni ne povas diskonigi",
"status.delete": "Forigi",
"status.embed": "Enmeti",
@ -221,6 +223,7 @@
"status.media_hidden": "Sonbildaĵo kaŝita",
"status.mention": "Mencii @{name}",
"status.more": "Pli",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Silentigi konversacion",
"status.open": "Disfaldi statkonigon",
"status.pin": "Pingli al la profilo",

@ -50,6 +50,7 @@
"column_header.unpin": "Dejar de fijar",
"column_subheading.navigation": "Navegación",
"column_subheading.settings": "Ajustes",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
"compose_form.lock_disclaimer.lock": "bloqueado",
"compose_form.placeholder": "¿En qué estás pensando?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "usuario",
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
"standalone.public_title": "Un pequeño vistazo...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Este toot no puede retootearse",
"status.delete": "Borrar",
"status.embed": "Incrustado",
@ -221,6 +223,7 @@
"status.media_hidden": "Contenido multimedia oculto",
"status.mention": "Mencionar",
"status.more": "Más",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Silenciar conversación",
"status.open": "Expandir estado",
"status.pin": "Fijar",

@ -50,6 +50,7 @@
"column_header.unpin": "رهاکردن",
"column_subheading.navigation": "گشت و گذار",
"column_subheading.settings": "تنظیمات",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "حساب شما {locked} نیست. هر کسی می‌تواند پیگیر شما شود و نوشته‌های ویژهٔ پیگیران شما را ببیند.",
"compose_form.lock_disclaimer.lock": "قفل",
"compose_form.placeholder": "تازه چه خبر؟",
@ -213,6 +214,7 @@
"search_popout.tips.user": "کاربر",
"search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}",
"standalone.public_title": "نگاهی به کاربران این سرور...",
"status.block": "Block @{name}",
"status.cannot_reblog": "این نوشته را نمی‌شود بازبوقید",
"status.delete": "پاک‌کردن",
"status.embed": "جاگذاری",
@ -221,6 +223,7 @@
"status.media_hidden": "تصویر پنهان شده",
"status.mention": "نام‌بردن از @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "بی‌صداکردن گفتگو",
"status.open": "این نوشته را باز کن",
"status.pin": "نوشتهٔ ثابت نمایه",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "Mitä sinulla on mielessä?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Poista",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media hidden",
"status.mention": "Mainitse @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Retirer",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Paramètres",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Votre compte nest pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.",
"compose_form.lock_disclaimer.lock": "verrouillé",
"compose_form.placeholder": "Quavez-vous en tête?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "utilisateur⋅ice",
"search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
"standalone.public_title": "Jeter un coup dœil…",
"status.block": "Block @{name}",
"status.cannot_reblog": "Cette publication ne peut être boostée",
"status.delete": "Effacer",
"status.embed": "Intégrer",
@ -221,6 +223,7 @@
"status.media_hidden": "Média caché",
"status.mention": "Mentionner",
"status.more": "Plus",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Masquer la conversation",
"status.open": "Déplier ce statut",
"status.pin": "Épingler sur le profil",

@ -50,6 +50,7 @@
"column_header.unpin": "Soltar",
"column_subheading.navigation": "Navegación",
"column_subheading.settings": "Axustes",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "A súa conta non está {locked}. Calquera pode seguila para ver as súas mensaxes só-para-seguidoras.",
"compose_form.lock_disclaimer.lock": "bloqueado",
"compose_form.placeholder": "A qué andas?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "usuaria",
"search_results.total": "{count, number} {count,plural,one {result} outros {results}}",
"standalone.public_title": "Ollada dentro...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Esta mensaxe non pode ser promocionada",
"status.delete": "Eliminar",
"status.embed": "Incrustar",
@ -221,6 +223,7 @@
"status.media_hidden": "Medios ocultos",
"status.mention": "Mencionar @{name}",
"status.more": "Máis",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Acalar conversa",
"status.open": "Expandir este estado",
"status.pin": "Fixar no perfil",

@ -50,6 +50,7 @@
"column_header.unpin": "שחרור קיבוע",
"column_subheading.navigation": "ניווט",
"column_subheading.settings": "אפשרויות",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.",
"compose_form.lock_disclaimer.lock": "נעול",
"compose_form.placeholder": "מה עובר לך בראש?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "משתמש(ת)",
"search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}",
"standalone.public_title": "הצצה פנימה...",
"status.block": "Block @{name}",
"status.cannot_reblog": "לא ניתן להדהד הודעה זו",
"status.delete": "מחיקה",
"status.embed": "הטמעה",
@ -221,6 +223,7 @@
"status.media_hidden": "מדיה מוסתרת",
"status.mention": "פניה אל @{name}",
"status.more": "עוד",
"status.mute": "Mute @{name}",
"status.mute_conversation": "השתקת שיחה",
"status.open": "הרחבת הודעה",
"status.pin": "לקבע באודות",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigacija",
"column_subheading.settings": "Postavke",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Tvoj račun nije {locked}. Svatko te može slijediti kako bi vidio postove namijenjene samo tvojim sljedbenicima.",
"compose_form.lock_disclaimer.lock": "zaključan",
"compose_form.placeholder": "Što ti je na umu?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Ovaj post ne može biti boostan",
"status.delete": "Obriši",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Sakriven media sadržaj",
"status.mention": "Spomeni @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Utišaj razgovor",
"status.open": "Proširi ovaj status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "Mire gondolsz?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Törlés",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media hidden",
"status.mention": "Említés",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigasi",
"column_subheading.settings": "Pengaturan",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.",
"compose_form.lock_disclaimer.lock": "dikunci",
"compose_form.placeholder": "Apa yang ada di pikiran anda?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count} {count, plural, one {hasil} other {hasil}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Hapus",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media disembunyikan",
"status.mention": "Balasan @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Tampilkan status ini",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "Quo esas en tua spirito?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Efacar",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Kontenajo celita",
"status.mention": "Mencionar @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Detaligar ca mesajo",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "A cosa stai pensando?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count} {count, plural, one {risultato} other {risultati}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Elimina",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Allegato nascosto",
"status.mention": "Nomina @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Espandi questo post",
"status.pin": "Pin on profile",

@ -54,6 +54,7 @@
"column_subheading.lists": "リスト",
"column_subheading.navigation": "ナビゲーション",
"column_subheading.settings": "設定",
"compose_form.hashtag_warning": "このトゥートは未収載なのでハッシュタグの一覧に表示されません。公開トゥートだけがハッシュタグで検索できます。",
"compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。",
"compose_form.lock_disclaimer.lock": "非公開",
"compose_form.placeholder": "今なにしてる?",
@ -96,7 +97,7 @@
"empty_column.hashtag": "このハッシュタグはまだ使われていません。",
"empty_column.home": "まだ誰もフォローしていません。{public}を見に行くか、検索を使って他のユーザーを見つけましょう。",
"empty_column.home.public_timeline": "連合タイムライン",
"empty_column.list": "このリストにはまだなにもありません。",
"empty_column.list": "このリストにはまだなにもありません。このリストのメンバーが新しいトゥートをするとここに表示されます。",
"empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。",
"empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のインスタンスのユーザーをフォローしたりしていっぱいにしましょう",
"follow_request.authorize": "許可",
@ -220,6 +221,7 @@
"search_popout.tips.user": "ユーザー",
"search_results.total": "{count, number}件の結果",
"standalone.public_title": "今こんな話をしています...",
"status.block": "@{name}をブロック",
"status.cannot_reblog": "この投稿はブーストできません",
"status.delete": "削除",
"status.embed": "埋め込み",
@ -228,6 +230,7 @@
"status.media_hidden": "非表示のメディア",
"status.mention": "返信",
"status.more": "もっと見る",
"status.mute": "@{name}をミュート",
"status.mute_conversation": "会話をミュート",
"status.open": "詳細を表示",
"status.pin": "プロフィールに固定表示",

@ -50,6 +50,7 @@
"column_header.unpin": "고정 해제",
"column_subheading.navigation": "내비게이션",
"column_subheading.settings": "설정",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "이 계정은 {locked}로 설정 되어 있지 않습니다. 누구나 이 계정을 팔로우 할 수 있으며, 팔로워 공개의 포스팅을 볼 수 있습니다.",
"compose_form.lock_disclaimer.lock": "비공개",
"compose_form.placeholder": "지금 무엇을 하고 있나요?",

@ -50,6 +50,7 @@
"column_header.unpin": "Losmaken",
"column_subheading.navigation": "Navigatie",
"column_subheading.settings": "Instellingen",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Jouw account is niet {locked}. Iedereen kan jou volgen en toots zien die je alleen aan volgers hebt gericht.",
"compose_form.lock_disclaimer.lock": "besloten",
"compose_form.placeholder": "Wat wil je kwijt?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "gebruiker",
"search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}",
"standalone.public_title": "Een kijkje binnenin...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Deze toot kan niet geboost worden",
"status.delete": "Verwijderen",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media verborgen",
"status.mention": "Vermeld @{name}",
"status.more": "Meer",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Negeer conversatie",
"status.open": "Toot volledig tonen",
"status.pin": "Aan profielpagina vastmaken",

@ -50,6 +50,7 @@
"column_header.unpin": "Løsne",
"column_subheading.navigation": "Navigasjon",
"column_subheading.settings": "Innstillinger",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Din konto er ikke {locked}. Hvem som helst kan følge deg og se dine private poster.",
"compose_form.lock_disclaimer.lock": "låst",
"compose_form.placeholder": "Hva har du på hjertet?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Denne posten kan ikke fremheves",
"status.delete": "Slett",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media skjult",
"status.mention": "Nevn @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Demp samtale",
"status.open": "Utvid denne statusen",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Despenjar",
"column_subheading.navigation": "Navigacion",
"column_subheading.settings": "Paramètres",
"compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap etiqueta estant ques pas listat. Òm pas cercar que los tuts publics per etiqueta.",
"compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.",
"compose_form.lock_disclaimer.lock": "clavat",
"compose_form.placeholder": "A de qué pensatz?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "utilizaire",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"standalone.public_title": "Una ulhada dedins…",
"status.block": "Blocar @{name}",
"status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
"status.delete": "Escafar",
"status.embed": "Embarcar",
@ -221,6 +223,7 @@
"status.media_hidden": "Mèdia rescondut",
"status.mention": "Mencionar",
"status.more": "Mai",
"status.mute": "Rescondre @{name}",
"status.mute_conversation": "Rescondre la conversacion",
"status.open": "Desplegar aqueste estatut",
"status.pin": "Penjar al perfil",

@ -50,6 +50,7 @@
"column_header.unpin": "Cofnij przypięcie",
"column_subheading.navigation": "Nawigacja",
"column_subheading.settings": "Ustawienia",
"compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hashtagami, ponieważ jest oznaczony jako niewidoczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hashtagów.",
"compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię śledzi, może wyświetlać Twoje wpisy przeznaczone tylko dla śledzących.",
"compose_form.lock_disclaimer.lock": "zablokowane",
"compose_form.placeholder": "Co Ci chodzi po głowie?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "użytkownik",
"search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}",
"standalone.public_title": "Spojrzenie w głąb…",
"status.block": "Zablokuj @{name}",
"status.cannot_reblog": "Ten wpis nie może zostać podbity",
"status.delete": "Usuń",
"status.embed": "Osadź",
@ -221,6 +223,7 @@
"status.media_hidden": "Zawartość multimedialna ukryta",
"status.mention": "Wspomnij o @{name}",
"status.more": "Więcej",
"status.mute": "Wycisz @{name}",
"status.mute_conversation": "Wycisz konwersację",
"status.open": "Rozszerz ten wpis",
"status.pin": "Przypnij do profilu",

@ -50,6 +50,7 @@
"column_header.unpin": "Desafixar",
"column_subheading.navigation": "Navegação",
"column_subheading.settings": "Configurações",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "A sua conta não está {locked}. Qualquer pessoa pode te seguir e visualizar postagens direcionadas a apenas seguidores.",
"compose_form.lock_disclaimer.lock": "trancada",
"compose_form.placeholder": "No que você está pensando?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "usuário",
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
"standalone.public_title": "Dê uma espiada...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Esta postagem não pode ser compartilhada",
"status.delete": "Excluir",
"status.embed": "Incorporar",
@ -221,6 +223,7 @@
"status.media_hidden": "Mídia escondida",
"status.mention": "Mencionar @{name}",
"status.more": "Mais",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Silenciar conversa",
"status.open": "Expandir",
"status.pin": "Fixar no perfil",

@ -50,6 +50,7 @@
"column_header.unpin": "Remover fixar",
"column_subheading.navigation": "Navegação",
"column_subheading.settings": "Preferências",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te e ver as publicações direcionadas apenas a seguidores.",
"compose_form.lock_disclaimer.lock": "bloqueada",
"compose_form.placeholder": "Em que estás a pensar?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "utilizador",
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
"standalone.public_title": "Espreitar lá dentro...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Este post não pode ser partilhado",
"status.delete": "Eliminar",
"status.embed": "Incorporar",
@ -221,6 +223,7 @@
"status.media_hidden": "Media escondida",
"status.mention": "Mencionar @{name}",
"status.more": "Mais",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Silenciar conversa",
"status.open": "Expandir",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Открепить",
"column_subheading.navigation": "Навигация",
"column_subheading.settings": "Настройки",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.",
"compose_form.lock_disclaimer.lock": "закрыт",
"compose_form.placeholder": "О чем Вы думаете?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "пользователь",
"search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}",
"standalone.public_title": "Прямо сейчас",
"status.block": "Block @{name}",
"status.cannot_reblog": "Этот статус не может быть продвинут",
"status.delete": "Удалить",
"status.embed": "Встроить",
@ -221,6 +223,7 @@
"status.media_hidden": "Медиаконтент скрыт",
"status.mention": "Упомянуть @{name}",
"status.more": "Больше",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Заглушить тред",
"status.open": "Развернуть статус",
"status.pin": "Закрепить в профиле",

@ -7,17 +7,22 @@
"account.followers": "Sledujúci",
"account.follows": "Sledovaní",
"account.follows_you": "Sleduje teba",
"account.hide_reblogs": "Hide boosts from @{name}",
"account.media": "Média",
"account.mention": "Napísať @{name}",
"account.moved_to": "{name} has moved to:",
"account.mute": "Ignorovať @{name}",
"account.mute_notifications": "Mute notifications from @{name}",
"account.posts": "Správ",
"account.report": "Nahlásiť @{name}",
"account.requested": "Čaká na schválenie. Klikni na zrušenie žiadosti",
"account.share": "Zdieľať @{name} profil",
"account.show_reblogs": "Show boosts from @{name}",
"account.unblock": "Odblokovať @{name}",
"account.unblock_domain": "Prestať blokovať {domain}",
"account.unfollow": "Prestať nasledovať",
"account.unmute": "Prestať ignorovať @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}",
"account.view_full_profile": "Pozri celý profil",
"boost_modal.combo": "Nabudúce môžeš kliknúť {combo} a preskočiť",
"bundle_column_error.body": "Nastala chyba pri načítaní tohto komponentu.",
@ -31,6 +36,7 @@
"column.favourites": "Obľúbené",
"column.follow_requests": "Žiadosti",
"column.home": "Moja časová os",
"column.lists": "Lists",
"column.mutes": "Ignorovaní používatelia",
"column.notifications": "Notifikácie",
"column.pins": "Pripnuté toots",
@ -44,6 +50,7 @@
"column_header.unpin": "Odopnúť",
"column_subheading.navigation": "Navigácia",
"column_subheading.settings": "Nastavenia",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Tvoj účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
"compose_form.lock_disclaimer.lock": "zamknutý",
"compose_form.placeholder": "Čo máš na mysli?",
@ -57,6 +64,8 @@
"confirmations.block.message": "Naozaj chceš blokovať {name}?",
"confirmations.delete.confirm": "Zmazať",
"confirmations.delete.message": "Naozaj chceš zmazať túto správu?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.domain_block.confirm": "Skryť celú doménu",
"confirmations.domain_block.message": "Si si naozaj istý, že chceš blokovať celú {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať daných používateľov.",
"confirmations.mute.confirm": "Ignoruj",
@ -82,8 +91,8 @@
"empty_column.community": "Lokálna časová os je prázdna. Napíš niečo aby sa to začalo hýbať!",
"empty_column.hashtag": "Ešte nič nie je v tomto hashtag-u.",
"empty_column.home": "Ešte nesleduješ nikoho. Pre začiatok pozri {public} alebo použi vyhľadávanie aby si našiel ostatných používateľov.",
"empty_column.home.inactivity": "Tvoja časová os je prázdna. Ak si bol dlho neaktívny, za krátku chvíľku bude obnovená.",
"empty_column.home.public_timeline": "verejnú časovú os",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
"empty_column.notifications": "Nemáš žiadne notifikácie. Napíš niekomu, nasleduj niekoho alebo komunikuj s ostatnými.",
"empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne alebo začni sledovať používateľov z iných Mastodon serverov aby tu niečo bolo",
"follow_request.authorize": "Potvrdiť",
@ -99,18 +108,46 @@
"home.column_settings.show_reblogs": "Zobraziť boosts",
"home.column_settings.show_replies": "Zobraziť odpovede",
"home.settings": "Nastavenia stĺpcov",
"keyboard_shortcuts.back": "to navigate back",
"keyboard_shortcuts.boost": "to boost",
"keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.down": "to move down in the list",
"keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "to favourite",
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
"keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.mention": "to mention author",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.toot": "to start a brand new toot",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list",
"lightbox.close": "Zavrieť",
"lightbox.next": "Ďalší",
"lightbox.previous": "Predchádzajúci",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
"lists.edit": "Edit list",
"lists.new.create": "Add list",
"lists.new.title_placeholder": "New list title",
"lists.search": "Search among people you follow",
"lists.subheading": "Your lists",
"loading_indicator.label": "Nahrávam...",
"media_gallery.toggle_visible": "Zapnúť/Vypnúť viditeľnosť",
"missing_indicator.label": "Nenájdené",
"mute_modal.hide_notifications": "Hide notifications from this user?",
"navigation_bar.blocks": "Blokovaní používatelia",
"navigation_bar.community_timeline": "Lokálna časová os",
"navigation_bar.edit_profile": "Upraviť profil",
"navigation_bar.favourites": "Obľúbené",
"navigation_bar.follow_requests": "Žiadosti",
"navigation_bar.info": "O tomto Mastodon serveri",
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
"navigation_bar.lists": "Lists",
"navigation_bar.logout": "Odhlásiť",
"navigation_bar.mutes": "Ignorovaní používatelia",
"navigation_bar.pins": "Pripnuté toots",
@ -160,13 +197,24 @@
"privacy.public.short": "Verejne",
"privacy.unlisted.long": "Neposielať verejne",
"privacy.unlisted.short": "Nie je v zozname",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.just_now": "now",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Zrušiť",
"report.placeholder": "Ďalšie komentáre",
"report.submit": "Poslať",
"report.target": "Reportovať {target}",
"search.placeholder": "Hľadaj",
"search_popout.search_format": "Advanced search format",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.user": "user",
"search_results.total": "{count, number} nájdených",
"standalone.public_title": "Čo tam nájdeš...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Tento príspevok nemôže byť re-tootnutý",
"status.delete": "Zmazať",
"status.embed": "Embed",
@ -174,6 +222,8 @@
"status.load_more": "Zobraziť viac",
"status.media_hidden": "Skryté médiá",
"status.mention": "Napísať @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Ignorovať konverzáciu",
"status.open": "Otvoriť",
"status.pin": "Pripnúť na profil",
@ -194,8 +244,10 @@
"tabs_bar.home": "Domov",
"tabs_bar.local_timeline": "Local",
"tabs_bar.notifications": "Notifikácie",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Ťahaj a pusti pre nahratie",
"upload_button.label": "Pridať",
"upload_form.description": "Describe for the visually impaired",
"upload_form.undo": "Späť",
"upload_progress.label": "Nahrávam...",
"video.close": "Zavrieť video",
@ -206,9 +258,5 @@
"video.mute": "Vypnúť zvuk",
"video.pause": "Pauza",
"video.play": "Prehrať",
"video.unmute": "Zapnúť zvuk",
"video_player.expand": "Zväčšiť video",
"video_player.toggle_sound": "Zapnúť/Vypnúť zvuk",
"video_player.toggle_visible": "Zapnúť/Vypnúť video",
"video_player.video_error": "Video nebolo možné prehrať"
"video.unmute": "Zapnúť zvuk"
}

@ -50,6 +50,7 @@
"column_header.unpin": "Откачи",
"column_subheading.navigation": "Навигација",
"column_subheading.settings": "Поставке",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Ваш налог није {locked}. Свако може да Вас запрати и да види објаве намењене само Вашим пратиоцима.",
"compose_form.lock_disclaimer.lock": "закључан",
"compose_form.placeholder": "Шта Вам је на уму?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "корисник",
"search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}",
"standalone.public_title": "Поглед изнутра...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Овај статус не може да се подржи",
"status.delete": "Обриши",
"status.embed": "Угради на сајт",
@ -221,6 +223,7 @@
"status.media_hidden": "Мултимедија сакривена",
"status.mention": "Помени корисника @{name}",
"status.more": "Још",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Мутирај преписку",
"status.open": "Прошири овај статус",
"status.pin": "Прикачи на профил",

@ -50,6 +50,7 @@
"column_header.unpin": "Ångra fäst",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Inställningar",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vemsomhelst kan följa dig och även se dina inlägg skrivna för endast dina följare.",
"compose_form.lock_disclaimer.lock": "låst",
"compose_form.placeholder": "Vad funderar du på?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "användare",
"search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
"standalone.public_title": "En titt inuti...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Detta inlägg kan inte knuffas",
"status.delete": "Ta bort",
"status.embed": "Bädda in",
@ -221,6 +223,7 @@
"status.media_hidden": "Media dold",
"status.mention": "Omnämn @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Tysta konversation",
"status.open": "Utvidga denna status",
"status.pin": "Fäst i profil",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigation",
"column_subheading.settings": "Settings",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "What is on your mind?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "This post cannot be boosted",
"status.delete": "Delete",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Media hidden",
"status.mention": "Mention @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Expand this status",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Navigasyon",
"column_subheading.settings": "Ayarlar",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.",
"compose_form.lock_disclaimer.lock": "kilitli",
"compose_form.placeholder": "Ne düşünüyorsun?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Bu gönderi boost edilemez",
"status.delete": "Sil",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Gizli görsel",
"status.mention": "Bahset @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Mute conversation",
"status.open": "Bu gönderiyi genişlet",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "Unpin",
"column_subheading.navigation": "Навігація",
"column_subheading.settings": "Налаштування",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Ваш акаунт не {locked}. Кожен може підписатися на Вас та бачити Ваші приватні пости.",
"compose_form.lock_disclaimer.lock": "приватний",
"compose_form.placeholder": "Що у Вас на думці?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}",
"standalone.public_title": "A look inside...",
"status.block": "Block @{name}",
"status.cannot_reblog": "Цей допис не може бути передмухнутий",
"status.delete": "Видалити",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "Медіаконтент приховано",
"status.mention": "Згадати",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "Заглушити діалог",
"status.open": "Розгорнути допис",
"status.pin": "Pin on profile",

@ -50,6 +50,7 @@
"column_header.unpin": "取消固定",
"column_subheading.navigation": "导航",
"column_subheading.settings": "设置",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "你的帐户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。",
"compose_form.lock_disclaimer.lock": "开启保护",
"compose_form.placeholder": "在想啥?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "用户",
"search_results.total": "共 {count, number} 个结果",
"standalone.public_title": "大家都在干啥?",
"status.block": "Block @{name}",
"status.cannot_reblog": "无法转嘟这条嘟文",
"status.delete": "删除",
"status.embed": "嵌入",
@ -221,6 +223,7 @@
"status.media_hidden": "隐藏媒体内容",
"status.mention": "提及 @{name}",
"status.more": "更多",
"status.mute": "Mute @{name}",
"status.mute_conversation": "隐藏此对话",
"status.open": "展开嘟文",
"status.pin": "在个人资料页面置顶",

@ -50,6 +50,7 @@
"column_header.unpin": "取下",
"column_subheading.navigation": "瀏覽",
"column_subheading.settings": "設定",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "你的用戶狀態為「{locked}」,任何人都能立即關注你,然後看到「只有關注者能看」的文章。",
"compose_form.lock_disclaimer.lock": "公共",
"compose_form.placeholder": "你在想甚麼?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} 項結果",
"standalone.public_title": "站點一瞥…",
"status.block": "Block @{name}",
"status.cannot_reblog": "這篇文章無法被轉推",
"status.delete": "刪除",
"status.embed": "鑲嵌",
@ -221,6 +223,7 @@
"status.media_hidden": "隱藏媒體內容",
"status.mention": "提及 @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "靜音對話",
"status.open": "展開文章",
"status.pin": "置頂到資料頁",

@ -50,6 +50,7 @@
"column_header.unpin": "取下",
"column_subheading.navigation": "瀏覽",
"column_subheading.settings": "設定",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "你的帳號沒有{locked}。任何人都可以關注你,看到發給關注者的貼文。",
"compose_form.lock_disclaimer.lock": "上鎖",
"compose_form.placeholder": "在想些什麼?",
@ -213,6 +214,7 @@
"search_popout.tips.user": "user",
"search_results.total": "{count, number} 項結果",
"standalone.public_title": "站點一瞥…",
"status.block": "Block @{name}",
"status.cannot_reblog": "此貼文無法轉推",
"status.delete": "刪除",
"status.embed": "Embed",
@ -221,6 +223,7 @@
"status.media_hidden": "媒體已隱藏",
"status.mention": "提到 @{name}",
"status.more": "More",
"status.mute": "Mute @{name}",
"status.mute_conversation": "消音對話",
"status.open": "展開這個狀態",
"status.pin": "置頂到個人資訊頁",

@ -2,16 +2,18 @@
class ActivityPub::Activity::Accept < ActivityPub::Activity
def perform
case @object['type']
when 'Follow'
accept_follow
if @object.respond_to?(:[]) &&
@object['type'] == 'Follow' && @object['actor'].present?
accept_follow_from @object['actor']
else
accept_follow_object @object
end
end
private
def accept_follow
target_account = account_from_uri(target_uri)
def accept_follow_from(actor)
target_account = account_from_uri(value_or_id(actor))
return if target_account.nil? || !target_account.local?
@ -19,7 +21,8 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity
follow_request&.authorize!
end
def target_uri
@target_uri ||= value_or_id(@object['actor'])
def accept_follow_object(object)
follow_request = ActivityPub::TagManager.instance.uri_to_resource(value_or_id(object), FollowRequest)
follow_request&.authorize!
end
end

@ -28,6 +28,8 @@ class ActivityPub::TagManager
return target.uri if target.respond_to?(:local?) && !target.local?
case target.object_type
when :follow
account_follow_url(target.account.username, target)
when :person
account_url(target)
when :note, :comment, :activity
@ -97,6 +99,12 @@ class ActivityPub::TagManager
case klass.name
when 'Account'
klass.find_local(uri_to_local_id(uri, :username))
when 'FollowRequest'
params = Rails.application.routes.recognize_path(uri)
klass.joins(:account).find_by!(
accounts: { domain: nil, username: params[:account_username] },
id: params[:id]
)
else
StatusFinder.new(uri).status
end

@ -171,10 +171,10 @@ class Formatter
end
def link_to_url(entity)
normalized_url = Addressable::URI.parse(entity[:url]).normalize
url = Addressable::URI.parse(entity[:url])
html_attrs = { target: '_blank', rel: 'nofollow noopener' }
Twitter::Autolink.send(:link_to_text, entity, link_html(entity[:url]), normalized_url, html_attrs)
Twitter::Autolink.send(:link_to_text, entity, link_html(entity[:url]), url, html_attrs)
rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError
encode(entity[:url])
end

@ -21,6 +21,10 @@ class FollowRequest < ApplicationRecord
validates :account_id, uniqueness: { scope: :target_account_id }
def object_type
:follow
end
def authorize!
account.follow!(target_account, reblogs: show_reblogs)
MergeWorker.perform_async(target_account.id, account.id)

@ -1,11 +1,12 @@
# frozen_string_literal: true
class ActivityPub::FollowSerializer < ActiveModel::Serializer
attributes :id, :type, :actor
attributes :type, :actor
attribute :id, if: :dereferencable?
attribute :virtual_object, key: :object
def id
[ActivityPub::TagManager.instance.uri_for(object.account), '#follows/', object.id].join
ActivityPub::TagManager.instance.uri_for(object)
end
def type
@ -19,4 +20,8 @@ class ActivityPub::FollowSerializer < ActiveModel::Serializer
def virtual_object
ActivityPub::TagManager.instance.uri_for(object.target_account)
end
def dereferencable?
object.respond_to?(:object_type)
end
end

@ -9,7 +9,7 @@
= fa_icon 'user-times'
= t('accounts.unfollow')
- else
= link_to account_follow_path(account), data: { method: :post }, class: 'icon-button' do
= link_to account_follows_path(account), data: { method: :post }, class: 'icon-button' do
= fa_icon 'user-plus'
= t('accounts.follow')
- elsif !user_signed_in?

@ -0,0 +1,13 @@
<p>こんにちは<%= @resource.email %>さん</p>
<% if @resource&.unconfirmed_email? %>
<p><%= @instance %>で使っているメールアドレスが<%= @resource.unconfirmed_email %>に変更されようとしています。</p>
<% else %>
<p><%= @instance %>で使っているメールアドレスが<%= @resource.email %>に変更されました。</p>
<% end %>
<p>
メールアドレスを変更した覚えがない場合、誰かがあなたのアカウントにアクセスしたおそれがあります。すぐにパスワードを変更するか、アカウントにアクセスできない場合はインスタンスの管理者に連絡してください。
</p>
<p><%= @instance %>チームより</p>

@ -0,0 +1,11 @@
Hello <%= @resource.email %>!
<% if @resource&.unconfirmed_email? %>
<%= @instance %>で使っているメールアドレスが<%= @resource.unconfirmed_email %>に変更されようとしています。
<% else %>
<%= @instance %>で使っているメールアドレスが<%= @resource.email %>に変更されました。
<% end %>
メールアドレスを変更した覚えがない場合、誰かがあなたのアカウントにアクセスしたおそれがあります。すぐにパスワードを変更するか、アカウントにアクセスできない場合はインスタンスの管理者に連絡してください。
<%= @instance %>チームより

@ -0,0 +1,15 @@
<p>Witaj, <%= @resource.email %>!</p>
<% if @resource&.unconfirmed_email? %>
<p>Informujemy, że e-mail używany przez Ciebie na <%= @instance %> został zmieniony na <%= @resource.unconfirmed_email %>.</p>
<% else %>
<p>Informujemy, że e-mail używany przez Ciebie na <%= @instance %> został zmieniony na <%= @resource.email %>.</p>
<% end %>
<p>
Jeżeli to nie Ty, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zalecana jest natychmiastowa zmiana hasła lub skontaktowanie się z administratorem, jeżeli nie masz dostępu do swojego konta.
</p>
<p>Z pozdrowieniami,<p>
<p>Zespół <%= @instance %></p>

@ -0,0 +1,13 @@
Witaj, <%= @resource.email %>!
<% if @resource&.unconfirmed_email? %>
Informujemy, że e-mail używany przez Ciebie na <%= @instance %> został zmieniony na <%= @resource.unconfirmed_email %>.
<% else %>
Informujemy, że e-mail używany przez Ciebie na <%= @instance %> został zmieniony na <%= @resource.email %>.
<% end %>
Jeżeli to nie Ty, prawdopodobnie ktoś uzyskał dostęp do Twojego konta. Zalecana jest natychmiastowa zmiana hasła lub skontaktowanie się z administratorem, jeżeli nie masz dostępu do swojego konta.
Z pozdrowieniami,
Zespół <%= @instance %>

@ -0,0 +1,13 @@
<p>こんにちは<%= @resource.unconfirmed_email %>さん</p>
<p><%= @instance %>で使っているメールアドレスの変更をあなたがリクエストしました。</p>
<p>新しいメールアドレスを確認するには次のリンクをクリックしてください:<br>
<%= link_to 'わたしのメールアドレスを確認する', confirmation_url(@resource, confirmation_token: @token) %></p>
<p>上記のリンクがうまくいかなかった場合はこのURLをコピーしてアドレスバーに貼り付けてください:<br>
<span><%= confirmation_url(@resource, confirmation_token: @token) %></span>
<p>また<%= link_to '利用規約', terms_url %>もご確認ください。</p>
<p><%= @instance %>チームより</p>

@ -0,0 +1,10 @@
こんにちは<%= @resource.unconfirmed_email %>さん
<%= @instance %>で使っているメールアドレスの変更をあなたがリクエストしました。
新しいメールアドレスを確認するには次のリンクをクリックしてください:
<%= confirmation_url(@resource, confirmation_token: @token) %>
また利用規約もご確認ください <%= terms_url %>
<%= @instance %>チームより

@ -0,0 +1,15 @@
<p>Witaj, <%= @resource.unconfirmed_email %>!</p>
<p>Dokonano próby zmiany adresu e-mail, którego używasz na <%= @instance %>.</p>
<p>Aby potwierdzić posiadanie tego adresu e-mail, kliknij na poniższy odnośnik:<br>
<%= link_to 'Potwierdź mój adres e-mail', confirmation_url(@resource, confirmation_token: @token) %></p>
<p>Jeżeli ten odnośnik nie działa, wklej następujący adres w pasek adresu Twojej przeglądarki: <br>
<span><%= confirmation_url(@resource, confirmation_token: @token) %></span>
<p>Pamiętaj o przeczytaniu naszych <%= link_to 'zasad użytkowania', terms_url %>.</p>
<p>Z pozdrowieniami,<p>
<p>Zespół <%= @instance %></p>

@ -0,0 +1,12 @@
Witaj, <%= @resource.unconfirmed_email %>!
Dokonano próby zmiany adresu e-mail, którego używasz na <%= @instance %>.
Aby potwierdzić posiadanie tego adresu e-mail, kliknij na poniższy odnośnik:
<%= confirmation_url(@resource, confirmation_token: @token) %>
Pamiętaj o przeczytaniu naszych zasad użytkowania: <%= terms_url %>
Z pozdrowieniami,
Zespół <%= @instance %>

@ -18,8 +18,12 @@ ja:
mailer:
confirmation_instructions:
subject: 'Mastodon: メールアドレスの確認'
email_changed:
subject: 'Mastodon: メールアドレスの変更'
password_change:
subject: 'Mastodon: パスワードが変更されました'
reconfirmation_instructions:
subject: 'Mastodon: %{instance}のメールを確認する'
reset_password_instructions:
subject: 'Mastodon: パスワード再発行'
unlock_instructions:

@ -18,8 +18,12 @@ oc:
mailer:
confirmation_instructions:
subject: Mercés de confirmar vòstra inscripcion sus %{instance}
email_changed:
subject: 'Mastodon: corrièl cambiat'
password_change:
subject: Mastodon:senhal cambiat
reconfirmation_instructions:
subject: 'Mastodon: Confirmatz ladreça per %{instance}'
reset_password_instructions:
subject: Mastodon:instruccions per reïnicializar lo senhal
unlock_instructions:

@ -18,8 +18,12 @@ pl:
mailer:
confirmation_instructions:
subject: 'Mastodon: Instrukcje weryfikacji adresu e-mail'
email_changed:
subject: 'Mastodon: Zmieniono adres e-mail'
password_change:
subject: 'Mastodon: Hasło zmienione'
subject: 'Mastodon: Zmieniono hasło'
reconfirmation_instructions:
subject: 'Mastodon: Potwierdź adres e-mail na &{instance}'
reset_password_instructions:
subject: 'Mastodon: Instrukcje ustawienia nowego hasła'
unlock_instructions:

@ -116,6 +116,7 @@ ja:
roles:
admin: 管理者
moderator: モデレーター
staff: スタッフ
user: ユーザー
salmon_url: Salmon URL
search: 検索
@ -160,6 +161,7 @@ ja:
update_status: "%{name} さんが %{target} さんの投稿を更新しました"
title: 操作履歴
custom_emojis:
by_domain: ドメイン
copied_msg: 絵文字のコピーをローカルに作成しました
copy: コピー
copy_failed_msg: 絵文字のコピーをローカルに作成できませんでした
@ -263,12 +265,18 @@ ja:
unresolved: 未解決
view: 表示
settings:
activity_api_enabled:
desc_html: ローカルに投稿されたトゥート数、アクティブなユーザー数、週ごとの新規登録者数
title: ユーザーアクティビティに関する統計を公開する
bootstrap_timeline_accounts:
desc_html: 複数のユーザー名はコンマで区切ります。ローカルの公開アカウントのみ有効です。指定しない場合は管理者がデフォルトで指定されます。
title: 新規ユーザーが自動フォローするアカウント
contact_information:
email: ビジネスメールアドレス
username: 連絡先のユーザー名
peers_api_enabled:
desc_html: 連合内でこのインスタンスが遭遇したドメインの名前
title: 接続しているインスタンスのリストを公開する
registrations:
closed_message:
desc_html: 新規登録を停止しているときにフロントページに表示されます。HTMLタグが使えます

@ -265,12 +265,18 @@ oc:
unresolved: Pas resolguts
view: Veire
settings:
activity_api_enabled:
desc_html: Nombre destatuts publicats, utilizaires actius e novèlas inscripcions en rapòrt setmanièr
title: Publica las estatisticas totalas de lactivitat dels utilizaires
bootstrap_timeline_accounts:
desc_html: Separatz los noms dutilizaire amb de virgula. Pas que los comptes locals e pas clavats foncionaràn. Se lo camp es void los admins seràn selecionats.
title: Per defaut los nouvenguts sègon
title: Per defaut los nòuvenguts sègon
contact_information:
email: Picatz una adreça de corrièl
username: Picatz un nom dutilizaire
peers_api_enabled:
desc_html: Noms de domeni quaquesta instància a trobats pel fediverse
title: Publica la lista de las instàncias conegudas
registrations:
closed_message:
desc_html: Afichat sus las pagina dacuèlh quand las inscripcions son tampadas.<br>Podètz utilizar de balisas HTML

@ -264,12 +264,18 @@ pl:
unresolved: Nierozwiązane
view: Wyświetl
settings:
activity_api_enabled:
desc_html: Liczy publikowane lokalnie wpisy, aktywnych użytkowników i nowe rejestracje w ciągu danego tygodnia
title: Publikuj zbiorowe statystyki o aktywności użytkowników
bootstrap_timeline_accounts:
desc_html: Oddzielaj nazwy użytkowników przecinkami. Działa tylko dla niezablokowanych kont w obrębie instancji. Jeżeli puste, zostaną użyte konta administratorów instancji.
title: Domyślnie obserwowani użytkownicy
contact_information:
email: Służbowy adres e-mail
username: Nazwa użytkownika do kontaktu
peers_api_enabled:
desc_html: Nazwy domen, z którymi ta instancja wchodziła w interakcje
title: Publikuj listę znanych instancji
registrations:
closed_message:
desc_html: Wyświetlana na stronie głównej, gdy możliwość otwarej rejestracji nie jest dostępna. Możesz korzystać z tagów HTML
@ -480,7 +486,7 @@ pl:
acct: nazwa@domena nowego konta
currently_redirecting: 'Obecnie Twoje konto przekierowuje do:'
proceed: Zapisz
updated_msg: Pomyślnie zaktualizowano ustawienia i migracji Twojego konta!
updated_msg: Pomyślnie zaktualizowano ustawienia migracji Twojego konta!
moderation:
title: Moderacja
notification_mailer:

@ -54,7 +54,8 @@ Rails.application.routes.draw do
resources :followers, only: [:index], controller: :follower_accounts
resources :following, only: [:index], controller: :following_accounts
resource :follow, only: [:create], controller: :account_follow
resources :follows, only: [:show], module: :activitypub
resource :follow, only: [:create], controller: :account_follow, as: :follows
resource :unfollow, only: [:create], controller: :account_unfollow
resource :outbox, only: [:show], module: :activitypub
resource :inbox, only: [:create], module: :activitypub

@ -0,0 +1,43 @@
# frozen_string_literal: true
require 'rails_helper'
describe ActivityPub::FollowsController, type: :controller do
let(:follow_request) { Fabricate(:follow_request, account: account) }
render_views
context 'with local account' do
let(:account) { Fabricate(:account, domain: nil) }
it 'returns follow request' do
signed_request = Request.new(:get, account_follow_url(account, follow_request))
signed_request.on_behalf_of(follow_request.target_account)
request.headers.merge! signed_request.headers
get :show, params: { id: follow_request, account_username: account.username }
expect(body_as_json[:id]).to eq ActivityPub::TagManager.instance.uri_for(follow_request)
expect(response).to have_http_status :success
end
it 'returns http 404 without signature' do
get :show, params: { id: follow_request, account_username: account.username }
expect(response).to have_http_status 404
end
end
context 'with remote account' do
let(:account) { Fabricate(:account, domain: Faker::Internet.domain_name) }
it 'returns http 404' do
signed_request = Request.new(:get, account_follow_url(account, follow_request))
signed_request.on_behalf_of(follow_request.target_account)
request.headers.merge! signed_request.headers
get :show, params: { id: follow_request, account_username: account.username }
expect(response).to have_http_status 404
end
end
end

@ -3,7 +3,16 @@ require 'rails_helper'
RSpec.describe ActivityPub::Activity::Accept do
let(:sender) { Fabricate(:account) }
let(:recipient) { Fabricate(:account) }
let!(:follow_request) { Fabricate(:follow_request, account: recipient, target_account: sender) }
describe '#perform' do
subject { described_class.new(json, sender) }
before do
subject.perform
end
context 'with concerete object representation' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
@ -11,7 +20,6 @@ RSpec.describe ActivityPub::Activity::Accept do
type: 'Accept',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: {
id: 'bar',
type: 'Follow',
actor: ActivityPub::TagManager.instance.uri_for(recipient),
object: ActivityPub::TagManager.instance.uri_for(sender),
@ -19,20 +27,25 @@ RSpec.describe ActivityPub::Activity::Accept do
}.with_indifferent_access
end
describe '#perform' do
subject { described_class.new(json, sender) }
it 'creates a follow relationship' do
expect(recipient.following?(sender)).to be true
end
end
before do
Fabricate(:follow_request, account: recipient, target_account: sender)
subject.perform
context 'with object represented by id' do
let(:json) do
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'foo',
type: 'Accept',
actor: ActivityPub::TagManager.instance.uri_for(sender),
object: ActivityPub::TagManager.instance.uri_for(follow_request),
}.with_indifferent_access
end
it 'creates a follow relationship' do
expect(recipient.following?(sender)).to be true
end
it 'removes the follow request' do
expect(recipient.requested?(sender)).to be false
end
end
end

@ -17,7 +17,7 @@ RSpec.describe Formatter do
let(:text) { 'http://google.com' }
it 'has valid URL' do
is_expected.to include 'href="http://google.com/"'
is_expected.to include 'href="http://google.com"'
end
end
@ -25,7 +25,7 @@ RSpec.describe Formatter do
let(:text) { 'https://nic.みんな/' }
it 'has valid URL' do
is_expected.to include 'href="https://nic.xn--q9jyb4c/"'
is_expected.to include 'href="https://nic.みんな/"'
end
it 'has display URL' do
@ -53,7 +53,7 @@ RSpec.describe Formatter do
let(:text) { 'http://www.google.com!' }
it 'has valid URL' do
is_expected.to include 'href="http://www.google.com/"'
is_expected.to include 'href="http://www.google.com"'
end
end
@ -61,7 +61,7 @@ RSpec.describe Formatter do
let(:text) { "http://www.google.com'" }
it 'has valid URL' do
is_expected.to include 'href="http://www.google.com/"'
is_expected.to include 'href="http://www.google.com"'
end
end
@ -69,7 +69,7 @@ RSpec.describe Formatter do
let(:text) { 'http://www.google.com>' }
it 'has valid URL' do
is_expected.to include 'href="http://www.google.com/"'
is_expected.to include 'href="http://www.google.com"'
end
end
@ -93,7 +93,7 @@ RSpec.describe Formatter do
let(:text) { 'https://ja.wikipedia.org/wiki/日本' }
it 'has valid URL' do
is_expected.to include 'href="https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC"'
is_expected.to include 'href="https://ja.wikipedia.org/wiki/日本"'
end
end
@ -101,7 +101,7 @@ RSpec.describe Formatter do
let(:text) { 'https://ko.wikipedia.org/wiki/대한민국' }
it 'has valid URL' do
is_expected.to include 'href="https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD"'
is_expected.to include 'href="https://ko.wikipedia.org/wiki/대한민국"'
end
end
@ -109,7 +109,7 @@ RSpec.describe Formatter do
let(:text) { 'https://baike.baidu.com/item/中华人民共和国' }
it 'has valid URL' do
is_expected.to include 'href="https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD"'
is_expected.to include 'href="https://baike.baidu.com/item/中华人民共和国"'
end
end
@ -117,7 +117,7 @@ RSpec.describe Formatter do
let(:text) { 'https://zh.wikipedia.org/wiki/臺灣' }
it 'has valid URL' do
is_expected.to include 'href="https://zh.wikipedia.org/wiki/%E8%87%BA%E7%81%A3"'
is_expected.to include 'href="https://zh.wikipedia.org/wiki/臺灣"'
end
end

@ -34,4 +34,12 @@ RSpec.describe FollowRequest, type: :model do
expect(follow_request.account.muting_reblogs?(target)).to be true
end
end
describe '#object_type' do
let(:follow_request) { Fabricate(:follow_request) }
it 'equals to :follow' do
expect(follow_request.object_type).to eq :follow
end
end
end

Loading…
Cancel
Save