diff --git a/.circleci/config.yml b/.circleci/config.yml index 02b505457..8791965f0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,6 +11,7 @@ aliases: RAILS_ENV: test PARALLEL_TEST_PROCESSORS: 4 ALLOW_NOPAM: true + CONTINUOUS_INTEGRATION: true DISABLE_SIMPLECOV: true working_directory: ~/projects/mastodon/ diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb new file mode 100644 index 000000000..5038cc03c --- /dev/null +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +class Api::V1::Push::SubscriptionsController < Api::BaseController + before_action -> { doorkeeper_authorize! :push } + before_action :require_user! + before_action :set_web_push_subscription + + def create + @web_subscription&.destroy! + + @web_subscription = ::Web::PushSubscription.create!( + endpoint: subscription_params[:endpoint], + key_p256dh: subscription_params[:keys][:p256dh], + key_auth: subscription_params[:keys][:auth], + data: data_params, + user_id: current_user.id, + access_token_id: doorkeeper_token.id + ) + + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + end + + def update + raise ActiveRecord::RecordNotFound if @web_subscription.nil? + + @web_subscription.update!(data: data_params) + + render json: @web_subscription, serializer: REST::WebPushSubscriptionSerializer + end + + def destroy + @web_subscription&.destroy! + render_empty + end + + private + + def set_web_push_subscription + @web_subscription = ::Web::PushSubscription.find_by(access_token_id: doorkeeper_token.id) + end + + def subscription_params + params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh]) + end + + def data_params + return {} if params[:data].blank? + params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention]) + end +end diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb index 249e7c186..fe8e42580 100644 --- a/app/controllers/api/web/push_subscriptions_controller.rb +++ b/app/controllers/api/web/push_subscriptions_controller.rb @@ -31,22 +31,23 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController endpoint: subscription_params[:endpoint], key_p256dh: subscription_params[:keys][:p256dh], key_auth: subscription_params[:keys][:auth], - data: data + data: data, + user_id: active_session.user_id, + access_token_id: active_session.access_token_id ) active_session.update!(web_push_subscription: web_subscription) - render json: web_subscription.as_payload + render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer end def update params.require([:id]) web_subscription = ::Web::PushSubscription.find(params[:id]) - web_subscription.update!(data: data_params) - render json: web_subscription.as_payload + render json: web_subscription, serializer: REST::WebPushSubscriptionSerializer end private @@ -56,6 +57,6 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController end def data_params - @data_params ||= params.require(:data).permit(:alerts) + @data_params ||= params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention]) end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 158c0c10e..27ebc3333 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -9,6 +9,7 @@ class ApplicationController < ActionController::Base include Localized include UserTrackingConcern + include SessionTrackingConcern helper_method :current_account helper_method :current_session diff --git a/app/controllers/concerns/session_tracking_concern.rb b/app/controllers/concerns/session_tracking_concern.rb new file mode 100644 index 000000000..45361b019 --- /dev/null +++ b/app/controllers/concerns/session_tracking_concern.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module SessionTrackingConcern + extend ActiveSupport::Concern + + UPDATE_SIGN_IN_HOURS = 24 + + included do + before_action :set_session_activity + end + + private + + def set_session_activity + return unless session_needs_update? + current_session.touch + end + + def session_needs_update? + !current_session.nil? && current_session.updated_at < UPDATE_SIGN_IN_HOURS.hours.ago + end +end diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index 189e4072e..2e9f73bb8 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -9,9 +9,9 @@ class InvitesController < ApplicationController before_action :set_pack def index - authorize :invite, :create? + authorize :invite, :index? - @invites = Invite.where(user: current_user) + @invites = invites @invite = Invite.new(expires_in: 1.day.to_i) end @@ -24,13 +24,13 @@ class InvitesController < ApplicationController if @invite.save redirect_to invites_path else - @invites = Invite.where(user: current_user) + @invites = invites render :index end end def destroy - @invite = Invite.where(user: current_user).find(params[:id]) + @invite = invites.find(params[:id]) authorize @invite, :destroy? @invite.expire! redirect_to invites_path @@ -42,6 +42,10 @@ class InvitesController < ApplicationController use_pack 'settings' end + def invites + Invite.where(user: current_user) + end + def resource_params params.require(:invite).permit(:max_uses, :expires_in) end diff --git a/app/controllers/shares_controller.rb b/app/controllers/shares_controller.rb index 3cbaccb35..4624c29a6 100644 --- a/app/controllers/shares_controller.rb +++ b/app/controllers/shares_controller.rb @@ -16,6 +16,7 @@ class SharesController < ApplicationController def initial_state_params text = [params[:title], params[:text], params[:url]].compact.join(' ') + { settings: Web::Setting.find_by(user: current_user)&.data || {}, push_subscription: current_account.user.web_push_subscription(current_session), diff --git a/app/javascript/mastodon/features/compose/components/upload.js b/app/javascript/mastodon/features/compose/components/upload.js index 61b2d19e0..bfa2b4727 100644 --- a/app/javascript/mastodon/features/compose/components/upload.js +++ b/app/javascript/mastodon/features/compose/components/upload.js @@ -77,7 +77,7 @@ export default class Upload extends ImmutablePureComponent { {({ scale }) => (
<a>
و <em>
.
title: وصف مثيل الخادوم
site_description_extended:
+ desc_html: مكان جيد لمدونة قواعد السلوك والقواعد والإرشادات وغيرها من الأمور التي تحدد حالتك. يمكنك استخدام علامات HTML
title: الوصف المُفصّل للموقع
site_terms:
+ desc_html: يمكنك كتابة سياسة الخصوصية الخاصة بك ، شروط الخدمة أو غيرها من القوانين. يمكنك استخدام علامات HTML
title: شروط الخدمة المخصصة
site_title: إسم مثيل الخادم
thumbnail:
+ desc_html: يستخدم للعروض السابقة عبر Open Graph و API. 1200x630px موصى به
title: الصورة الرمزية المصغرة لمثيل الخادوم
timeline_preview:
desc_html: عرض الخيط العمومي على صفحة الإستقبال
@@ -315,12 +356,16 @@ ar:
back_to_account: العودة إلى صفحة الحساب
batch:
delete: حذف
+ nsfw_off: ضع علامة انها غير حساسة
+ nsfw_on: ضع علامة انها حساسة
failed_to_execute: خطأ في التفعيل
media:
title: الوسائط
+ no_media: لا يوجد وسائط
title: منشورات الحساب
with_media: بالوسائط
subscriptions:
+ callback_url: عاود الاتصال بالعنوان
confirmed: مؤكَّد
expires_in: تنتهي مدة صلاحيتها في
last_delivery: آخر إيداع
@@ -330,6 +375,8 @@ ar:
admin_mailer:
new_report:
body: قام %{reporter} بالإبلاغ عن %{target}
+ body_remote: أبلغ شخص ما من٪ {domain} عن٪ {target}
+ subject: تقرير جديد ل%{instance} (#%{id})
application_mailer:
notification_preferences: تعديل خيارات البريد الإلكتروني
salutation: "%{name}،"
@@ -342,6 +389,7 @@ ar:
destroyed: تم حذف التطبيق بنجاح
invalid_url: إن الرابط المقدم غير صالح
regenerate_token: إعادة توليد رمز النفاذ
+ token_regenerated: تم إعادة إنشاء الرمز الوصول بنجاح
warning: كن حذرا مع هذه البيانات. لا تقم أبدا بمشاركتها مع الآخَرين !
your_token: رمز نفاذك
auth:
@@ -352,6 +400,7 @@ ar:
delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك المواصلة هنا. سوف يُطلَبُ منك التأكيد قبل الحذف.
didnt_get_confirmation: لم تتلق تعليمات التأكيد ؟
forgot_password: نسيت كلمة المرور ؟
+ invalid_reset_password_token: رمز إعادة تعيين كلمة المرور غير صالح أو منتهي الصلاحية. يرجى طلب واحد جديد.
login: تسجيل الدخول
logout: خروج
migrate_account: الإنتقال إلى حساب آخر
@@ -368,6 +417,7 @@ ar:
security: الهوية
set_new_password: إدخال كلمة مرور جديدة
authorize_follow:
+ already_following: أنت تتابع بالفعل هذا الحساب
error: يا للأسف، وقع هناك خطأ إثر عملية البحث عن الحساب عن بعد
follow: إتبع
follow_request: 'لقد قمت بإرسال طلب متابعة إلى :'
@@ -410,7 +460,7 @@ ar:
archive_takeout:
date: التاريخ
download: تنزيل نسخة لحسابك
- hint_html: بإمكانك طلب نسخة كاملة لـ كافة تبويقاتك و الوسائط التي قمت بنشرها. البيانات المُصدَّرة ستكون محفوظة على شكل نسق ActivityPub و باستطاعتك قراءتها بأي برنامج يدعم هذا النسق.
+ hint_html: بإمكانك طلب نسخة كاملة لـ كافة تبويقاتك و الوسائط التي قمت بنشرها. البيانات المُصدَّرة ستكون محفوظة على شكل نسق ActivityPub و باستطاعتك قراءتها بأي برنامج يدعم هذا النسق. يُمكنك طلب نسخة كل 7 أيام.
in_progress: عملية جمع نسخة لبيانات حسابك جارية …
request: طلب نسخة لحسابك
size: الحجم
@@ -544,6 +594,9 @@ ar:
missing_resource: تعذر العثور على رابط التحويل المطلوب الخاص بحسابك
proceed: أكمل المتابعة
prompt: 'إنك بصدد متابعة :'
+ remote_unfollow:
+ error: ''
+ title: ''
sessions:
activity: آخر نشاط
browser: المتصفح
@@ -581,11 +634,13 @@ ar:
windows: ويندوز
windows_mobile: ويندوز موبايل
windows_phone: ويندوز فون
+ revoke: ''
revoke_success: تم إبطال الجلسة بنجاح
title: الجلسات
settings:
authorized_apps: التطبيقات المرخص لها
back: عودة إلى ماستدون
+ delete: ''
development: التطوير
edit_profile: تعديل الملف الشخصي
export: تصدير البيانات
@@ -598,9 +653,18 @@ ar:
two_factor_authentication: إثبات الهويّة المزدوج
your_apps: تطبيقاتك
statuses:
+ attached:
+ image:
+ one: ''
+ other: ''
+ video:
+ one: ''
+ other: ''
+ content_warning: ''
open_in_web: إفتح في الويب
over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها
pin_errors:
+ limit: ''
ownership: لا يمكن تدبيس تبويق نشره شخص آخر
private: لا يمكن تثبيت تبويق لم يُنشر للعامة
reblog: لا يمكن تثبيت ترقية
@@ -641,9 +705,19 @@ ar:
wrong_code: الرمز الذي أدخلته غير صالح ! تحقق من صحة الوقت على الخادم و الجهاز ؟
user_mailer:
backup_ready:
+ explanation: ''
subject: نسخة بيانات حسابك جاهزة للتنزيل
title: المغادرة بأرشيف الحساب
+ welcome:
+ edit_profile_action: ''
+ explanation: ''
+ full_handle: ''
+ review_preferences_action: ''
+ subject: ''
+ tips: نصائح
+ title: أهلاً بك، %{name} !
users:
invalid_email: عنوان البريد الإلكتروني غير صالح
invalid_otp_token: الرمز الثنائي غير صالح
seamless_external_login: لقد قمت بتسجيل الدخول عبر خدمة خارجية، إنّ إعدادات الكلمة السرية و البريد الإلكتروني غير متوفرة.
+ signed_in_as: 'تم تسجيل دخولك بصفة :'
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index 9d6b79549..2a46945d5 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -49,11 +49,12 @@ ca:
reserved_username: El nom d'usuari està reservat
roles:
admin: Administrador
+ bot: Bot
moderator: Moderador
unfollow: Deixa de seguir
admin:
account_moderation_notes:
- create: Crea
+ create: Crea nota
created_msg: La nota de moderació s'ha creat correctament!
delete: Suprimeix
destroyed_msg: Nota de moderació destruïda amb èxit!
@@ -463,7 +464,7 @@ ca:
archive_takeout:
date: Data
download: Descarrega l’arxiu
- hint_html: Pots sol·licitar un arxiu dels teus toots i els fitxers multimèdia pujats. Les dades exportades tindran el format ActivityPub, llegible per qualsevol programari compatible.
+ hint_html: Pots sol·licitar un arxiu dels teus toots i els fitxers multimèdia pujats. Les dades exportades tindran el format ActivityPub, llegible per qualsevol programari compatible. Pots sol·licitar un arxiu cada 7 dies.
in_progress: Compilant el teu arxiu...
request: Sol·licita el teu arxiu
size: Tamany
@@ -830,5 +831,6 @@ ca:
users:
invalid_email: L'adreça de correu no és correcta
invalid_otp_token: El codi de dos factors no és correcte
+ otp_lost_help_html: Si has perdut l'accés a tots dos pots contactar per %{email}
seamless_external_login: Has iniciat sessió via un servei extern per tant els ajustos de contrasenya i correu electrònic no estan disponibles.
signed_in_as: 'Sessió iniciada com a:'
diff --git a/config/locales/co.yml b/config/locales/co.yml
index abef1d36b..637491d6b 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -1,11 +1,11 @@
---
co:
about:
- about_hashtag_html: Quessi sò statuti pubblichi taggati cù #%{hashtag}. Pudete interagisce cù elli sì voi avete un contu in qualche parte di u fediverse.
+ about_hashtag_html: Quessi sò statuti pubblichi taggati cù #%{hashtag}. Pudete interagisce cù elli sì voi avete un contu in qualche parte di u fediverse.
about_mastodon_html: Mastodon ghjè una rete suciale custruita incù prutucolli web aperti è lugiziali liberi. Hè decentralizatu cumu l’e-mail.
about_this: À prupositu
administered_by: 'Amministratu da:'
- closed_registrations: Pè avà, l’arregistramenti sò chjosi nant’à st’istanza. Mà pudete truvà un’altr’istanza per fà un contu è avè accessu à listessa reta da quallà!
+ closed_registrations: Pè avà, l’arregistramenti sò chjosi nant’à st’istanza. Mà pudete truvà un’altr’istanza per fà un contu è avè accessu à listessa reta da quallà.
contact: Cuntattu
contact_missing: Mancante
contact_unavailable: Micca dispunibule
@@ -70,6 +70,7 @@ co:
title: Mudificà l’Email di %{username}
confirm: Cunfirmà
confirmed: Cunfirmata
+ confirming: Cunfirmazione
demote: Ritrugradà
disable: Disattivà
disable_two_factor_authentication: Disattivà l’identificazione à 2 fattori
@@ -78,6 +79,7 @@ co:
domain: Duminiu
edit: Mudificà
email: E-mail
+ email_status: Statu di l’e-mail
enable: Attivà
enabled: Attivatu
feed_url: URL di u flussu
@@ -116,6 +118,10 @@ co:
push_subscription_expires: Spirata di l’abbunamentu PuSH
redownload: Mette à ghjornu i ritratti
remove_avatar: Toglie l’avatar
+ resend_confirmation:
+ already_confirmed: St’utilizatore hè digià cunfirmatu
+ send: Rimandà un’e-mail di cunfirmazione
+ success: L’e-mail di cunfirmazione hè statu mandatu!
reset: Reset
reset_password: Riinizializà a chjave d’accessu
resubscribe: Riabbunassi
@@ -175,17 +181,17 @@ co:
title: Ghjurnale d’audit
custom_emojis:
by_domain: Duminiu
- copied_msg: Copia lucale di l’emoji creata!
+ copied_msg: Copia lucale di l’emoji creata
copy: Cupià
copy_failed_msg: Ùn s’hè micca pussutu creà una copia di l’emoji
created_msg: L’emoji hè stata creata!
delete: Toglie
destroyed_msg: L’emoji hè stata tolta!
disable: Disattivà
- disabled_msg: L’emoji hè stata disattivata!
+ disabled_msg: L’emoji hè stata disattivata
emoji: Emoji
enable: Attivà
- enabled_msg: L’emoji hè stata attivata!
+ enabled_msg: L’emoji hè stata attivata
image_hint: PNG di 50Ko o menu
listed: Listata
new:
@@ -380,9 +386,9 @@ co:
created: Applicazione creata
destroyed: Applicazione sguassata
invalid_url: L’URL ch’è stata pruvista ùn hè valida
- regenerate_token: Regenerate access token
- token_regenerated: Access token successfully regenerated
- warning: Be very careful with this data. Never share it with anyone!
+ regenerate_token: Creà un’altra fiscia d’accessu
+ token_regenerated: A fiscia d’accessu hè stata rigenerata
+ warning: Abbadate à quessi dati. Ùn i date à nisunu!
your_token: Rigenerà a fiscia d’accessu
auth:
agreement_html: Arregistrassi vole dì chì site d’accunsentu per siguità e regule di l’istanza è e cundizione d’usu.
@@ -392,7 +398,7 @@ co:
delete_account_html: S’è voi vulete toglie u vostru contu ghjè quì. Duverete cunfirmà a vostra scelta.
didnt_get_confirmation: Ùn avete micca ricevutu l’istruzione di cunfirmazione?
forgot_password: Chjave scurdata?
- invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one.
+ invalid_reset_password_token: U ligame di riinizializazione di a chjave d’accessu hè spiratu o ùn hè micca validu. Pudete dumandà un'altru ligame.
login: Cunnettassi
logout: Scunnettassi
migrate_account: Cambià di contu
@@ -409,13 +415,13 @@ co:
security: Sicurità
set_new_password: Creà una nova chjave d’accessu
authorize_follow:
- already_following: You are already following this account
- error: Peccatu, c’hè statu un prublemu ricercandu u contu.
+ already_following: Site digià abbunatu·a à stu contu
+ error: Peccatu, c’hè statu un prublemu ricercandu u contu
follow: Siguità
follow_request: 'Avete dumandatu di siguità:'
following: 'Eccu! Avà seguitate:'
post_follow:
- close: Or, you can just close this window.
+ close: O pudete ancu chjude sta finestra.
return: Rivultà à u prufile di l’utilizatore
web: Andà à l’interfaccia web
title: Siguità %{acct}
@@ -483,11 +489,11 @@ co:
powered_by: mossu da %{link}
save_changes: Salvà e mudificazione
validation_errors:
- one: Qualcosa ùn và bè! Verificate un prublemu quì sottu.
- other: Qualcosa ùn và bè! Verificate %{count} prublemi quì sottu.
+ one: Qualcosa ùn và bè! Verificate u prublemu quì sottu
+ other: Qualcosa ùn và bè! Verificate %{count} prublemi quì sottu
imports:
preface: Pudete impurtà certi dati cumu e persone chì seguitate o bluccate nant’à u vostru contu nant’à st’istanza à partesi di fugliali creati nant’à un’altr’istanza.
- success: I vostri dati sò stati impurtati è saranu trattati da quì à pocu.
+ success: I vostri dati sò stati impurtati è saranu trattati da quì à pocu
types:
blocking: Persone chì bluccate
following: Persone chì seguitate
@@ -519,14 +525,14 @@ co:
landing_strip_signup_html: Pudete ancu arrigistravi quì.
lists:
errors:
- limit: Ùn pudete più creà altre liste.
+ limit: Ùn pudete più creà altre liste
media_attachments:
validations:
images_and_video: Ùn si pò micca aghjunghje un filmettu à un statutu chì hà digià ritratti
too_many: Ùn si pò micca aghjunghje più di 4 fugliali
migrations:
acct: cugnome@duminiu di u novu contu
- currently_redirecting: "’U vostru prufile riindiriza tuttu versu à:’"
+ currently_redirecting: 'U vostru prufile riindiriza tuttu versu à:'
proceed: Salvà
updated_msg: I paramettri di migrazione sò stati messi à ghjornu!
moderation:
@@ -602,7 +608,7 @@ co:
reblog:
title: "%{name} hà spartutu u vostru statutu"
remote_follow:
- acct: Entrate u vostru cugnome@istanza da induve vulete siguità stu contu.
+ acct: Entrate u vostru cugnome@istanza da induve vulete siguità stu contu
missing_resource: Ùn avemu pussutu à truvà l’indirizzu di ridirezzione
proceed: Cuntinuà per siguità
prompt: 'Avete da siguità:'
@@ -791,11 +797,11 @@ co:
disable: Disattivà
enable: Attivà
enabled: Identificazione à dui fattori attivata
- enabled_success: L’identificazione à dui fattori hè stata attivata.
+ enabled_success: L’identificazione à dui fattori hè stata attivata
generate_recovery_codes: Creà codici di ricuperazione
instructions_html: "Scanate stu QR code cù Google Authenticator, Authy o qualcosa cusì nant’à u vostru telefuninu. St’applicazione hà da creà codici da entrà ogni volta chì vi cunnettate."
lost_recovery_codes: I codici di ricuperazione à usu unicu vi permettenu di sempre avè accessu à u vostru contu s’è voi avete persu u vostru telefuninu. S’elli sò ancu persi, pudete creà codici novi quì. I vechji codici ùn marchjeranu più.
- manual_instructions: S’ellu ùn hè micca pussibule scanà u QR code, pudete entre sta chjave sicreta:’
+ manual_instructions: 'S’ellu ùn hè micca pussibule scanà u QR code, pudete entre sta chjave sicreta:'
recovery_codes: Codici di ricuperazione
recovery_codes_regenerated: Codici di ricuperazione ricreati
recovery_instructions_html: Pudete fà usu di i codici quì sottu per sempre avè accessu à u vostru contu s’ellu hè statu persu u vostru telefuninu. Guardateli in una piazza sicura. Per esempiu, stampati è cunservati cù altri ducumenti impurtanti.
@@ -811,7 +817,7 @@ co:
edit_profile_step: Pudete persunalizà u vostru prufile cù un ritrattu di prufile o di cuprendula, un nome pubblicu persunalizatu, etc. Pudete ancu rende u contu privatu per duvè cunfirmà ogni dumanda d’abbunamentu.
explanation: Eccu alcune idee per principià
final_action: Principià à pustà
- final_step: 'Andemu! Ancu senza abbunati i vostri missaghji pubblichi puderanu esse visti da altre persone, per esempiu nant’a linea lucale è l’hashtag. Pudete ancu prisintavi nant’à u hashtag #introductions!'
+ final_step: 'Andemu! Ancu senza abbunati i vostri missaghji pubblichi puderanu esse visti da altre persone, per esempiu nant’a linea lucale è l’hashtag. Pudete ancu prisintavi nant’à u hashtag #introductions.'
full_handle: U vostru identificatore cumplettu
full_handle_hint: Quessu ghjè cio chì direte à i vostri amichi per circavi, abbunassi à u vostru contu da altrò, o mandà missaghji.
review_preferences_action: Mudificà e priferenze
@@ -820,12 +826,13 @@ co:
tip_bridge_html: S’è voi venite di Twitter, pudete truvà i vostri amichi da quallà chì sò nant’à Mastodon cù a bridge app. Mà ùn marchja chè s’elli l’anu ancu usata!
tip_federated_timeline: A linea pubblica glubale mostra i statuti da altre istanze nant’a rete Mastodon, mà ùn hè micca cumpleta perchè ci sò soli i conti à quelli sò abbunati membri di a vostr’istanza.
tip_following: Site digià abbunatu·a à l’amministratori di u vostru servore. Per truvà d’altre parsone da siguità, pudete pruvà e linee pubbliche.
- tip_local_timeline: A linea pubblica lucale ghjè una vista crunulogica di i statuti di a ghjente nant’à %{instance}.
- tip_mobile_webapp: Pudete aghjunghje Mastodon à a pagina d’accolta di u vostru navigatore di telefuninu per riceve nutificazione, cum’un applicazione.
+ tip_local_timeline: A linea pubblica lucale ghjè una vista crunulogica di i statuti di a ghjente nant’à %{instance}. Quessi sò i vostri cunvicini!
+ tip_mobile_webapp: Pudete aghjunghje Mastodon à a pagina d’accolta di u vostru navigatore di telefuninu per riceve nutificazione, cum’un applicazione!
tips: Cunsiglii
title: Benvenutu·a, %{name}!
users:
- invalid_email: L’indirizzu e-mail ùn hè currettu.
- invalid_otp_token: U codice d’identificazione ùn hè currettu.
+ invalid_email: L’indirizzu e-mail ùn hè currettu
+ invalid_otp_token: U codice d’identificazione ùn hè currettu
+ otp_lost_help_html: S’è voi avete persu i dui, pudete cuntattà %{email}
seamless_external_login: Site cunnettatu·a dapoi un serviziu esternu, allora i parametri di chjave d’accessu è d’indirizzu e-mail ùn so micca dispunibili.
signed_in_as: 'Cunnettatu·a cum’è:'
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 751f33718..6d5c0fb6d 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -49,11 +49,12 @@ de:
reserved_username: Dieser Profilname ist belegt
roles:
admin: Admin
+ bot: Bot
moderator: Moderator
unfollow: Entfolgen
admin:
account_moderation_notes:
- create: Erstellen
+ create: Notiz hinterlassen
created_msg: Moderationsnotiz erfolgreich erstellt!
delete: Löschen
destroyed_msg: Moderationsnotiz erfolgreich gelöscht!
@@ -373,6 +374,7 @@ de:
admin_mailer:
new_report:
body: "%{reporter} hat %{target} gemeldet"
+ body_remote: Jemand von %{domain} hat %{target} gemeldet
subject: Neue Meldung auf %{instance} (#%{id})
application_mailer:
notification_preferences: Ändere E-Mail-Einstellungen
@@ -462,7 +464,7 @@ de:
archive_takeout:
date: Datum
download: Dein Archiv herunterladen
- hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden im ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist die das Format unterstützt.
+ hint_html: Du kannst ein Archiv deiner Beiträge und hochgeladenen Medien anfragen. Die exportierten Daten werden im ActivityPub-Format gespeichert, welches mit jeder Software lesbar ist, die das Format unterstützt. Du kannst alle 7 Tage ein neues Archiv anfordern.
in_progress: Stelle dein Archiv zusammen...
request: Dein Archiv anfragen
size: Größe
@@ -754,5 +756,6 @@ de:
users:
invalid_email: Ungültige E-Mail-Adresse
invalid_otp_token: Ungültiger Zwei-Faktor-Authentisierungs-Code
+ otp_lost_help_html: Wenn Sie zu beidem keinen Zugriff mehr haben, kontaktieren sie %{email}
seamless_external_login: Du bist angemeldet über einen Drittanbieter-Dienst, weswegen Passwort- und E-Maileinstellungen nicht verfügbar sind.
signed_in_as: 'Angemeldet als:'
diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml
index d5bb70887..2471f857b 100644
--- a/config/locales/devise.co.yml
+++ b/config/locales/devise.co.yml
@@ -78,5 +78,5 @@ co:
not_found: ùn hè micca statu trovu
not_locked: ùn era micca chjosu
not_saved:
- one: Un prublemu hà impeditu a cunservazione di stu (sta) %{resource}
+ one: 'Un prublemu hà impeditu a cunservazione di stu (sta) %{resource}:'
other: "%{count} prublemi anu impeditu a cunservazione di stu (sta) %{resource} :"
diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml
index f78412f91..8e95a3d94 100644
--- a/config/locales/devise.fa.yml
+++ b/config/locales/devise.fa.yml
@@ -20,8 +20,17 @@ fa:
subject: 'ماستدون: راهنمایی برای تأیید %{instance}'
password_change:
subject: 'ماستدون: رمزتان عوض شد'
+ reconfirmation_instructions:
+ explanation: نشانی تازه را تأیید کنید تا ایمیلتان عوض شود.
+ extra: اگر شما باعث این تغییر نبودید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید، نشانی ایمیل مربوط به حساب شما عوض نخواهد شد.
+ subject: 'ماستدون: تأیید ایمیل برای %{instance}'
+ title: تأیید نشانی ایمیل
reset_password_instructions:
+ action: تغییر رمز
+ explanation: شما رمز تازهای برای حسابتان درخواست کردید.
+ extra: اگر شما چنین درخواستی نکردید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید و رمز تازهای نسازید، رمز شما عوض نخواهد شد.
subject: 'ماستدون: راهنمایی برای بازنشانی رمز'
+ title: بازنشانی رمز
unlock_instructions:
subject: 'ماستدون: راهنمایی برای بازکردن قفل'
omniauth_callbacks:
@@ -57,5 +66,5 @@ fa:
not_found: پیدا نشد
not_locked: قفل نبود
not_saved:
- one: خطایی نگذاشت که این %{resource} ذخیره شود
- other: به خاطر %{count} خطا، این %{resource} ذخیره نشد
+ one: 'خطایی نگذاشت که این %{resource} ذخیره شود:'
+ other: 'به خاطر %{count} خطا، این %{resource} ذخیره نشد:'
diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml
index 01b082e40..31080d153 100644
--- a/config/locales/doorkeeper.co.yml
+++ b/config/locales/doorkeeper.co.yml
@@ -29,7 +29,7 @@ co:
edit:
title: Mudificà l’applicazione
form:
- error: Uups! V’invitemu à verificà u vostru formulariu per vede s’elli ùn ci sò sbaglii.
+ error: Uups! V’invitemu à verificà u vostru formulariu per vede s’elli ùn ci sò sbaglii
help:
native_redirect_uri: Utilizate %{native_redirect_uri} pè e prove lucale
redirect_uri: Utilizzate una linea per ogni URI
@@ -60,10 +60,10 @@ co:
title: C’hè statu un prublemu
new:
able_to: St’applicazione puderà
- prompt: Parmette %{client_name} d’utilizzà u vostru contu?
+ prompt: L’applicazione %{client_name} hà dumandatu d’avè accessu à u vostru contu
title: Permessu riquestu
show:
- title: Codice d’auturizazione da cupià indè l’applicazione
+ title: Codice d’auturizazione da cupià indè l’applicazione.
authorized_applications:
buttons:
revoke: Sguassà
@@ -83,7 +83,7 @@ co:
invalid_grant: L’accunsentu d’auturizazione furnitu ùn hè currettu, hè spiratu, sguassatu, ùn và micca cù l’indirizzu di ridirezzione usatu in a dumanda d’auturizazione, o hè statu emessu per un’altru cliente.
invalid_redirect_uri: L’URI di ridirezzione ùn hè curretta.
invalid_request: Ci manca un parametru riquestu indè a dumanda, cuntene un parametru ch’ùn esiste micca, o altru sbagliu di forma.
- invalid_resource_owner: L’idintificanti di u pruprietariu di a risorsa ùn sò curretti, o u pruprietariu ùn pò micca esse trovu.
+ invalid_resource_owner: L’idintificanti di u pruprietariu di a risorsa ùn sò curretti, o u pruprietariu ùn pò micca esse trovu
invalid_scope: U scopu dumandatu ùn hè currettu, hè scunnisciutu, o altru sbagliu di forma.
invalid_token:
expired: A marca d’accessu hè spirata
@@ -112,7 +112,7 @@ co:
applications: Applicazione
oauth2_provider: Furnitore OAuth2
application:
- title: Auturizazione OAuth riquestata.
+ title: Auturizazione OAuth riquestata
scopes:
follow: bluccà, sbluccà, è reghje l’abbunamenti
read: leghje l’infurmazione di u vostru contu
diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml
index 33d544bed..eca1fc675 100644
--- a/config/locales/doorkeeper.en.yml
+++ b/config/locales/doorkeeper.en.yml
@@ -115,5 +115,6 @@ en:
title: OAuth authorization required
scopes:
follow: follow, block, unblock and unfollow accounts
+ push: receive push notifications for your account
read: read your account's data
write: post on your behalf
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
index f3db862ca..7e6a04ea8 100644
--- a/config/locales/doorkeeper.fa.yml
+++ b/config/locales/doorkeeper.fa.yml
@@ -19,56 +19,56 @@ fa:
doorkeeper:
applications:
buttons:
- authorize: Authorize
- cancel: Cancel
- destroy: Destroy
- edit: Edit
+ authorize: اجازه دادن
+ cancel: لغو
+ destroy: پاک کردن
+ edit: ویرایش
submit: Submit
confirmations:
- destroy: Are you sure?
+ destroy: آیا مطمئن هستید؟
edit:
- title: Edit application
+ title: ویرایش برنامه
form:
- error: Whoops! Check your form for possible errors
+ error: اوخ! ببینید چیزی را اشتباهی در فرم وارد نکردهاید؟
help:
- native_redirect_uri: Use %{native_redirect_uri} for local tests
- redirect_uri: Use one line per URI
- scopes: Separate scopes with spaces. Leave blank to use the default scopes.
+ native_redirect_uri: برای آزمایشهای محلی %{native_redirect_uri} را به کار ببرید
+ redirect_uri: هر URI را در یک سطر جدا بنویسید
+ scopes: دامنهها را با فاصلهٔ خالی از هم جدا کنید. برای بهکاربردن دامنهٔ پیشفرض خالی بگذارید.
index:
- application: Application
- callback_url: Callback URL
+ application: برنامه
+ callback_url: نشانی Callback
delete: Delete
name: Name
- new: New application
- scopes: Scopes
- show: Show
- title: Your applications
+ new: برنامهٔ تازه
+ scopes: دامنهها
+ show: نمایش
+ title: برنامههای شما
new:
- title: New application
+ title: برنامهٔ تازه
show:
actions: Actions
- application_id: Client key
- callback_urls: Callback URLs
- scopes: Scopes
- secret: Client secret
- title: 'Application: %{name}'
+ application_id: کلید کلاینت
+ callback_urls: نشانیهای Callabck
+ scopes: دامنهها
+ secret: کد سری کلاینت
+ title: 'برنامه: %{name}'
authorizations:
buttons:
- authorize: Authorize
- deny: Deny
+ authorize: اجازه دادن
+ deny: لغو اجازه
error:
- title: An error has occurred
+ title: خطایی رخ داد
new:
- able_to: It will be able to
- prompt: Application %{client_name} requests access to your account
- title: Authorization required
+ able_to: اجازه خواهد داشت
+ prompt: برنامهٔ %{client_name} میخواهد به حساب شما دسترسی داشته باشد
+ title: نیاز به اجازه دادن
show:
- title: Copy this authorization code and paste it to the application.
+ title: این کد مجوز را کپی کرده و در برنامه وارد کنید.
authorized_applications:
buttons:
- revoke: Revoke
+ revoke: فسخ
confirmations:
- revoke: Are you sure?
+ revoke: آیا مطمئن هستید؟
index:
application: برنامه
created_at: مجازشده از
@@ -77,7 +77,7 @@ fa:
title: برنامههای مجاز
errors:
messages:
- access_denied: The resource owner or authorization server denied the request.
+ access_denied: دارندهٔ منبع یا سرور اجازه دهنده درخواست را نپذیرفت.
credential_flow_not_configured: Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.
invalid_client: Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.
invalid_grant: The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
@@ -86,34 +86,34 @@ fa:
invalid_resource_owner: The provided resource owner credentials are not valid, or resource owner cannot be found
invalid_scope: The requested scope is invalid, unknown, or malformed.
invalid_token:
- expired: The access token expired
- revoked: The access token was revoked
- unknown: The access token is invalid
+ expired: کد دسترسی منقضی شده است
+ revoked: کد دسترسی فسخ شده است
+ unknown: کد دسترسی معتبر نیست
resource_owner_authenticator_not_configured: Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.
- server_error: The authorization server encountered an unexpected condition which prevented it from fulfilling the request.
- temporarily_unavailable: The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
+ server_error: خطای پیشبینینشدهای برای سرور اجازهدهنده رخ داد که جلوی اجرای این درخواست را گرفت.
+ temporarily_unavailable: سرور اجازهدهنده به دلیل بار زیاد یا تعمیرات سرور هماینک نمیتواند درخواست شما را بررسی کند.
unauthorized_client: The client is not authorized to perform this request using this method.
unsupported_grant_type: The authorization grant type is not supported by the authorization server.
unsupported_response_type: The authorization server does not support this response type.
flash:
applications:
create:
- notice: Application created.
+ notice: برنامه ساخته شد.
destroy:
- notice: Application deleted.
+ notice: برنامه حذف شد.
update:
- notice: Application updated.
+ notice: برنامه بهروز شد.
authorized_applications:
destroy:
- notice: Application revoked.
+ notice: برنامه فسخ شد.
layouts:
admin:
nav:
- applications: Applications
- oauth2_provider: OAuth2 Provider
+ applications: برنامهها
+ oauth2_provider: فراهمکنندهٔ ورود دومرحلهای
application:
- title: OAuth authorization required
+ title: درخواست اجازهٔ OAuth
scopes:
- follow: follow, block, unblock and unfollow accounts
- read: read your account's data
- write: post on your behalf
+ follow: پیگیری، مسدودسازی، لغو مسدودسازی، و لغو پیگیری حسابها
+ read: خواندن اطلاعات حساب شما
+ write: انتشار مطالب از طرف شما
diff --git a/config/locales/el.yml b/config/locales/el.yml
index da2b7a64a..823a6f576 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -5,7 +5,7 @@ el:
about_mastodon_html: Το Mastodon είναι ένα κοινωνικό δίκτυο που βασίζεται σε ανοιχτά δικτυακά πρωτόκολλα και ελεύθερο λογισμικό ανοιχτού κώδικα. Είναι αποκεντρωμένο όπως το e-mail.
about_this: Σχετικά
administered_by: 'Διαχειρίζεται από:'
- closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον διακομιστή είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο διακομιστή για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
+ closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο.
contact: Επικοινωνία
contact_missing: Δεν έχει οριστεί
contact_unavailable: Μ/Δ
@@ -27,7 +27,7 @@ el:
generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο"
hosted_on: Το Mastodon φιλοξενείται στο %{domain}
learn_more: Μάθε περισσότερα
- other_instances: Λίστα διακομιστών
+ other_instances: Λίστα κόμβων
source_code: Πηγαίος κώδικας
status_count_after: καταστάσεις
status_count_before: Ποιός συνέγραψε
@@ -49,6 +49,7 @@ el:
reserved_username: Το όνομα χρήστη είναι κατειλημμένο
roles:
admin: Διαχειριστής
+ bot: Μποτ (αυτόματος λογαριασμός)
moderator: Μεσολαβητής
unfollow: Διακοπή παρακολούθησης
admin:
@@ -70,6 +71,7 @@ el:
title: Αλλαγή email για %{username}
confirm: Επιβεβαίωση
confirmed: Επιβεβαιώθηκε
+ confirming: Προς επιβεβαίωση
demote: Υποβίβαση
disable: Απενεργοποίηση
disable_two_factor_authentication: Απενεργοποίηση 2FA
@@ -78,6 +80,7 @@ el:
domain: Τομέας
edit: Αλλαγή
email: Email
+ email_status: Κατάσταση email
enable: Ενεργοποίηση
enabled: Ενεργοποιημένο
feed_url: URL ροής
@@ -116,6 +119,10 @@ el:
push_subscription_expires: Η εγγραφή PuSH λήγει
redownload: Ανανέωση αβατάρ
remove_avatar: Απομακρυσμένο αβατάρ
+ resend_confirmation:
+ already_confirmed: Ήδη επιβεβαιωμένος χρήστης
+ send: Επανάληψη αποστολής email επιβεβαίωσης
+ success: Το email επιβεβαίωσης στάλθηκε επιτυχώς!
reset: Επαναφορά
reset_password: Επαναφορά συνθηματικού
resubscribe: Επανεγγραφή
@@ -194,6 +201,7 @@ el:
shortcode: Σύντομος κωδικός
shortcode_hint: Τουλάχιστον 2 χαρακτήρες, μόνο αλφαριθμητικοί και κάτω παύλες
title: Προσαρμοσμένα emoji
+ unlisted: Μη καταχωρημένα
update_failed_msg: Αδυναμία ενημέρωσης του emoji
updated_msg: Επιτυχής ενημέρωση του Emoji!
upload: Ανέβασμα
@@ -205,3 +213,42 @@ el:
new:
create: Δημιουργία αποκλεισμού
hint: Ο αποκλεισμός τομέα δεν θα αποτρέψει νέες καταχωρίσεις λογαριασμών στην βάση δεδομένων, αλλά θα εφαρμόσει αναδρομικά και αυτόματα συγκεκριμένες πολιτικές μεσολάβησης σε αυτούς τους λογαριασμούς.
+ severity:
+ noop: Κανένα
+ silence: Σίγαση
+ settings:
+ hero:
+ desc_html: Εμφανίζεται στην μπροστινή σελίδα. Συνίσταται τουλάχιστον 600x100px. Όταν λείπει, χρησιμοποιείται η μικρογραφία του κόμβου
+ peers_api_enabled:
+ desc_html: Ονόματα τομέων που αυτός ο κόμβος έχει πετύχει στο fediverse
+ show_known_fediverse_at_about_page:
+ title: Εμφάνιση του γνωστού fediverse στην προεπισκόπηση ροής
+ site_description:
+ title: Περιγραφή κόμβου
+ site_description_extended:
+ desc_html: Ένα καλό μέρος για τον κώδικα δεοντολογίας, τους κανόνες, τις οδηγίες και ό,τι άλλο διαφοροποιεί τον κόμβο σου. Δέχεται και κώδικα HTML
+ site_title: Όνομα κόμβου
+ thumbnail:
+ title: Μικρογραφία κόμβου
+ timeline_preview:
+ desc_html: Εμφάνισε τη δημόσια ροή στην αρχική σελίδα
+ title: Προεπισκόπιση ροής
+ admin_mailer:
+ new_report:
+ subject: Νέα αναφορά για %{instance} (#%{id})
+ auth:
+ agreement_html: Με την εγγραφή σου, συμφωνείς να ακολουθείς τους κανόνες αυτού του κόμβου και τους όρους χρήσης του.
+ deletes:
+ warning_html: Μόνο η διαγραφή περιεχομένου από αυτό τον συγκεκριμένο κόμβο είναι εγγυημένη. Το περιεχόμενο που έχει διαμοιραστεί ευρέως είναι πιθανό να αφήσει ίχνη. Όσοι διακομιστές είναι εκτός σύνδεσης και όσοι έχουν διακόψει τη λήψη των ενημερώσεων του κόμβου σου, δε θα ενημερώσουν τις βάσεις δεδομένων τους.
+ imports:
+ preface: Μπορείς να εισάγεις τα δεδομένα που έχεις εξάγει από άλλο κόμβο, όπως τη λίστα των ανθρώπων που ακολουθείς ή μπλοκάρεις.
+ invites:
+ prompt: Φτιάξε και μοίρασε συνδέσμους με τρίτους για να δώσεις πρόσβαση σε αυτόν τον κόμβο
+ terms:
+ title: Όροι Χρήσης και Πολιτική Απορρήτου του κόμβου %{instance}
+ user_mailer:
+ welcome:
+ final_step: 'Ξεκίνα τις δημοσιεύσεις! Ακόμα και χωρίς ακόλουθους τα δημόσια μηνύματά σου μπορεί να τα δουν άλλοι, για παράδειγμα στην τοπική ροή και στις ετικέτες. Ίσως να θέλεις να κάνεις μια εισαγωγή του εαυτού σου με την ετικέτα #introductions.'
+ full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο κόμβο.
+ tip_federated_timeline: Η συνδυασμένη ροή είναι μια όψη πραγματικού χρόνου στο δίκτυο του Mastodon. Παρόλα αυτά, περιλαμβάνει μόνο όσους ακολουθούν οι γείτονές σου, άρα δεν είναι πλήρης.
+ tip_local_timeline: Η τοπική ροή είναι η όψη πραγματικού χρόνου των ανθρώπων στον κόμβο %{instance}. Αυτοί είναι οι άμεσοι γείτονές σου!
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 47d591993..0903e3517 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -4,6 +4,7 @@ eo:
about_hashtag_html: Ĉi tiuj estas la publikaj mesaĝoj markitaj per #%{hashtag}. Vi povas interagi kun ili se vi havas konton ie ajn en la fediverse.
about_mastodon_html: Mastodon estas socia reto bazita sur malfermitaj retaj protokoloj kaj sur libera malfermitkoda programo. Ĝi estas sencentra kiel retmesaĝoj.
about_this: Pri
+ administered_by: 'Administrata de:'
closed_registrations: Registriĝoj estas nuntempe fermitaj en ĉi tiu nodo. Tamen, vi povas trovi alian nodon por fari konton kaj aliri al la sama reto de tie.
contact: Kontakti
contact_missing: Ne elektita
@@ -48,17 +49,26 @@ eo:
reserved_username: La uzantnomo estas rezervita
roles:
admin: Administranto
+ bot: Roboto
moderator: Kontrolanto
unfollow: Ne plu sekvi
admin:
account_moderation_notes:
- create: Krei
+ create: Lasi noton
created_msg: Kontrola noto sukcese kreita!
delete: Forigi
destroyed_msg: Kontrola noto sukcese detruita!
accounts:
are_you_sure: Ĉu vi certas?
+ avatar: Profilbildo
by_domain: Domajno
+ change_email:
+ changed_msg: Konta retadreso sukcese ŝanĝita!
+ current_email: Nuna retadreso
+ label: Ŝanĝi retadreson
+ new_email: Nova retadreso
+ submit: Ŝanĝi retadreson
+ title: Ŝanĝi retadreson por %{username}
confirm: Konfirmi
confirmed: Konfirmita
confirming: Konfirmante
@@ -108,10 +118,11 @@ eo:
public: Publika
push_subscription_expires: Eksvalidiĝo de la abono al PuSH
redownload: Aktualigi profilbildon
+ remove_avatar: Forigi profilbildon
resend_confirmation:
already_confirmed: Ĉi tiu uzanto jam estas konfirmita
send: Esend konfirmi retpoŝton
- success: Konfirma retpoŝto sukcese sendis
+ success: Konfirma retmesaĝo sukcese sendita!
reset: Restarigi
reset_password: Restarigi pasvorton
resubscribe: Reaboni
@@ -132,6 +143,7 @@ eo:
statuses: Mesaĝoj
subscribe: Aboni
title: Kontoj
+ unconfirmed_email: Nekonfirmita retadreso
undo_silenced: Malfari kaŝon
undo_suspension: Malfari haltigon
unsubscribe: Malaboni
@@ -139,6 +151,8 @@ eo:
web: Reto
action_logs:
actions:
+ assigned_to_self_report: "%{name} asignis signalon %{target} al si mem"
+ change_email_user: "%{name} ŝanĝis retadreson de uzanto %{target}"
confirm_user: "%{name} konfirmis retadreson de uzanto %{target}"
create_custom_emoji: "%{name} alŝutis novan emoĝion %{target}"
create_domain_block: "%{name} blokis domajnon %{target}"
@@ -154,10 +168,13 @@ eo:
enable_user: "%{name} ebligis ensaluton por uzanto %{target}"
memorialize_account: "%{name} ŝanĝis la konton de %{target} al memora paĝo"
promote_user: "%{name} plirangigis uzanton %{target}"
+ remove_avatar_user: "%{name} forigis profilbildon de %{target}"
+ reopen_report: "%{name} remalfermis signalon %{target}"
reset_password_user: "%{name} restarigis pasvorton de uzanto %{target}"
- resolve_report: "%{name} flankmetis signalon %{target}"
+ resolve_report: "%{name} solvis signalon %{target}"
silence_account: "%{name} kaŝis la konton de %{target}"
suspend_account: "%{name} haltigis la konton de %{target}"
+ unassigned_report: "%{name} malasignis signalon %{target}"
unsilence_account: "%{name} malkaŝis la konton de %{target}"
unsuspend_account: "%{name} malhaltigis la konton de %{target}"
update_custom_emoji: "%{name} ĝisdatigis emoĝion %{target}"
@@ -243,24 +260,44 @@ eo:
expired: Eksvalida
title: Filtri
title: Invitoj
+ report_notes:
+ created_msg: Signala noto sukcese kreita!
+ destroyed_msg: Signala noto sukcese forigita!
reports:
+ account:
+ note: noto
+ report: signalo
action_taken_by: Ago farita de
are_you_sure: Ĉu vi certas?
+ assign_to_self: Asigni al mi
+ assigned: Asignita kontrolanto
comment:
none: Nenio
+ created_at: Signalita
id: ID
- mark_as_resolved: Marki kiel solvita
+ mark_as_resolved: Marki solvita
+ mark_as_unresolved: Marki nesolvita
+ notes:
+ create: Aldoni noton
+ create_and_resolve: Solvi per noto
+ create_and_unresolve: Remalfermi per noto
+ delete: Forigi
+ placeholder: Priskribu faritajn agojn, aŭ ajnan novan informon pri tiu signalo…
+ reopen: Remalfermi signalon
report: 'Signalo #%{id}'
report_contents: Enhavo
reported_account: Signalita konto
reported_by: Signalita de
resolved: Solvita
+ resolved_msg: Signalo sukcese solvita!
silence_account: Kaŝi konton
status: Mesaĝoj
suspend_account: Haltigi konton
target: Celo
title: Signaloj
+ unassign: Malasigni
unresolved: Nesolvita
+ updated_at: Ĝisdatigita
view: Vidi
settings:
activity_api_enabled:
@@ -318,8 +355,8 @@ eo:
back_to_account: Reveni al konta paĝo
batch:
delete: Forigi
- nsfw_off: Malŝalti NSFW
- nsfw_on: Ŝalti NSFW
+ nsfw_off: Marki ne tikla
+ nsfw_on: Marki tikla
failed_to_execute: Ekigo malsukcesa
media:
title: Aŭdovidaĵoj
@@ -337,6 +374,7 @@ eo:
admin_mailer:
new_report:
body: "%{reporter} signalis %{target}"
+ body_remote: Iu de %{domain} signalis %{target}
subject: Nova signalo por %{instance} (#%{id})
application_mailer:
notification_preferences: Ŝanĝi retmesaĝajn preferojn
@@ -378,6 +416,7 @@ eo:
security: Sekureco
set_new_password: Elekti novan pasvorton
authorize_follow:
+ already_following: Vi jam sekvas tiun konton
error: Bedaŭrinde, estis eraro en la serĉado de la fora konto
follow: Sekvi
follow_request: 'Vi sendis peton de sekvado al:'
@@ -427,7 +466,7 @@ eo:
archive_takeout:
date: Dato
download: Elŝuti vian arkivon
- hint_html: Vi povas peti arkivon de viaj mesaĝoj kaj alŝutitaj aŭdovidaĵoj. La eksportitaj datumoj estos en la formato ActivityPub, legebla de ajna konformema programo.
+ hint_html: Vi povas peti arkivon de viaj mesaĝoj kaj alŝutitaj aŭdovidaĵoj. La eksportitaj datumoj estos en la formato ActivityPub, legebla de ajna konformema programo. Vi povas peti arkivon ĉiuseptage.
in_progress: Kunmetado de via arkivo…
request: Peti vian arkivon
size: Grandeco
@@ -472,6 +511,7 @@ eo:
'21600': 6 horoj
'3600': 1 horo
'43200': 12 horoj
+ '604800': 1 semajno
'86400': 1 tago
expires_in_prompt: Neniam
generate: Krei
@@ -575,6 +615,10 @@ eo:
missing_resource: La URL de plusendado ne estis trovita
proceed: Daŭrigi por eksekvi
prompt: 'Vi eksekvos:'
+ remote_unfollow:
+ error: Eraro
+ title: Titolo
+ unfollowed: Ne plu sekvita
sessions:
activity: Lasta ago
browser: Retumilo
@@ -641,6 +685,9 @@ eo:
one: "%{count} video"
other: "%{count} videoj"
content_warning: 'Enhava averto: %{warning}'
+ disallowed_hashtags:
+ one: 'enhavas malpermesitan kradvorton: %{tags}'
+ other: 'enhavis malpermesitan kradvorton: %{tags}'
open_in_web: Malfermi retumile
over_character_limit: limo de %{max} signoj transpasita
pin_errors:
@@ -665,6 +712,7 @@ eo:
terms:
title: Uzkondiĉoj kaj privateca politiko de %{instance}
themes:
+ contrast: Forta kontrasto
default: Mastodon
time:
formats:
@@ -711,5 +759,6 @@ eo:
users:
invalid_email: La retadreso estas nevalida
invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo
+ otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email}
seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retadresaj agordoj ne estas disponeblaj.
signed_in_as: 'Ensalutinta kiel:'
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 5255e0e38..1a8372d63 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -4,6 +4,7 @@ fa:
about_hashtag_html: اینها نوشتههای عمومی هستند که برچسب (هشتگ) #%{hashtag} را دارند. اگر شما روی هر سروری حساب داشته باشید میتوانید به این نوشتهها واکنش نشان دهید.
about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی است که بر اساس پروتکلهای آزاد وب و نرمافزارهای آزاد و کدباز ساخته شده است. این شبکه مانند ایمیل غیرمتمرکز است.
about_this: درباره
+ administered_by: 'با مدیریت:'
closed_registrations: ثبتنام روی این سرور هماینک فعال نیست. اما شما میتوانید سرور دیگری بیابید و با حسابی که آنجا میسازید دقیقاً به همین شبکه دسترسی داشته باشید.
contact: تماس
contact_missing: تعیین نشده
@@ -52,13 +53,21 @@ fa:
unfollow: پایان پیگیری
admin:
account_moderation_notes:
- create: نوشتن
+ create: افزودن یادداشت
created_msg: یادداشت مدیر با موفقیت ساخته شد!
delete: پاک کردن
destroyed_msg: یادداشت مدیر با موفقیت پاک شد!
accounts:
are_you_sure: آیا مطمئن هستید؟
+ avatar: تصویر نمایه
by_domain: دامین
+ change_email:
+ changed_msg: نشانی ایمیل این حساب با موفقیت تغییر کرد!
+ current_email: ایمیل کنونی
+ label: تغییر نشانی ایمیل
+ new_email: ایمیل تازه
+ submit: تغییر ایمیل
+ title: تغییر ایمیل برای %{username}
confirm: تأیید
confirmed: تأیید شد
confirming: تأیید
@@ -91,7 +100,7 @@ fa:
all: همه
silenced: بیصدا شده
suspended: معلق شده
- title: مدیریت
+ title: وضعیت
moderation_notes: یادداشت مدیر
most_recent_activity: آخرین فعالیتها
most_recent_ip: آخرین IP ها
@@ -108,10 +117,11 @@ fa:
public: عمومی
push_subscription_expires: عضویت از راه PuSH منقضی شد
redownload: بهروزرسانی تصویر نمایه
+ remove_avatar: حذف تصویر نمایه
resend_confirmation:
already_confirmed: این کاربر قبلا تایید شده است
send: ایمیل تایید را دوباره بفرستید
- success: ایمیل تایید با موفقیت ارسال شد
+ success: ایمیل تایید با موفقیت ارسال شد!
reset: بازنشانی
reset_password: بازنشانی رمز
resubscribe: اشتراک دوباره
@@ -132,6 +142,7 @@ fa:
statuses: نوشتهها
subscribe: اشتراک
title: حسابها
+ unconfirmed_email: ایمیل تأییدنشده
undo_silenced: واگردانی بیصداکردن
undo_suspension: واگردانی تعلیق
unsubscribe: لغو اشتراک
@@ -139,6 +150,8 @@ fa:
web: وب
action_logs:
actions:
+ assigned_to_self_report: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت"
+ change_email_user: "%{name} نشانی ایمیل کاربر %{target} را تغییر داد"
confirm_user: "%{name} نشانی ایمیل کاربر %{target} را تأیید کرد"
create_custom_emoji: "%{name} شکلک تازهٔ %{target} را بارگذاشت"
create_domain_block: "%{name} دامین %{target} را مسدود کرد"
@@ -154,10 +167,13 @@ fa:
enable_user: "%{name} ورود را برای کاربر %{target} فعال کرد"
memorialize_account: "%{name} حساب کاربر %{target} را تبدیل به صفحهٔ یادمان کرد"
promote_user: "%{name} کاربر %{target} را ترفیع داد"
+ remove_avatar_user: "%{name} تصویر نمایهٔ کاربر %{target} را حذف کرد"
+ reopen_report: "%{name} گزارش %{target} را دوباره به جریان انداخت"
reset_password_user: "%{name} رمز کاربر %{target} را بازنشاند"
- resolve_report: "%{name} گزارش %{target} را نادیده گرفت"
+ resolve_report: "%{name} گزارش %{target} را رفع کرد"
silence_account: "%{name} حساب کاربر %{target} را خاموش (بیصدا) کرد"
suspend_account: "%{name} حساب کاربر %{target} را تعلیق کرد"
+ unassigned_report: "%{name} بررسی گزارش %{target} را متوقف کرد"
unsilence_account: "%{name} حساب کاربر %{target} را روشن (باصدا) کرد"
unsuspend_account: "%{name} حساب کاربر %{target} را از تعلیق خارج کرد"
update_custom_emoji: "%{name} شکلک %{target} را بهروز کرد"
@@ -243,32 +259,61 @@ fa:
expired: منقضیشده
title: فیلتر
title: دعوتها
+ report_notes:
+ created_msg: یادداشت گزارش با موفقیت ساخته شد!
+ destroyed_msg: یادداشت گزارش با موفقیت حذف شد!
reports:
+ account:
+ note: یادداشت
+ report: گزارش
action_taken_by: انجامدهنده
are_you_sure: آیا مطمئن هستید؟
+ assign_to_self: به عهدهٔ من بگذار
+ assigned: مدیر عهدهدار
comment:
none: خالی
+ created_at: گزارششده
id: شناسه
mark_as_resolved: علامتگذاری به عنوان حلشده
+ mark_as_unresolved: علامتگذاری به عنوان حلنشده
+ notes:
+ create: افزودن یادداشت
+ create_and_resolve: حل کردن با یادداشت
+ create_and_unresolve: دوباره گشودن با یادداشت
+ delete: حذف
+ placeholder: کارهایی را که در این باره انجام شده، یا هر بهروزرسانی دیگری را بنویسید…
+ reopen: دوباره به جریان بیندازید
report: 'گزارش #%{id}'
report_contents: محتوا
reported_account: حساب گزارششده
reported_by: گزارش از طرف
resolved: حلشده
+ resolved_msg: گزارش با موفقیت حل شد!
silence_account: بیصدا کردن حساب
status: نوشته
suspend_account: معلقکردن حساب
target: هدف
title: گزارشها
+ unassign: پسگرفتن مسئولیت
unresolved: حلنشده
+ updated_at: بهروز شد
view: نمایش
settings:
+ activity_api_enabled:
+ desc_html: تعداد بوقهای محلی، کاربران فعال، و کاربران تازه در هر هفته
+ title: انتشار آمار تجمیعی دربارهٔ فعالیت کاربران
bootstrap_timeline_accounts:
desc_html: نامهای کاربری را با ویرگول از هم جدا کنید. تنها حسابهای محلی و قفلنشده کار میکنند. اگر اینجا را خالی بگذارید، به طور پیشفرض همهٔ مدیرهای این سرور پیگرفته خواهند شد.
title: پیگیریهای پیشفرض برای کاربران تازه
contact_information:
email: ایمیل کاری
username: نام کاربری
+ hero:
+ desc_html: در صفحهٔ آغازین نمایش مییابد. دستکم ۶۰۰×۱۰۰ پیکسل توصیه میشود. اگر تعیین نشود، با تصویر بندانگشتی سرور جایگزین خواهد شد
+ title: تصویر سربرگ
+ peers_api_enabled:
+ desc_html: دامینهایی که این سرور به آنها برخورده است
+ title: انتشار فهرست سرورهای یافتهشده
registrations:
closed_message:
desc_html: وقتی امکان ثبت نام روی سرور فعال نباشد در صفحهٔ اصلی نمایش مییابدDe uitgebreide omschrijving is nog niet ingevuld.
features: - humane_approach_body: Na van de fouten van andere netwerken te hebben geleerd, tracht Mastodon ethische ontwerpkeuzes te maken om misbruik van social media te voorkomen. + humane_approach_body: Mastodon heeft van de fouten van andere sociale netwerken geleerd en probeert aan de hand van ethische ontwerpkeuzes misbruik van sociale media te voorkomen. humane_approach_title: Een meer menselijke aanpak - not_a_product_body: Mastodon is geen commercieel netwerk. Dus geen advertenties, geen datamining en geen besloten systemen. Er is geen centrale organisatie die alles bepaald. + not_a_product_body: Mastodon is geen commercieel netwerk. Dus geen advertenties, geen datamining en geen besloten systemen. Er is geen centrale organisatie die alles bepaalt. not_a_product_title: Jij bent een persoon, geen product - real_conversation_body: Met 500 karakters tot jouw beschikking, en ondersteuning voor tekst- en media-waarschuwingen, kan je jezelf uiten zoals jij dat wil. + real_conversation_body: Met 500 tekens tot jouw beschikking en ondersteuning voor tekst- en media-waarschuwingen, kan je jezelf uiten zoals jij dat wil. real_conversation_title: Voor echte gesprekken gemaakt within_reach_body: Meerdere apps voor iOS, Android en andere platformen, met dank aan het ontwikkelaarsvriendelijke API-systeem, zorgen ervoor dat je overal op de hoogte blijft. within_reach_title: Altijd binnen bereik @@ -41,19 +41,20 @@ nl: media: Media moved_html: "%{name} is verhuisd naar %{new_profile_link}:" nothing_here: Hier is niets! - people_followed_by: Mensen die %{name} volgt + people_followed_by: Mensen die %{name} volgen people_who_follow: Mensen die %{name} volgen posts: Toots - posts_with_replies: Toots met reacties + posts_with_replies: Toots en reacties remote_follow: Extern volgen reserved_username: Deze gebruikersnaam is gereserveerd roles: admin: Beheerder - moderator: Mod + bot: Bot + moderator: Moderator unfollow: Ontvolgen admin: account_moderation_notes: - create: Aanmaken + create: Laat een opmerking achter created_msg: Aanmaken van opmerking voor moderatoren geslaagd! delete: Verwijderen destroyed_msg: Verwijderen van opmerking voor moderatoren geslaagd! @@ -64,10 +65,10 @@ nl: change_email: changed_msg: E-mailadres van account succesvol veranderd! current_email: Huidig e-mailadres - label: E-mailadres veranderen + label: E-mailadres wijzigen new_email: Nieuw e-mailadres submit: E-mailadres veranderen - title: E-mailadres veranderen voor %{username} + title: E-mailadres wijzigen voor %{username} confirm: Bevestigen confirmed: Bevestigd confirming: Bevestiging @@ -93,9 +94,9 @@ nl: local: Lokaal remote: Extern title: Locatie - login_status: Aanmeldstatus + login_status: Login status media_attachments: Mediabijlagen - memorialize: Verander naar in memoriam + memorialize: In gedenkpagina veranderen moderation: all: Alles silenced: Genegeerd @@ -112,7 +113,7 @@ nl: outbox_url: Outbox-URL perform_full_suspension: Volledig opschorten profile_url: Profiel-URL - promote: Promoten + promote: Promoveren protocol: Protocol public: Openbaar push_subscription_expires: PuSH-abonnement verloopt op @@ -125,7 +126,7 @@ nl: reset: Opnieuw reset_password: Wachtwoord opnieuw instellen resubscribe: Opnieuw abonneren - role: Permissies + role: Bevoegdheden roles: admin: Beheerder moderator: Moderator @@ -165,7 +166,7 @@ nl: disable_user: Aanmelden voor %{target} is door %{name} uitgeschakeld enable_custom_emoji: Emoji %{target} is door %{name} ingeschakeld enable_user: Inloggen voor %{target} is door %{name} ingeschakeld - memorialize_account: Account %{target} is door %{name} in een in-memoriampagina veranderd + memorialize_account: Account %{target} is door %{name} in een gedenkpagina veranderd promote_user: Gebruiker %{target} is door %{name} gepromoveerd remove_avatar_user: "%{name} verwijderde de avatar van %{target}" reopen_report: "%{name} heeft gerapporteerde toot %{target} heropend" @@ -224,7 +225,7 @@ nl: noop: Geen silence: Negeren suspend: Opschorten - severity: Strengheid + severity: Zwaarte show: affected_accounts: one: Eén account in de database aangepast @@ -463,7 +464,7 @@ nl: archive_takeout: date: Datum download: Jouw archief downloaden - hint_html: Je kunt een archief opvragen van jouw toots en geüploade media. De geëxporteerde gegevens zijn in ActivityPub-formaat, dat door hiervoor geschikte software valt uit te lezen. + hint_html: Je kunt een archief opvragen van jouw toots en geüploade media. De geëxporteerde gegevens zijn in ActivityPub-formaat, dat door hiervoor geschikte software valt uit te lezen. Je kunt elke 7 dagen een kopie van je archief aanvragen. in_progress: Jouw archief wordt samengesteld... request: Jouw archief opvragen size: Omvang @@ -830,5 +831,6 @@ nl: users: invalid_email: E-mailadres is ongeldig invalid_otp_token: Ongeldige tweestaps-aanmeldcode + otp_lost_help_html: Als je toegang tot beiden kwijt bent geraakt, neem dan contact op via %{email} seamless_external_login: Je bent ingelogd via een externe dienst, daarom zijn wachtwoorden en e-mailinstellingen niet beschikbaar. signed_in_as: 'Ingelogd als:' diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index e959ee19f..268a8f02a 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -53,7 +53,7 @@ pt-BR: unfollow: Deixar de seguir admin: account_moderation_notes: - create: Criar + create: Criar uma advertência created_msg: Nota de moderação criada com sucesso! delete: Excluir destroyed_msg: Nota de moderação excluída com sucesso! @@ -373,6 +373,7 @@ pt-BR: admin_mailer: new_report: body: "%{reporter} denunciou %{target}" + body_remote: Alguém da instância %{domain} reportou %{target} subject: Nova denúncia sobre %{instance} (#%{id}) application_mailer: notification_preferences: Mudar preferências de e-mail @@ -462,7 +463,7 @@ pt-BR: archive_takeout: date: Data download: Baixe o seu arquivo - hint_html: Você pode pedir um arquivo dos seus toots e mídia enviada. Os dados exportados estarão no formato ActivityPub, que podem ser lidos por qualquer software compatível. + hint_html: Você pode pedir um arquivo dos seus toots e mídia enviada. Os dados exportados estarão no formato ActivityPub, que podem ser lidos por qualquer software compatível. Você pode pedir um arquivo a cada 7 dias. in_progress: Preparando seu arquivo... request: Solicitar o seu arquivo size: Tamanho @@ -713,75 +714,75 @@ pt-BR:Any of the information we collect from you may be used in the following ways:
+Toda informação que coletamos de você pode ser usada das seguintes maneiras:
We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL, and your password is hashed using a strong one-way algorithm. You may enable two-factor authentication to further secure access to your account.
+Nós implementamos diversas medidas de segurança para manter a segurança das suas informações pessoais quando você as acessa ou as envia. Entre outras coisas, sua sessão do navegador, bem como o tráfego entre as aplicações e a API são asseguradas usando SSL e a sua senha é guardada usando um algoritmo forte de encriptação de mão única. Você pode ativar autenticação em dois fatores como forma de aumentar a segurança no acesso à sua conta.
We will make a good faith effort to:
+Nós fazemos esforços substanciais para:
You can request and download an archive of your content, including your posts, media attachments, profile picture, and header image.
+Você pode pedir e fazer o download de um arquivo de todo o conteúdo da sua conta, incluindo as suas mensagens, suas mídias anexadas, imagem de perfil e imagem de topo.
-You may irreversibly delete your account at any time.
+Você pode remover irreversivelmente a sua conta a qualquer momento.
Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your Web browser (if you allow). These cookies enable the site to recognize your browser and, if you have a registered account, associate it with your registered account.
+Sim. Cookies são pequenos arquivos que um site ou serviço transfere ao seu disco rígido do seu computador através do seu navegador da web (se você permitir). Esses cookies permitem ao site conhecer seu navegador e, se você tiver uma conta registrada, associá-lo a sua conta.
-We use cookies to understand and save your preferences for future visits.
+Nós usamos cookies para compreender e salvar suas preferências para visitas futuras.
We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety.
+Nós não vendemos, trocamos ou transferimos de qualquer maneira informação que pode lhe identificar à terceiros. Isso não inclui terceiros que podemos nos auxiliam a operar o nosso site, realizar nossos negócios ou lhe prestar serviços, contanto que esses terceiros se comprometam a manter essa informação confidencial. Nós podemos também divulgar informação quando acreditamos que é apropriado para obedecer a lei, para fazer cumprir nossas políticas ou proteger nossos direitos, propriedade ou segurança ou o direito, propriedade e segurança de outrem.
-Your public content may be downloaded by other servers in the network. Your public and followers-only posts are delivered to the servers where your followers reside, and direct messages are delivered to the servers of the recipients, in so far as those followers or recipients reside on a different server than this.
+Seu conteúdo público pode ser descarregado por outros servidores na rede. Suas mensagens públicas e somente para seus seguidores são entregues aos servidores onde seus seguidores resides e as suas mensagens diretas são entregues ao servidor dos usuários mencionados nelas, contanto que esses seguidores ou usuários residam em um servidor diferente deste.
-When you authorize an application to use your account, depending on the scope of permissions you approve, it may access your public profile information, your following list, your followers, your lists, all your posts, and your favourites. Applications can never access your e-mail address or password.
+Quando você autoriza uma aplicação a usar sua conta, dependendo do escopo de permissões que você aprovar, a aplicação pode acessar sua informação pública, a lista de usuários que você segue, seus seguidores, suas listas, suas mensagens e suas mensagens favoritas. Aplicações nunca podem acessar o seu endereço de e-mail ou senha.
Our site, products and services are all directed to people who are at least 13 years old. If this server is in the USA, and you are under the age of 13, per the requirements of COPPA (Children's Online Privacy Protection Act) do not use this site.
+Nosso site, produto e serviços são direcionados à pessoas que tem ao menos 13 anos de idade. Se esse servidor está hospedado nos EUA e você tem menos de 13 anos, de acordo com os requerimentos da COPPA (Children's Online Privacy Protection Act) não use este site.
If we decide to change our privacy policy, we will post those changes on this page.
+Se decidirmos mudar nossa política de privacidade, nós iremos disponibilizar as mudanças nesta página.
-This document is CC-BY-SA. It was last updated March 7, 2018.
+Este documento é CC-BY-SA. Ele foi atualizado pela última vez em 7 de março de 2018.
-Originally adapted from the Discourse privacy policy.
+Adaptado originalmente a partir da política de privacidade Discourse.
title: "%{instance} Termos de Serviço e Política de Privacidade" time: formats: @@ -828,5 +829,6 @@ pt-BR: users: invalid_email: O endereço de e-mail é inválido invalid_otp_token: Código de autenticação inválido + otp_lost_help_html: Se você perder o acesso à ambos, você pode entrar em contato com %{email} seamless_external_login: Você está logado usando um serviço externo, então configurações de e-mail e password não estão disponíveis. signed_in_as: 'Acesso como:' diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index 28cfa8ab7..ff0332c18 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -4,6 +4,7 @@ ar: hints: defaults: avatar: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير 2MB. سيتم تصغيره إلى 400x400px + bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة display_name: one: 1 حرف باقي @@ -19,7 +20,7 @@ ar: imports: data: ملف CSV تم تصديره مِن مثيل خادوم ماستدون آخر sessions: - otp: قم بإدخال رمز المصادقة بخطوتين مِن هاتفك أو إستخدم أحد رموز النفاذ الإحتياطية. + otp: 'قم بإدخال رمز المصادقة بخطوتين الذي قام بتوليده تطبيق جهازك أو إستخدم أحد رموز النفاذ الإحتياطية :' user: filtered_languages: سوف يتم تصفية و إخفاء اللغات المختارة من خيوطك العمومية labels: @@ -29,6 +30,7 @@ ar: value: المحتوى defaults: avatar: الصورة الرمزية + bot: إنّ هذا الحساب روبوت آلي confirm_new_password: تأكيد كلمة السر الجديدة confirm_password: تأكيد كلمة السر current_password: كلمة السر الحالية diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 1b04da90a..21d466918 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -4,6 +4,7 @@ ca: hints: defaults: avatar: PNG, GIF o JPG. Màxim 2MB. S'escalarà a 400x400px + bot: Informa a tothom que el compte no representa a una persona digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència display_name: one: 1 càracter restant @@ -19,7 +20,7 @@ ca: imports: data: Fitxer CSV exportat des de una altra instància de Mastodon sessions: - otp: Introdueix el codi de dos factors des del teu telèfon o utilitza un dels teus codis de recuperació. + otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' user: filtered_languages: Les llengües seleccionades s'eliminaran de les línies de temps públiques labels: @@ -29,6 +30,7 @@ ca: value: Contingut defaults: avatar: Avatar + bot: Aquest compte és un bot confirm_new_password: Confirma la contrasenya nova confirm_password: Confirma la contrasenya current_password: Contrasenya actual diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 21404897b..8d2470435 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -4,6 +4,7 @@ co: hints: defaults: avatar: Furmatu PNG, GIF o JPG. 2Mo o menu. Sarà ridottu à 400x400px + bot: Avisa a ghjente chì stu contu ùn riprisenta micca una parsona digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti display_name: one: Ci ferma 1 caratteru @@ -19,16 +20,17 @@ co: imports: data: Un fugliale CSV da un’altr’istanza di Mastodon sessions: - otp: Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione. + otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:' user: - filtered_languages: Ùn viderete micca e lingue selezziunate nant’à e linee pubbliche. + filtered_languages: Ùn viderete micca e lingue selezziunate nant’à e linee pubbliche labels: account: fields: name: Label - value: Content + value: Cuntinutu defaults: avatar: Ritrattu di prufile + bot: Stu contu hè un bot confirm_new_password: Cunfirmà a nova chjave d’accessu confirm_password: Cunfirmà a chjave d’accessu current_password: Chjave d’accessu attuale diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index a9d650a26..1bf1cbf78 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -4,6 +4,7 @@ de: hints: defaults: avatar: PNG, GIF oder JPG. Maximal 2 MB. Wird auf 400×400 px herunterskaliert + bot: Warnt Besucher das dieser Nutzer keine echte Person darstellt digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt display_name: one: 1 Zeichen verbleibt @@ -19,7 +20,7 @@ de: imports: data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde sessions: - otp: Gib den Zwei-Faktor-Authentisierungs-Code von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes. + otp: 'Gib den Zwei-Faktor-Authentisierungscode von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:' user: filtered_languages: Ausgewählte Sprachen werden aus deinen öffentlichen Zeitleisten gefiltert labels: @@ -29,6 +30,7 @@ de: value: Inhalt defaults: avatar: Profilbild + bot: Dies ist ein bot Benutzer confirm_new_password: Neues Passwort bestätigen confirm_password: Passwort bestätigen current_password: Derzeitiges Passwort diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 41a0c26aa..9ff9ebad4 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -4,10 +4,12 @@ eo: hints: defaults: avatar: Formato PNG, GIF aŭ JPG. Ĝis 2MB. Estos malgrandigita al 400x400px + bot: Atentigas homojn, ke la konto ne reprezentas homon digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto display_name: one: 1 signo restas other: %{count} signoj restas + fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo header: Formato PNG, GIF aŭ JPG. Ĝis 2MB. Estos malgrandigita al 700x335px locked: Vi devos aprobi ĉiun peton de sekvado mane note: @@ -18,12 +20,17 @@ eo: imports: data: CSV-dosiero el alia nodo de Mastodon sessions: - otp: Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el la realiraj kodoj. + otp: 'Enmetu la kodon de dufaktora aŭtentigo el via telefono aŭ uzu unu el viaj realiraj kodoj:' user: filtered_languages: Markitaj lingvoj estos elfiltritaj de publikaj tempolinioj por vi labels: + account: + fields: + name: Etikedo + value: Enhavo defaults: avatar: Profilbildo + bot: Tio estas robota konto confirm_new_password: Konfirmi novan pasvorton confirm_password: Konfirmi pasvorton current_password: Nuna pasvorto @@ -31,6 +38,7 @@ eo: display_name: Publika nomo email: Retadreso expires_in: Eksvalidiĝas post + fields: Profilaj metadatumoj filtered_languages: Filtritaj lingvoj header: Fonbildo locale: Lingvo diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index ddb13ae43..c492e5d9a 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -3,11 +3,12 @@ fa: simple_form: hints: defaults: - avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۱۲۰×۱۲۰ پیکسل تبدیل خواهد شد - digest: پس از مدت طولانی عدم فعالیت فرستاده میشود، شامل خلاصهای از مواردی که در نبودتان از شما نام برده شده + avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۴۰۰×۴۰۰ پیکسل تبدیل خواهد شد + digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد display_name: one: 1 حرف باقی مانده other: %{count} حرف باقی مانده + fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه ۲ مگابایت. تصویر به اندازهٔ ۳۳۵×۷۰۰ پیکسل تبدیل خواهد شد locked: باید پیگیران تازه را خودتان تأیید کنید. حریم خصوصی پیشفرض نوشتهها را روی پیگیران تنظیم میکند note: @@ -18,10 +19,14 @@ fa: imports: data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده sessions: - otp: کد تأیید دومرحلهای را از تلفن خود وارد کنید یا یکی از کدهای بازیابی را به کار ببرید. + otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' user: filtered_languages: زبانهای انتخابشده از فهرست عمومی نوشتههایی که میبینید حذف میشوند labels: + account: + fields: + name: برچسب + value: محتوا defaults: avatar: تصویر نمایه confirm_new_password: تأیید رمز تازه @@ -31,6 +36,7 @@ fa: display_name: نمایش به نام email: نشانی ایمیل expires_in: تاریخ انقضا + fields: اطلاعات تکمیلی نمایه filtered_languages: زبانهای فیلترشده header: تصویر زمینه locale: زبان @@ -45,6 +51,7 @@ fa: setting_default_privacy: حریم خصوصی نوشتهها setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن setting_delete_modal: پیش از پاک کردن یک نوشته پیغام تأیید نشان بده + setting_display_sensitive_media: همیشه تصویرهای علامتزدهشده به عنوان حساس را نمایش بده setting_noindex: درخواست از موتورهای جستجو برای لغو فهرستسازی setting_reduce_motion: کاستن از حرکت در پویانماییها setting_system_font_ui: بهکاربردن قلم پیشفرض سیستم @@ -53,6 +60,7 @@ fa: severity: شدت type: نوع درونریزی username: نام کاربری (تنها حروف انگلیسی) + username_or_email: نام کاربری یا ایمیل interactions: must_be_follower: مسدودکردن اعلانهای همه به جز پیگیران must_be_following: مسدودکردن اعلانهای کسانی که شما پی نمیگیرید diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index f48e9ab23..b7b97395a 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -8,6 +8,7 @@ fi: display_name: one: 1 merkki jäljellä other: %{count} merkkiä jäljellä + fields: Sinulla voi olla korkeintaan 4 asiaa profiilissasi taulukossa header: PNG, GIF tai JPG. Enintään 2 Mt. Skaalataan kokoon 700 x 335 px locked: Sinun täytyy hyväksyä seuraajat manuaalisesti note: @@ -22,6 +23,9 @@ fi: user: filtered_languages: Valitut kielet suodatetaan pois julkisilta aikajanoilta labels: + account: + fields: + value: Sisältö defaults: avatar: Profiilikuva confirm_new_password: Vahvista uusi salasana @@ -31,6 +35,7 @@ fi: display_name: Nimimerkki email: Sähköpostiosoite expires_in: Vanhenee + fields: Profiilin metadata filtered_languages: Suodatetut kielet header: Otsakekuva locale: Kieli @@ -38,7 +43,7 @@ fi: max_uses: Käyttökertoja enintään new_password: Uusi salasana note: Kuvaus - otp_attempt: Kaksivaiheisen tunnistautumisen koodi + otp_attempt: Kaksivaiheisen tunnistuksen koodi password: Salasana setting_auto_play_gif: Toista GIF-animaatiot automaattisesti setting_boost_modal: Kysy vahvistusta ennen buustausta diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 88e1b8873..1c5a7b191 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -4,6 +4,7 @@ fr: hints: defaults: avatar: Au format PNG, GIF ou JPG. 2 Mo maximum. Sera réduit à 400x400px + bot: Avertit que ce compte ne représente pas une personne digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence display_name: one: 1 caractère restant @@ -19,7 +20,7 @@ fr: imports: data: Un fichier CSV généré par une autre instance de Mastodon sessions: - otp: Entrez le code d’authentification à deux facteurs depuis votre téléphone ou utilisez un de vos codes de récupération. + otp: 'Entrez le code d’authentification à deux facteurs généré par votre téléphone ou utilisez un de vos codes de récupération :' user: filtered_languages: Les langues sélectionnées seront filtrées hors de vos fils publics pour vous labels: @@ -29,6 +30,7 @@ fr: value: Contenu defaults: avatar: Image de profil + bot: Ceci est un robot confirm_new_password: Confirmation du nouveau mot de passe confirm_password: Confirmation du mot de passe current_password: Mot de passe actuel diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 72633c759..461b8080d 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -3,13 +3,14 @@ gl: simple_form: hints: defaults: - avatar: PNG, GIF ou JPG. Como moito 2MB. Será reducida ate 400x400px + avatar: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 400x400px + bot: Avisa as usuarias de que a conta non representa a unha persoa digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia display_name: one: 1 caracter restante other: %{count} caracteres restantes fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa - header: PNG, GIF ou JPG. Como moito 2MB. Será reducida a 700x335px + header: PNG, GIF ou JPG. Máximo 2MB. Será reducida a 700x335px locked: Require que vostede aprove as seguidoras de xeito manual note: one: 1 caracter restante @@ -19,7 +20,7 @@ gl: imports: data: Ficheiro CSV exportado desde outra instancia Mastodon sessions: - otp: Introduza o código de Doble-Factor desde o seu teléfono ou utilice un dos seus códigos de recuperación. + otp: Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación. user: filtered_languages: Os idiomas marcados filtraranse das liñas temporais públicas para vostede labels: @@ -29,6 +30,7 @@ gl: value: Contido defaults: avatar: Avatar + bot: Esta conta é de un bot confirm_new_password: Confirme o novo contrasinal confirm_password: Confirme o contrasinal current_password: Contrasinal actual diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 9e4d40405..adc9a0c2d 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -4,6 +4,7 @@ ja: hints: defaults: avatar: 2MBまでのPNGやGIF、JPGが利用可能です。400x400pxまで縮小されます + bot: アカウントが個人を表すものではないことを表示します digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます display_name: あと%{count}文字入力できます。 fields: プロフィールに表として4つまでの項目を表示することができます @@ -15,7 +16,7 @@ ja: imports: data: 他の Mastodon インスタンスからエクスポートしたCSVファイルを選択して下さい sessions: - otp: 携帯電話に表示された2段階認証コードを入力するか、生成したリカバリーコードを使用してください。 + otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' user: filtered_languages: 選択した言語があなたの公開タイムラインから取り除かれます labels: @@ -25,6 +26,7 @@ ja: value: 内容 defaults: avatar: アイコン + bot: これは BOT アカウントです confirm_new_password: 新しいパスワード(確認用) confirm_password: パスワード(確認用) current_password: 現在のパスワード diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index ec42adfd7..fec5e7ec4 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -4,7 +4,8 @@ nl: hints: defaults: avatar: PNG, GIF of JPG. Maximaal 2MB. Wordt teruggeschaald naar 400x400px - digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten ontvangt + bot: Waarschuwt mensen dat dit account geen echt persoon is + digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen display_name: one: 1 teken over other: %{count} tekens over @@ -19,9 +20,9 @@ nl: imports: data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd sessions: - otp: Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcode's. + otp: Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes. user: - filtered_languages: De geselecteerde talen worden uit de lokale en globale tijdlijn verwijderd + filtered_languages: Geselecteerde talen worden uit de lokale en globale tijdlijn verwijderd labels: account: fields: @@ -29,6 +30,7 @@ nl: value: Inhoud defaults: avatar: Avatar + bot: Dit is een bot-account confirm_new_password: Nieuw wachtwoord bevestigen confirm_password: Wachtwoord bevestigen current_password: Huidig wachtwoord @@ -37,11 +39,11 @@ nl: email: E-mailadres expires_in: Vervalt na fields: Metadata profiel - filtered_languages: Talen filteren + filtered_languages: Gefilterde talen header: Omslagfoto locale: Taal locked: Maak account besloten - max_uses: Max aantal keer te gebruiken + max_uses: Max. aantal keer te gebruiken new_password: Nieuwe wachtwoord note: Bio otp_attempt: Tweestaps-aanmeldcode @@ -59,7 +61,7 @@ nl: setting_unfollow_modal: Vraag voor het ontvolgen van iemand een bevestiging severity: Zwaarte type: Importtype - username: gebruikersnaam + username: Gebruikersnaam username_or_email: Gebruikersnaam of e-mailadres interactions: must_be_follower: Meldingen van mensen die jou niet volgen blokkeren diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index cae1f671d..0479c4c72 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -4,6 +4,7 @@ pt-BR: hints: defaults: avatar: PNG, GIF or JPG. Arquivos de até 2MB. Eles serão diminuídos para 400x400px + bot: Informa usuários que a conta não representa uma pessoa digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência display_name: one: 1 caracter restante @@ -19,7 +20,7 @@ pt-BR: imports: data: Arquivo CSV exportado de outra instância do Mastodon sessions: - otp: Insira o código de autenticação do seu celular ou use um dos códigos de recuperação. + otp: 'Insira o código de autenticação gerado pelo app no seu celular ou use um dos códigos de recuperação:' user: filtered_languages: Selecione os idiomas que devem ser removidos de suas timelines públicas labels: @@ -29,6 +30,7 @@ pt-BR: value: Conteúdo defaults: avatar: Avatar + bot: Essa é a conta de um robô confirm_new_password: Confirmar nova senha confirm_password: Confirmar senha current_password: Senha atual diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index b8ee5892d..639e4fdd5 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -4,12 +4,13 @@ ru: hints: defaults: avatar: PNG, GIF или JPG. Максимально 2MB. Будет уменьшено до 400x400px - digest: Отсылается после долгого периода неактивности с общей информацией упоминаний, полученных в Ваше отсутствие + digest: Отсылается лишь после длительной неактивности, если Вы в это время получали личные сообщения display_name: few: Осталось %{count} символа many: Осталось %{count} символов one: Остался 1 символ other: Осталось %{count} символов + fields: В профиле можно отобразить до 4 пунктов как таблицу header: PNG, GIF или JPG. Максимально 2MB. Будет уменьшено до 700x335px locked: Потребует от Вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков" note: @@ -22,10 +23,14 @@ ru: imports: data: Файл CSV, экспортированный с другого узла Mastodon sessions: - otp: Введите код двухфакторной аутентификации или используйте один из Ваших кодов восстановления. + otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из Ваших кодов восстановления:' user: filtered_languages: Выбранные языки будут убраны из Ваших публичных лет. labels: + account: + fields: + name: Пункт + value: Значение defaults: avatar: Аватар confirm_new_password: Повторите новый пароль @@ -35,6 +40,7 @@ ru: display_name: Показываемое имя email: Адрес e-mail expires_in: Срок действия + fields: Метаданные профиля filtered_languages: Фильтруемые языки header: Заголовок locale: Язык diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 134e62ee3..9abbeb0e8 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -4,6 +4,7 @@ sk: hints: defaults: avatar: PNG, GIF alebo JPG. Maximálne 2MB. Bude zmenšený na 400x400px + bot: Varuje užívateľov, že daný účet nerepreyentuje ozajstného človeka digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak ste obdŕžali nejaké osobné správy kým ste boli preč display_name: one: Ostáva ti 1 znak @@ -14,12 +15,12 @@ sk: note: one: Ostáva vám 1 znak other: Ostáva ti %{count} znakov - setting_noindex: Ovplyvňuje profil a správy tak, že ich nebude možné nájsť vyhľadávaním - setting_theme: Toto ovplyvní ako bude Mastodon vyzerať pri prihlásení z hociktorého zariadenia. + setting_noindex: Ovplyvňuje verejný profil a statusy + setting_theme: Toto ovplyvňuje ako Mastodon vyzerá pri prihlásení z hociakého zariadenia. imports: data: CSV súbor vyexportovaný z inej Mastodon inštancie sessions: - otp: Napíš sem dvoj-faktorový kód z telefónu, alebo použite jeden z vašich obnovovacích kódov. + otp: 'Napíš sem dvoj-faktorový kód z telefónu, alebo použi jeden z tvojích obnovovacích kódov:' user: filtered_languages: Zaškrtnuté jazyky budú pre teba vynechané nebudú z verejnej časovej osi labels: @@ -29,6 +30,7 @@ sk: value: Obsah defaults: avatar: Avatar + bot: Toto je automatizovaný bot účet confirm_new_password: Znovu tvoje nové heslo, pre potvrdenie confirm_password: Potvrď heslo current_password: Súčasné heslo @@ -55,11 +57,11 @@ sk: setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče setting_reduce_motion: Redukovať pohyb v animáciách setting_system_font_ui: Použiť základné systémové písmo - setting_theme: Vzhľad + setting_theme: Vzhľad stránky setting_unfollow_modal: Zobrazovať potvrdzovacie okno pred skončením sledovania iného používateľa severity: Závažnosť type: Typ importu - username: Užívateľské meno + username: Užívateľská prezývka username_or_email: Prezívka, alebo Email interactions: must_be_follower: Blokovať notifikácie pod používateľov, ktorí ťa nesledujú diff --git a/config/locales/sk.yml b/config/locales/sk.yml index c8bad4d95..74974d42e 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -53,7 +53,7 @@ sk: unfollow: Prestať sledovať admin: account_moderation_notes: - create: Vytvoriť + create: Zanechaj poznámku created_msg: Poznámka moderátora bola úspešne vytvorená! delete: Zmazať destroyed_msg: Poznámka moderátora bola úspešne zmazaná! @@ -173,6 +173,7 @@ sk: resolve_report: "%{name} vyriešili nahlásenie užívateľa %{target}" silence_account: "%{name} utíšil/a účet %{target}" suspend_account: "%{name} zablokoval/a účet používateľa %{target}" + unassigned_report: "%{name} odobral/a report od %{target}" unsilence_account: "%{name} zrušil/a utíšenie účtu používateľa %{target}" unsuspend_account: "%{name} zrušil/a blokovanie účtu používateľa %{target}" update_custom_emoji: "%{name} aktualizoval/a emoji %{target}" @@ -372,6 +373,7 @@ sk: admin_mailer: new_report: body: "%{reporter} nahlásil %{target}" + body_remote: Niekto z %{domain} nahlásil %{target} subject: Nový report pre %{instance} (#%{id}) application_mailer: notification_preferences: Zmeniť e-mailové voľby @@ -460,7 +462,7 @@ sk: archive_takeout: date: Dátum download: Stiahni si svoj archív - hint_html: Môžeš si opýtať archív svojích príspevkov a nahratých médií. Exportované dáta budú v ActivityPub formáte, čítateľné hociakým kompatibilným softvérom. + hint_html: Môžeš si opýtať archív svojích príspevkov a nahratých médií. Exportované dáta budú v ActivityPub formáte, čítateľné hociakým kompatibilným softvérom. Archív si je možné vyžiadať každých sedem dní. in_progress: Balím tvoj archív... request: Vyžiadaj si tvoj archív size: Veľkosť diff --git a/config/locales/sl.yml b/config/locales/sl.yml new file mode 100644 index 000000000..9e84dfcb9 --- /dev/null +++ b/config/locales/sl.yml @@ -0,0 +1,47 @@ +--- +sl: + about: + about_mastodon_html: Mastodon je socialno omrežje, ki temelji na odprtih spletnih protokolih in prosti ter odprtokodni programski opremi. Je decentraliziran, kot e-pošta. + administered_by: 'Upravlja:' + closed_registrations: Registracije so trenutno zaprte na tem vozlišču. Vendar! Tukaj lahko najdete druga vozlišča, na katerih se prijavite in dostopate do istega omrežja od tam. + contact: Kontakt + contact_missing: Ni nastavljeno + contact_unavailable: Ni na voljo + description_headline: Kaj je %{domain}? + domain_count_after: ostala vozlišča + domain_count_before: Povezan z + extended_description_html: | +Razširjen opis še ni bil nastavljen.
+ features: + humane_approach_title: Bolj human pristop + not_a_product_title: Ti si oseba, ne izdelek + real_conversation_title: Zgrajen za pravi pogovor + learn_more: Spoznaj več + other_instances: Seznam vozlišč + source_code: Izvorna koda + status_count_after: statusi + status_count_before: Kdo je avtor + user_count_after: uporabniki + user_count_before: Dom za + what_is_mastodon: Kaj je Mastodon? + accounts: + follow: Sledi + followers: Sledilci + media: Medij + moved_html: "%{name} se je prestavil na %{new_profile_link}:" + nothing_here: Nič ni tukaj! + people_followed_by: Ljudje, ki jim sledi %{name} + people_who_follow: Ljudje, ki sledijo %{name} + remote_follow: Oddaljeno sledenje + reserved_username: Uporabniško ime je zasedeno + roles: + admin: Skrbnik + admin: + account_moderation_notes: + create: Pusti sporočilo + delete: Izbriši + accounts: + are_you_sure: Ali si prepričan? + avatar: Avatar + by_domain: Domena diff --git a/config/routes.rb b/config/routes.rb index 0554ae601..86aaea9ab 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -324,6 +324,10 @@ Rails.application.routes.draw do resources :lists, only: [:index, :create, :show, :update, :destroy] do resource :accounts, only: [:show, :create, :destroy], controller: 'lists/accounts' end + + namespace :push do + resource :subscription, only: [:create, :update, :destroy] + end end namespace :web do diff --git a/db/migrate/20180510214435_add_access_token_id_to_web_push_subscriptions.rb b/db/migrate/20180510214435_add_access_token_id_to_web_push_subscriptions.rb new file mode 100644 index 000000000..94ef8e0f5 --- /dev/null +++ b/db/migrate/20180510214435_add_access_token_id_to_web_push_subscriptions.rb @@ -0,0 +1,6 @@ +class AddAccessTokenIdToWebPushSubscriptions < ActiveRecord::Migration[5.2] + def change + add_reference :web_push_subscriptions, :access_token, null: true, default: nil, foreign_key: { on_delete: :cascade, to_table: :oauth_access_tokens }, index: false + add_reference :web_push_subscriptions, :user, null: true, default: nil, foreign_key: { on_delete: :cascade }, index: false + end +end diff --git a/db/migrate/20180510230049_migrate_web_push_subscriptions.rb b/db/migrate/20180510230049_migrate_web_push_subscriptions.rb new file mode 100644 index 000000000..6de1bed79 --- /dev/null +++ b/db/migrate/20180510230049_migrate_web_push_subscriptions.rb @@ -0,0 +1,13 @@ +class MigrateWebPushSubscriptions < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + add_index :web_push_subscriptions, :user_id, algorithm: :concurrently + add_index :web_push_subscriptions, :access_token_id, algorithm: :concurrently + end + + def down + remove_index :web_push_subscriptions, :user_id + remove_index :web_push_subscriptions, :access_token_id + end +end diff --git a/db/schema.rb b/db/schema.rb index b7a807427..2b3dab0d2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_05_06_221944) do +ActiveRecord::Schema.define(version: 2018_05_10_230049) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -560,6 +560,10 @@ ActiveRecord::Schema.define(version: 2018_05_06_221944) do t.json "data" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.bigint "access_token_id" + t.bigint "user_id" + t.index ["access_token_id"], name: "index_web_push_subscriptions_on_access_token_id" + t.index ["user_id"], name: "index_web_push_subscriptions_on_user_id" end create_table "web_settings", force: :cascade do |t| @@ -629,5 +633,7 @@ ActiveRecord::Schema.define(version: 2018_05_06_221944) do add_foreign_key "subscriptions", "accounts", name: "fk_9847d1cbb5", on_delete: :cascade add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade add_foreign_key "users", "invites", on_delete: :nullify + add_foreign_key "web_push_subscriptions", "oauth_access_tokens", column: "access_token_id", on_delete: :cascade + add_foreign_key "web_push_subscriptions", "users", on_delete: :cascade add_foreign_key "web_settings", "users", name: "fk_11910667b2", on_delete: :cascade end diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb new file mode 100644 index 000000000..01146294f --- /dev/null +++ b/spec/controllers/api/v1/push/subscriptions_controller_spec.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Api::V1::Push::SubscriptionsController do + render_views + + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'push') } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + let(:create_payload) do + { + subscription: { + endpoint: 'https://fcm.googleapis.com/fcm/send/fiuH06a27qE:APA91bHnSiGcLwdaxdyqVXNDR9w1NlztsHb6lyt5WDKOC_Z_Q8BlFxQoR8tWFSXUIDdkyw0EdvxTu63iqamSaqVSevW5LfoFwojws8XYDXv_NRRLH6vo2CdgiN4jgHv5VLt2A8ah6lUX', + keys: { + p256dh: 'BEm_a0bdPDhf0SOsrnB2-ategf1hHoCnpXgQsFj5JCkcoMrMt2WHoPfEYOYPzOIs9mZE8ZUaD7VA5vouy0kEkr8=', + auth: 'eH_C8rq2raXqlcBVDa1gLg==', + }, + } + }.with_indifferent_access + end + + let(:alerts_payload) do + { + data: { + alerts: { + follow: true, + favourite: false, + reblog: true, + mention: false, + } + } + }.with_indifferent_access + end + + describe 'POST #create' do + it 'saves push subscriptions' do + post :create, params: create_payload + + push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) + + expect(push_subscription.endpoint).to eq(create_payload[:subscription][:endpoint]) + expect(push_subscription.key_p256dh).to eq(create_payload[:subscription][:keys][:p256dh]) + expect(push_subscription.key_auth).to eq(create_payload[:subscription][:keys][:auth]) + expect(push_subscription.user_id).to eq user.id + expect(push_subscription.access_token_id).to eq token.id + end + + it 'replaces old subscription on repeat calls' do + post :create, params: create_payload + post :create, params: create_payload + + expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 + end + end + + describe 'PUT #update' do + it 'changes alert settings' do + post :create, params: create_payload + put :update, params: alerts_payload + + push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) + + expect(push_subscription.data.dig('alerts', 'follow')).to eq(alerts_payload[:data][:alerts][:follow].to_s) + expect(push_subscription.data.dig('alerts', 'favourite')).to eq(alerts_payload[:data][:alerts][:favourite].to_s) + expect(push_subscription.data.dig('alerts', 'reblog')).to eq(alerts_payload[:data][:alerts][:reblog].to_s) + expect(push_subscription.data.dig('alerts', 'mention')).to eq(alerts_payload[:data][:alerts][:mention].to_s) + end + end + + describe 'DELETE #destroy' do + it 'removes the subscription' do + post :create, params: create_payload + delete :destroy + + expect(Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])).to be_nil + end + end +end diff --git a/spec/controllers/api/web/push_subscriptions_controller_spec.rb b/spec/controllers/api/web/push_subscriptions_controller_spec.rb index bbf94c5c6..381cdeab9 100644 --- a/spec/controllers/api/web/push_subscriptions_controller_spec.rb +++ b/spec/controllers/api/web/push_subscriptions_controller_spec.rb @@ -59,10 +59,10 @@ describe Api::Web::PushSubscriptionsController do push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) - expect(push_subscription.data['follow']).to eq(alerts_payload[:data][:follow]) - expect(push_subscription.data['favourite']).to eq(alerts_payload[:data][:favourite]) - expect(push_subscription.data['reblog']).to eq(alerts_payload[:data][:reblog]) - expect(push_subscription.data['mention']).to eq(alerts_payload[:data][:mention]) + expect(push_subscription.data['alerts']['follow']).to eq(alerts_payload[:data][:alerts][:follow].to_s) + expect(push_subscription.data['alerts']['favourite']).to eq(alerts_payload[:data][:alerts][:favourite].to_s) + expect(push_subscription.data['alerts']['reblog']).to eq(alerts_payload[:data][:alerts][:reblog].to_s) + expect(push_subscription.data['alerts']['mention']).to eq(alerts_payload[:data][:alerts][:mention].to_s) end end end @@ -81,10 +81,10 @@ describe Api::Web::PushSubscriptionsController do push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) - expect(push_subscription.data['follow']).to eq(alerts_payload[:data][:follow]) - expect(push_subscription.data['favourite']).to eq(alerts_payload[:data][:favourite]) - expect(push_subscription.data['reblog']).to eq(alerts_payload[:data][:reblog]) - expect(push_subscription.data['mention']).to eq(alerts_payload[:data][:mention]) + expect(push_subscription.data['alerts']['follow']).to eq(alerts_payload[:data][:alerts][:follow].to_s) + expect(push_subscription.data['alerts']['favourite']).to eq(alerts_payload[:data][:alerts][:favourite].to_s) + expect(push_subscription.data['alerts']['reblog']).to eq(alerts_payload[:data][:alerts][:reblog].to_s) + expect(push_subscription.data['alerts']['mention']).to eq(alerts_payload[:data][:alerts][:mention].to_s) end end end diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb new file mode 100644 index 000000000..c5c6cb651 --- /dev/null +++ b/spec/controllers/invites_controller_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +describe InvitesController do + render_views + + before do + sign_in user + end + + describe 'GET #index' do + subject { get :index } + + let!(:invite) { Fabricate(:invite, user: user) } + + context 'when user is a staff' do + let(:user) { Fabricate(:user, moderator: true, admin: false) } + + it 'renders index page' do + expect(subject).to render_template :index + expect(assigns(:invites)).to include invite + expect(assigns(:invites).count).to eq 1 + end + end + + context 'when user is not a staff' do + let(:user) { Fabricate(:user, moderator: false, admin: false) } + + it 'returns 403' do + expect(subject).to have_http_status 403 + end + end + end + + describe 'POST #create' do + subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } } + + context 'when user is an admin' do + let(:user) { Fabricate(:user, moderator: false, admin: true) } + + it 'succeeds to create a invite' do + expect{ subject }.to change { Invite.count }.by(1) + expect(subject).to redirect_to invites_path + expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10) + end + end + + context 'when user is not an admin' do + let(:user) { Fabricate(:user, moderator: true, admin: false) } + + it 'returns 403' do + expect(subject).to have_http_status 403 + end + end + end + + describe 'DELETE #create' do + subject { delete :destroy, params: { id: invite.id } } + + let!(:invite) { Fabricate(:invite, user: user, expires_at: nil) } + let(:user) { Fabricate(:user, moderator: false, admin: true) } + + it 'expires invite' do + expect(subject).to redirect_to invites_path + expect(invite.reload).to be_expired + end + end +end diff --git a/spec/models/web/push_subscription_spec.rb b/spec/models/web/push_subscription_spec.rb index 574da55ac..c6665611c 100644 --- a/spec/models/web/push_subscription_spec.rb +++ b/spec/models/web/push_subscription_spec.rb @@ -2,20 +2,8 @@ require 'rails_helper' RSpec.describe Web::PushSubscription, type: :model do let(:alerts) { { mention: true, reblog: false, follow: true, follow_request: false, favourite: true } } - let(:payload_no_alerts) { Web::PushSubscription.new(id: 1, endpoint: 'a', key_p256dh: 'c', key_auth: 'd').as_payload } - let(:payload_alerts) { Web::PushSubscription.new(id: 1, endpoint: 'a', key_p256dh: 'c', key_auth: 'd', data: { alerts: alerts }).as_payload } let(:push_subscription) { Web::PushSubscription.new(data: { alerts: alerts }) } - describe '#as_payload' do - it 'only returns id and endpoint' do - expect(payload_no_alerts.keys).to eq [:id, :endpoint] - end - - it 'returns alerts if set' do - expect(payload_alerts.keys).to eq [:id, :endpoint, :alerts] - end - end - describe '#pushable?' do it 'obeys alert settings' do expect(push_subscription.send(:pushable?, Notification.new(activity_type: 'Mention'))).to eq true