diff --git a/.env.production.sample b/.env.production.sample index 6036095e4f..f573a37def 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -275,3 +275,13 @@ STREAMING_CLUSTER_NUM=1 # http_proxy=http://gateway.local:8118 # Access control for hidden service. # ALLOW_ACCESS_TO_HIDDEN_SERVICE=true + +# Authorized fetch mode (optional) +# Require remote servers to authentify when fetching toots, see +# https://docs.joinmastodon.org/admin/config/#authorized_fetch +# AUTHORIZED_FETCH=true + +# Whitelist mode (optional) +# Only allow federation with whitelisted domains, see +# https://docs.joinmastodon.org/admin/config/#whitelist_mode +# WHITELIST_MODE=true diff --git a/.nvmrc b/.nvmrc index 45a4fb75db..48082f72f0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -8 +12 diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb new file mode 100644 index 0000000000..02198f0b52 --- /dev/null +++ b/app/controllers/admin/announcements_controller.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +class Admin::AnnouncementsController < Admin::BaseController + before_action :set_announcements, only: :index + before_action :set_announcement, except: [:index, :new, :create] + + def index + authorize :announcement, :index? + end + + def new + authorize :announcement, :create? + + @announcement = Announcement.new + end + + def create + authorize :announcement, :create? + + @announcement = Announcement.new(resource_params) + + if @announcement.save + log_action :create, @announcement + redirect_to admin_announcements_path + else + render :new + end + end + + def edit + authorize :announcement, :update? + end + + def update + authorize :announcement, :update? + + if @announcement.update(resource_params) + log_action :update, @announcement + redirect_to admin_announcements_path + else + render :edit + end + end + + def destroy + authorize :announcement, :destroy? + @announcement.destroy! + log_action :destroy, @announcement + redirect_to admin_announcements_path + end + + private + + def set_announcements + @announcements = AnnouncementFilter.new(filter_params).results.page(params[:page]) + end + + def set_announcement + @announcement = Announcement.find(params[:id]) + end + + def filter_params + params.slice(*AnnouncementFilter::KEYS).permit(*AnnouncementFilter::KEYS) + end + + def resource_params + params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day) + end +end diff --git a/app/controllers/admin/followers_controller.rb b/app/controllers/admin/followers_controller.rb deleted file mode 100644 index d826f47c5a..0000000000 --- a/app/controllers/admin/followers_controller.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Admin - class FollowersController < BaseController - before_action :set_account - - PER_PAGE = 40 - - def index - authorize :account, :index? - @followers = @account.followers.local.recent.page(params[:page]).per(PER_PAGE) - end - - def set_account - @account = Account.find(params[:account_id]) - end - end -end diff --git a/app/controllers/admin/relationships_controller.rb b/app/controllers/admin/relationships_controller.rb new file mode 100644 index 0000000000..f8a95cfc8f --- /dev/null +++ b/app/controllers/admin/relationships_controller.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Admin + class RelationshipsController < BaseController + before_action :set_account + + PER_PAGE = 40 + + def index + authorize :account, :index? + + @accounts = RelationshipFilter.new(@account, filter_params).results.page(params[:page]).per(PER_PAGE) + end + + private + + def set_account + @account = Account.find(params[:account_id]) + end + + def filter_params + params.slice(*RelationshipFilter::KEYS).permit(*RelationshipFilter::KEYS) + end + end +end diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 144fdd6ac9..68bf425f4d 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -85,7 +85,7 @@ class Api::BaseController < ApplicationController end def require_authenticated_user! - render json: { error: 'This API requires an authenticated user' }, status: 401 unless current_user + render json: { error: 'This method requires an authenticated user' }, status: 401 unless current_user end def require_user! diff --git a/app/controllers/api/oembed_controller.rb b/app/controllers/api/oembed_controller.rb index c8c60b1cf6..66da65beda 100644 --- a/app/controllers/api/oembed_controller.rb +++ b/app/controllers/api/oembed_controller.rb @@ -1,17 +1,25 @@ # frozen_string_literal: true class Api::OEmbedController < Api::BaseController - respond_to :json - skip_before_action :require_authenticated_user! + before_action :set_status + before_action :require_public_status! + def show - @status = status_finder.status render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default end private + def set_status + @status = status_finder.status + end + + def require_public_status! + not_found if @status.hidden? + end + def status_finder StatusFinder.new(params[:url]) end diff --git a/app/controllers/api/v1/announcements/reactions_controller.rb b/app/controllers/api/v1/announcements/reactions_controller.rb new file mode 100644 index 0000000000..e4a72e595c --- /dev/null +++ b/app/controllers/api/v1/announcements/reactions_controller.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Api::V1::Announcements::ReactionsController < Api::BaseController + before_action -> { doorkeeper_authorize! :write, :'write:favourites' } + before_action :require_user! + + before_action :set_announcement + before_action :set_reaction, except: :update + + def update + @announcement.announcement_reactions.create!(account: current_account, name: params[:id]) + render_empty + end + + def destroy + @reaction.destroy! + render_empty + end + + private + + def set_reaction + @reaction = @announcement.announcement_reactions.where(account: current_account).find_by!(name: params[:id]) + end + + def set_announcement + @announcement = Announcement.published.find(params[:announcement_id]) + end +end diff --git a/app/controllers/api/v1/announcements_controller.rb b/app/controllers/api/v1/announcements_controller.rb new file mode 100644 index 0000000000..6724fac2ec --- /dev/null +++ b/app/controllers/api/v1/announcements_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class Api::V1::AnnouncementsController < Api::BaseController + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: :dismiss + before_action :require_user! + before_action :set_announcements, only: :index + before_action :set_announcement, except: :index + + def index + render json: @announcements, each_serializer: REST::AnnouncementSerializer + end + + def dismiss + AnnouncementMute.create!(account: current_account, announcement: @announcement) + render_empty + end + + private + + def set_announcements + @announcements = begin + scope = Announcement.published + + scope.merge!(Announcement.without_muted(current_account)) unless truthy_param?(:with_dismissed) + + scope.chronological + end + end + + def set_announcement + @announcement = Announcement.published.find(params[:id]) + end +end diff --git a/app/controllers/auth/passwords_controller.rb b/app/controllers/auth/passwords_controller.rb index a59806f0d4..c224e1a03b 100644 --- a/app/controllers/auth/passwords_controller.rb +++ b/app/controllers/auth/passwords_controller.rb @@ -7,6 +7,12 @@ class Auth::PasswordsController < Devise::PasswordsController layout 'auth' + def update + super do |resource| + resource.session_activations.destroy_all if resource.errors.empty? + end + end + private def check_validity_of_reset_password_token diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index a9d075a451..531df7751c 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -23,10 +23,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController not_found end + def update + super do |resource| + resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password? + end + end + protected def update_resource(resource, params) params[:password] = nil if Devise.pam_authentication && resource.encrypted_password.blank? + super end diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb index 25dd0d2ad8..f1ab980c88 100644 --- a/app/controllers/relationships_controller.rb +++ b/app/controllers/relationships_controller.rb @@ -20,53 +20,13 @@ class RelationshipsController < ApplicationController rescue ActionController::ParameterMissing # Do nothing ensure - redirect_to relationships_path(current_params) + redirect_to relationships_path(filter_params) end private def set_accounts - @accounts = relationships_scope.page(params[:page]).per(40) - end - - def relationships_scope - scope = begin - if following_relationship? - current_account.following.eager_load(:account_stat).reorder(nil) - else - current_account.followers.eager_load(:account_stat).reorder(nil) - end - end - - scope.merge!(Follow.recent) if params[:order].blank? || params[:order] == 'recent' - scope.merge!(Account.by_recent_status) if params[:order] == 'active' - scope.merge!(mutual_relationship_scope) if mutual_relationship? - scope.merge!(moved_account_scope) if params[:status] == 'moved' - scope.merge!(primary_account_scope) if params[:status] == 'primary' - scope.merge!(by_domain_scope) if params[:by_domain].present? - scope.merge!(dormant_account_scope) if params[:activity] == 'dormant' - - scope - end - - def mutual_relationship_scope - Account.where(id: current_account.following) - end - - def moved_account_scope - Account.where.not(moved_to_account_id: nil) - end - - def primary_account_scope - Account.where(moved_to_account_id: nil) - end - - def dormant_account_scope - AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago))) - end - - def by_domain_scope - Account.where(domain: params[:by_domain]) + @accounts = RelationshipFilter.new(current_account, filter_params).results.page(params[:page]).per(40) end def form_account_batch_params @@ -85,7 +45,7 @@ class RelationshipsController < ApplicationController params[:relationship] == 'followed_by' end - def current_params + def filter_params params.slice(:page, *RelationshipFilter::KEYS).permit(:page, *RelationshipFilter::KEYS) end diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index 1b00d38c98..588063d010 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -49,7 +49,7 @@ class StatusesController < ApplicationController def embed use_pack 'embed' - raise ActiveRecord::RecordNotFound if @status.hidden? + return not_found if @status.hidden? expires_in 180, public: true response.headers['X-Frame-Options'] = 'ALLOWALL' @@ -71,7 +71,7 @@ class StatusesController < ApplicationController @status = @account.statuses.find(params[:id]) authorize @status, :show? rescue Mastodon::NotPermittedError - raise ActiveRecord::RecordNotFound + not_found end def set_instance_presenter diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index 608a99dd5b..6bc75aa566 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -22,6 +22,8 @@ module Admin::ActionLogsHelper log.recorded_changes.slice('severity', 'reject_media') elsif log.target_type == 'Status' && log.action == :update log.recorded_changes.slice('sensitive') + elsif log.target_type == 'Announcement' && log.action == :update + log.recorded_changes.slice('text', 'starts_at', 'ends_at', 'all_day') end end @@ -52,6 +54,8 @@ module Admin::ActionLogsHelper 'pencil' when 'AccountWarning' 'warning' + when 'Announcement' + 'bullhorn' end end @@ -94,6 +98,8 @@ module Admin::ActionLogsHelper link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record) when 'AccountWarning' link_to record.target_account.acct, admin_account_path(record.target_account_id) + when 'Announcement' + link_to "##{record.id}", edit_admin_announcement_path(record.id) end end @@ -111,6 +117,8 @@ module Admin::ActionLogsHelper else I18n.t('admin.action_logs.deleted_status') end + when 'Announcement' + "##{attributes['id']}" end end end diff --git a/app/helpers/admin/announcements_helper.rb b/app/helpers/admin/announcements_helper.rb new file mode 100644 index 0000000000..0c053ddec3 --- /dev/null +++ b/app/helpers/admin/announcements_helper.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Admin::AnnouncementsHelper + def time_range(announcement) + if announcement.all_day? + safe_join([l(announcement.starts_at.to_date), ' - ', l(announcement.ends_at.to_date)]) + else + safe_join([l(announcement.starts_at), ' - ', l(announcement.ends_at)]) + end + end +end diff --git a/app/helpers/admin/filter_helper.rb b/app/helpers/admin/filter_helper.rb index 130686a02e..6ab92939d8 100644 --- a/app/helpers/admin/filter_helper.rb +++ b/app/helpers/admin/filter_helper.rb @@ -9,6 +9,7 @@ module Admin::FilterHelper InstanceFilter::KEYS, InviteFilter::KEYS, RelationshipFilter::KEYS, + AnnouncementFilter::KEYS, ].flatten.freeze def filter_link_to(text, link_to_params, link_class_params = link_to_params) diff --git a/app/javascript/images/elephant_ui_plane.svg b/app/javascript/images/elephant_ui_plane.svg index a2624d170e..ca675c9eb3 100644 --- a/app/javascript/images/elephant_ui_plane.svg +++ b/app/javascript/images/elephant_ui_plane.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/app/javascript/mastodon/actions/announcements.js b/app/javascript/mastodon/actions/announcements.js new file mode 100644 index 0000000000..c65bc052ec --- /dev/null +++ b/app/javascript/mastodon/actions/announcements.js @@ -0,0 +1,133 @@ +import api from '../api'; +import { normalizeAnnouncement } from './importer/normalizer'; + +export const ANNOUNCEMENTS_FETCH_REQUEST = 'ANNOUNCEMENTS_FETCH_REQUEST'; +export const ANNOUNCEMENTS_FETCH_SUCCESS = 'ANNOUNCEMENTS_FETCH_SUCCESS'; +export const ANNOUNCEMENTS_FETCH_FAIL = 'ANNOUNCEMENTS_FETCH_FAIL'; +export const ANNOUNCEMENTS_UPDATE = 'ANNOUNCEMENTS_UPDATE'; +export const ANNOUNCEMENTS_DISMISS = 'ANNOUNCEMENTS_DISMISS'; + +export const ANNOUNCEMENTS_REACTION_ADD_REQUEST = 'ANNOUNCEMENTS_REACTION_ADD_REQUEST'; +export const ANNOUNCEMENTS_REACTION_ADD_SUCCESS = 'ANNOUNCEMENTS_REACTION_ADD_SUCCESS'; +export const ANNOUNCEMENTS_REACTION_ADD_FAIL = 'ANNOUNCEMENTS_REACTION_ADD_FAIL'; + +export const ANNOUNCEMENTS_REACTION_REMOVE_REQUEST = 'ANNOUNCEMENTS_REACTION_REMOVE_REQUEST'; +export const ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS = 'ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS'; +export const ANNOUNCEMENTS_REACTION_REMOVE_FAIL = 'ANNOUNCEMENTS_REACTION_REMOVE_FAIL'; + +export const ANNOUNCEMENTS_REACTION_UPDATE = 'ANNOUNCEMENTS_REACTION_UPDATE'; + +const noOp = () => {}; + +export const fetchAnnouncements = (done = noOp) => (dispatch, getState) => { + dispatch(fetchAnnouncementsRequest()); + + api(getState).get('/api/v1/announcements').then(response => { + dispatch(fetchAnnouncementsSuccess(response.data.map(x => normalizeAnnouncement(x)))); + }).catch(error => { + dispatch(fetchAnnouncementsFail(error)); + }).finally(() => { + done(); + }); +}; + +export const fetchAnnouncementsRequest = () => ({ + type: ANNOUNCEMENTS_FETCH_REQUEST, + skipLoading: true, +}); + +export const fetchAnnouncementsSuccess = announcements => ({ + type: ANNOUNCEMENTS_FETCH_SUCCESS, + announcements, + skipLoading: true, +}); + +export const fetchAnnouncementsFail= error => ({ + type: ANNOUNCEMENTS_FETCH_FAIL, + error, + skipLoading: true, + skipAlert: true, +}); + +export const updateAnnouncements = announcement => ({ + type: ANNOUNCEMENTS_UPDATE, + announcement: normalizeAnnouncement(announcement), +}); + +export const dismissAnnouncement = announcementId => (dispatch, getState) => { + dispatch({ + type: ANNOUNCEMENTS_DISMISS, + id: announcementId, + }); + + api(getState).post(`/api/v1/announcements/${announcementId}/dismiss`); +}; + +export const addReaction = (announcementId, name) => (dispatch, getState) => { + dispatch(addReactionRequest(announcementId, name)); + + api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => { + dispatch(addReactionSuccess(announcementId, name)); + }).catch(err => { + dispatch(addReactionFail(announcementId, name, err)); + }); +}; + +export const addReactionRequest = (announcementId, name) => ({ + type: ANNOUNCEMENTS_REACTION_ADD_REQUEST, + id: announcementId, + name, + skipLoading: true, +}); + +export const addReactionSuccess = (announcementId, name) => ({ + type: ANNOUNCEMENTS_REACTION_ADD_SUCCESS, + id: announcementId, + name, + skipLoading: true, +}); + +export const addReactionFail = (announcementId, name, error) => ({ + type: ANNOUNCEMENTS_REACTION_ADD_FAIL, + id: announcementId, + name, + error, + skipLoading: true, +}); + +export const removeReaction = (announcementId, name) => (dispatch, getState) => { + dispatch(removeReactionRequest(announcementId, name)); + + api(getState).delete(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => { + dispatch(removeReactionSuccess(announcementId, name)); + }).catch(err => { + dispatch(removeReactionFail(announcementId, name, err)); + }); +}; + +export const removeReactionRequest = (announcementId, name) => ({ + type: ANNOUNCEMENTS_REACTION_REMOVE_REQUEST, + id: announcementId, + name, + skipLoading: true, +}); + +export const removeReactionSuccess = (announcementId, name) => ({ + type: ANNOUNCEMENTS_REACTION_REMOVE_SUCCESS, + id: announcementId, + name, + skipLoading: true, +}); + +export const removeReactionFail = (announcementId, name, error) => ({ + type: ANNOUNCEMENTS_REACTION_REMOVE_FAIL, + id: announcementId, + name, + error, + skipLoading: true, +}); + +export const updateReaction = reaction => ({ + type: ANNOUNCEMENTS_REACTION_UPDATE, + reaction, +}); diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 78f321da4d..f7cbe4c1cd 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -76,7 +76,6 @@ export function normalizeStatus(status, normalOldStatus) { export function normalizePoll(poll) { const normalPoll = { ...poll }; - const emojiMap = makeEmojiMap(normalPoll); normalPoll.options = poll.options.map((option, index) => ({ @@ -87,3 +86,12 @@ export function normalizePoll(poll) { return normalPoll; } + +export function normalizeAnnouncement(announcement) { + const normalAnnouncement = { ...announcement }; + const emojiMap = makeEmojiMap(normalAnnouncement); + + normalAnnouncement.contentHtml = emojify(normalAnnouncement.content, emojiMap); + + return normalAnnouncement; +} diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 798f9b37ea..8a066b896a 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -157,9 +157,9 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); - done(); }).catch(error => { dispatch(expandNotificationsFail(error, isLoadingMore)); + }).finally(() => { done(); }); }; @@ -188,6 +188,7 @@ export function expandNotificationsFail(error, isLoadingMore) { type: NOTIFICATIONS_EXPAND_FAIL, error, skipLoading: !isLoadingMore, + skipAlert: !isLoadingMore, }; }; diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index c678e93932..ac325f74cd 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -8,6 +8,7 @@ import { } from './timelines'; import { updateNotifications, expandNotifications } from './notifications'; import { updateConversations } from './conversations'; +import { fetchAnnouncements, updateAnnouncements, updateReaction as updateAnnouncementsReaction } from './announcements'; import { fetchFilters } from './filters'; import { getLocale } from '../locales'; @@ -44,6 +45,12 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null, case 'filters_changed': dispatch(fetchFilters()); break; + case 'announcement': + dispatch(updateAnnouncements(JSON.parse(data.payload))); + break; + case 'announcement.reaction': + dispatch(updateAnnouncementsReaction(JSON.parse(data.payload))); + break; } }, }; @@ -51,7 +58,9 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null, } const refreshHomeTimelineAndNotification = (dispatch, done) => { - dispatch(expandHomeTimeline({}, () => dispatch(expandNotifications({}, done)))); + dispatch(expandHomeTimeline({}, () => + dispatch(expandNotifications({}, () => + dispatch(fetchAnnouncements(done)))))); }; export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification); diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index bc2ac5e823..0546686559 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -98,9 +98,9 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems)); - done(); }).catch(error => { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); + }).finally(() => { done(); }); }; diff --git a/app/javascript/mastodon/components/error_boundary.js b/app/javascript/mastodon/components/error_boundary.js index 800b1c2706..4e1c882e22 100644 --- a/app/javascript/mastodon/components/error_boundary.js +++ b/app/javascript/mastodon/components/error_boundary.js @@ -58,7 +58,7 @@ export default class ErrorBoundary extends React.PureComponent {
); diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index 8d0cbe5a19..37622d4c0b 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -115,6 +115,7 @@ class AccountTimeline extends ImmutablePureComponent { shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} bindToDocument={!multiColumn} + timelineId='account' /> ); diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index e57c3c20c3..582bb0d39c 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -290,6 +290,7 @@ class EmojiPickerDropdown extends React.PureComponent { onPickEmoji: PropTypes.func.isRequired, onSkinTone: PropTypes.func.isRequired, skinTone: PropTypes.number.isRequired, + button: PropTypes.node, }; state = { @@ -350,18 +351,18 @@ class EmojiPickerDropdown extends React.PureComponent { } render () { - const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props; + const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props; const title = intl.formatMessage(messages.emoji); const { active, loading, placement } = this.state; return (rel="me"
. El contingut del text de l''enllaç no importa. Aquí tens un exemple:'
+ explanation_html: 'Pots verificar-te com a propietari dels enllaços a les metadades del teu perfil. Per això, el lloc web enllaçat ha de contenir un enllaç al teu perfil de Mastodon. El vincle ha de tenir l''atribut rel="me"
. El contingut del text de l''enllaç no importa. Aquí tens un exemple:'
verification: Verificació
diff --git a/config/locales/co.yml b/config/locales/co.yml
index 4cc1ed5fb2..b21fc8d15f 100644
--- a/config/locales/co.yml
+++ b/config/locales/co.yml
@@ -344,9 +344,6 @@ co:
create: Creà un blucchime
title: Nova iscrizzione nant’a lista nera e-mail
title: Lista nera e-mail
- followers:
- back_to_account: Rivene à u Contu
- title: Abbunati à %{acct}
instances:
by_domain: Duminiu
delivery_available: Rimessa dispunibule
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index a9b101758a..547468e50b 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -354,9 +354,6 @@ cs:
create: Přidat doménu
title: Nová položka pro černou listinu e-mailů
title: Černá listina e-mailů
- followers:
- back_to_account: Zpět na účet
- title: Sledující uživatele %{acct}
instances:
by_domain: Doména
delivery_available: Doručení je k dispozici
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 5e63f1702c..ee8807d20d 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -359,13 +359,11 @@ cy:
delete: Dileu
destroyed_msg: Llwyddwyd i ddileu parth e-bost o'r gosbrestr
domain: Parth
+ empty: Dim parthiau ebost ar y rhestr rhwystro.
new:
create: Ychwanegu parth
title: Cofnod newydd yng nghosbrestr e-byst
title: Cosbrestr e-bost
- followers:
- back_to_account: Nôl i'r gyfrif
- title: Dilynwyr %{acct}
instances:
by_domain: Parth
delivery_available: Mae'r cyflenwad ar gael
@@ -776,6 +774,7 @@ cy:
invalid_irreversible: Mae hidlo anadferadwy ond yn gweithio yng nghyd-destun cartref neu hysbysiadau
index:
delete: Dileu
+ empty: Nid oes gennych chi hidlyddion.
title: Hidlyddion
new:
title: Ychwanegu hidlydd newydd
@@ -967,6 +966,7 @@ cy:
duration_too_long: yn rhy bell yn y dyfodol
duration_too_short: yn rhy fuan
expired: Mae'r pleidlais wedi gorffen yn barod
+ invalid_choice: Nid yw'r dewis pleidlais hyn yn bodoli
over_character_limit: ni all fod yn hirach na %{max} cymeriad yr un
too_few_options: rhaid cael fwy nag un eitem
too_many_options: ni all cynnwys fwy na %{max} o eitemau
diff --git a/config/locales/da.yml b/config/locales/da.yml
index e20496918c..1cdf7722e3 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -335,9 +335,6 @@ da:
create: Tilføj domæne
title: Ny email blokade opslag
title: Email sortliste
- followers:
- back_to_account: Tilbage til konto
- title: "%{acct}'s følgere"
instances:
by_domain: Domæne
delivery_available: Levering er tilgængelig
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 9361ad4f31..218267cd3a 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -198,11 +198,13 @@ de:
change_email_user: "%{name} hat die E-Mail-Adresse des Nutzers %{target} geändert"
confirm_user: "%{name} hat die E-Mail-Adresse von %{target} bestätigt"
create_account_warning: "%{name} hat eine Warnung an %{target} gesendet"
+ create_announcement: "%{name} hat die neue Ankündigung %{target} erstellt"
create_custom_emoji: "%{name} hat neues Emoji %{target} hochgeladen"
create_domain_allow: "%{name} hat die Domain %{target} gewhitelistet"
create_domain_block: "%{name} hat die Domain %{target} blockiert"
create_email_domain_block: "%{name} hat die E-Mail-Domain %{target} geblacklistet"
demote_user: "%{name} stufte Benutzer_in %{target} herunter"
+ destroy_announcement: "%{name} hat die neue Ankündigung %{target} gelöscht"
destroy_custom_emoji: "%{name} zerstörte Emoji %{target}"
destroy_domain_allow: "%{name} hat die Domain %{target} von der Whitelist entfernt"
destroy_domain_block: "%{name} hat die Domain %{target} entblockt"
@@ -224,10 +226,22 @@ de:
unassigned_report: "%{name} hat die Zuweisung der Meldung %{target} entfernt"
unsilence_account: "%{name} hat die Stummschaltung von %{target} aufgehoben"
unsuspend_account: "%{name} hat die Verbannung von %{target} aufgehoben"
+ update_announcement: "%{name} aktualisierte Ankündigung %{target}"
update_custom_emoji: "%{name} hat das %{target} Emoji geändert"
update_status: "%{name} hat einen Beitrag von %{target} aktualisiert"
deleted_status: "(gelöschter Beitrag)"
title: Überprüfungsprotokoll
+ announcements:
+ edit:
+ title: Ankündigung bearbeiten
+ empty: Keine Ankündigungen gefunden.
+ live: Live
+ new:
+ create: Ankündigung erstellen
+ title: Neue Ankündigung
+ published: Veröffentlicht
+ time_range: Zeitraum
+ title: Ankündigungen
custom_emojis:
assign_category: Kategorie zuweisen
by_domain: Domain
@@ -344,9 +358,6 @@ de:
create: Blockade erstellen
title: Neue E-Mail-Domain-Blockade
title: E-Mail-Domain-Blockade
- followers:
- back_to_account: Zurück zum Konto
- title: "%{acct}'s Follower"
instances:
by_domain: Domain
delivery_available: Zustellung funktioniert
@@ -375,6 +386,8 @@ de:
title: Einladungen
pending_accounts:
title: Ausstehende Konten (%{count})
+ relationships:
+ title: Beziehungen von %{acct}
relays:
add_new: Neues Relay hinzufügen
delete: Löschen
@@ -658,6 +671,9 @@ de:
hint_html: "Hinweis: Wir werden dich für die nächste Stunde nicht erneut nach deinem Passwort fragen."
invalid_password: Ungültiges Passwort
prompt: Gib dein Passwort ein um fortzufahren
+ date:
+ formats:
+ default: "%d. %b %Y"
datetime:
distance_in_words:
about_x_hours: "%{count}h"
@@ -734,6 +750,7 @@ de:
hint_html: "Was sind empfohlene Hashtags? Sie werden in deinem öffentlichen Profil deutlich angezeigt und ermöglichen es den Menschen, deine öffentlichen Beiträge speziell unter diesen Hashtags zu durchsuchen. Sie sind ein großartiges Werkzeug, um kreative Werke oder langfristige Projekte zu verfolgen."
filters:
contexts:
+ account: Profile
home: Startseite
notifications: Benachrichtigungen
public: Öffentliche Zeitleisten
@@ -758,6 +775,8 @@ de:
all: Alle
changes_saved_msg: Änderungen gespeichert!
copy: Kopieren
+ delete: Löschen
+ edit: Bearbeiten
no_batch_actions_available: Keine Massenaktionen auf dieser Seite verfügbar
order_by: Sortieren nach
save_changes: Änderungen speichern
@@ -921,6 +940,7 @@ de:
duration_too_long: ist zu weit in der Zukunft
duration_too_short: ist zu früh
expired: Die Umfrage ist bereits vorbei
+ invalid_choice: Die gewählte Stimmenoption existiert nicht
over_character_limit: kann nicht länger als jeweils %{max} Zeichen sein
too_few_options: muss mindestens einen Eintrag haben
too_many_options: kann nicht mehr als %{max} Einträge beinhalten
@@ -928,11 +948,15 @@ de:
other: Weiteres
posting_defaults: Standardeinstellungen für Beiträge
public_timelines: Öffentliche Zeitleisten
+ reactions:
+ errors:
+ unrecognized_emoji: ist kein anerkanntes Emoji
relationships:
activity: Kontoaktivität
dormant: Inaktiv
followers: Folgende
following: Folgt
+ invited: Eingeladen
last_active: Zuletzt aktiv
most_recent: Neuste
moved: Umgezogen
diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml
index 204ac429bf..49c7cade97 100644
--- a/config/locales/doorkeeper.ar.yml
+++ b/config/locales/doorkeeper.ar.yml
@@ -38,6 +38,7 @@ ar:
application: تطبيق
callback_url: رابط رد النداء
delete: حذف
+ empty: ليس لديك أية تطبيقات.
name: التسمية
new: تطبيق جديد
scopes: المجالات
diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml
index db6eb1e515..5c54b5353e 100644
--- a/config/locales/doorkeeper.ast.yml
+++ b/config/locales/doorkeeper.ast.yml
@@ -27,6 +27,7 @@ ast:
help:
native_redirect_uri: Usa %{native_redirect_uri} pa pruebes llocales
index:
+ empty: Nun tienes aplicaciones.
name: Nome
new: Aplicación nueva
scopes: Ámbitos
diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml
index 3c69cf8e7e..3de9d4bab2 100644
--- a/config/locales/doorkeeper.ca.yml
+++ b/config/locales/doorkeeper.ca.yml
@@ -38,6 +38,7 @@ ca:
application: Aplicació
callback_url: URL de retorn
delete: Suprimeix
+ empty: No tens cap aplicació.
name: Nom
new: Aplicació nova
scopes: Àmbits
diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml
index a64a079318..4f03c0c323 100644
--- a/config/locales/doorkeeper.co.yml
+++ b/config/locales/doorkeeper.co.yml
@@ -38,6 +38,7 @@ co:
application: Applicazione
callback_url: URL di richjama
delete: Toglie
+ empty: Ùn avete micca d'applicazione.
name: Nome
new: Applicazione nova
scopes: Scopi
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index 8c5c175f5d..00345db76c 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -38,6 +38,7 @@ cs:
application: Aplikace
callback_url: Zpáteční URL
delete: Smazat
+ empty: Nemáte žádné aplikace.
name: Název
new: Nová aplikace
scopes: Rozsahy
diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml
index 65fb2de88a..8b850b56a6 100644
--- a/config/locales/doorkeeper.de.yml
+++ b/config/locales/doorkeeper.de.yml
@@ -38,6 +38,7 @@ de:
application: Anwendung
callback_url: Callback-URL
delete: Löschen
+ empty: Du hast keine Anwendungen.
name: Name
new: Neue Anwendung
scopes: Befugnisse
diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml
index d4bf0ae775..7423606d4c 100644
--- a/config/locales/doorkeeper.el.yml
+++ b/config/locales/doorkeeper.el.yml
@@ -38,6 +38,7 @@ el:
application: Εφαρμογή
callback_url: URL επιστροφής (Callback)
delete: Διαγραφή
+ empty: Δεν έχετε αιτήσεις.
name: Όνομα
new: Νέα εφαρμογή
scopes: Εύρος εφαρμογής
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index cb12d0e821..89a579ae9a 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -38,6 +38,7 @@ eo:
application: Aplikaĵo
callback_url: Revena URL
delete: Forigi
+ empty: Vi havas neniun aplikaĵon.
name: Nomo
new: Nova aplikaĵo
scopes: Ampleksoj
diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml
index 61b14ba16c..85ab7729de 100644
--- a/config/locales/doorkeeper.es-AR.yml
+++ b/config/locales/doorkeeper.es-AR.yml
@@ -38,6 +38,7 @@ es-AR:
application: Aplicación
callback_url: Dirección web de respuesta ("callback")
delete: Eliminar
+ empty: No tenés aplicaciones.
name: Nombre
new: Nueva aplicación
scopes: Ámbitos
diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml
index 75a04eccf2..61e6cb6a18 100644
--- a/config/locales/doorkeeper.es.yml
+++ b/config/locales/doorkeeper.es.yml
@@ -38,6 +38,7 @@ es:
application: Aplicación
callback_url: URL de callback
delete: Eliminar
+ empty: No tienes aplicaciones.
name: Nombre
new: Nueva aplicación
scopes: Ámbitos
@@ -139,7 +140,7 @@ es:
write:accounts: modifica tu perfil
write:blocks: bloquear cuentas y dominios
write:bookmarks: guardar estados como marcadores
- write:favourites: estados favoritos
+ write:favourites: toots favoritos
write:filters: crear filtros
write:follows: seguir usuarios
write:lists: crear listas
diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml
index 8fb9446317..d3b011a67a 100644
--- a/config/locales/doorkeeper.et.yml
+++ b/config/locales/doorkeeper.et.yml
@@ -38,6 +38,7 @@ et:
application: Rakendus
callback_url: Ümbersuunamise URL
delete: Kustuta
+ empty: Teil pole rakendusi.
name: Nimi
new: Uus rakendus
scopes: Ulatused
diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml
index 19cc409928..07fc139834 100644
--- a/config/locales/doorkeeper.eu.yml
+++ b/config/locales/doorkeeper.eu.yml
@@ -38,6 +38,7 @@ eu:
application: Aplikazioa
callback_url: Itzulera URLa
delete: Ezabatu
+ empty: Ez duzu aplikaziorik.
name: Izena
new: Aplikazio berria
scopes: Irismena
diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml
index 03a8d7963e..c9ca1895e6 100644
--- a/config/locales/doorkeeper.fa.yml
+++ b/config/locales/doorkeeper.fa.yml
@@ -38,6 +38,7 @@ fa:
application: برنامه
callback_url: نشانی Callback
delete: حذف
+ empty: شما هیچ برنامهای ندارید.
name: نام
new: برنامهٔ تازه
scopes: دامنهها
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index 11bbe8cf1d..e9bf70cd25 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -38,6 +38,7 @@ fr:
application: Application
callback_url: URL de retour d’appel
delete: Effacer
+ empty: Vous n’avez pas d’application.
name: Nom
new: Nouvelle application
scopes: Permissions
diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml
index 9cb5d754c8..281f03f84c 100644
--- a/config/locales/doorkeeper.gl.yml
+++ b/config/locales/doorkeeper.gl.yml
@@ -6,7 +6,7 @@ gl:
name: Nome do aplicativo
redirect_uri: URI a redireccionar
scopes: Permisos
- website: Sitio web do aplicativo
+ website: Sitio web da aplicación
errors:
models:
doorkeeper/application:
@@ -27,31 +27,32 @@ gl:
confirmations:
destroy: Está segura?
edit:
- title: Editar aplicativo
+ title: Editar aplicación
form:
- error: Eeeeepa! Comprobe os posibles erros no formulario
+ error: Eeeeepa! Comproba os posibles erros no formulario
help:
- native_redirect_uri: Utilice %{native_redirect_uri} para probas locais
- redirect_uri: Utilice unha liña por URI
- scopes: Separar permisos con espazos. Deixar en blanco para utilizar os permisos por omisión.
+ native_redirect_uri: Utiliza %{native_redirect_uri} para probas locais
+ redirect_uri: Utiliza unha liña por URI
+ scopes: Separar permisos con espazos. Deixar en branco para utilizar os permisos por omisión.
index:
- application: Aplicativo
+ application: Aplicación
callback_url: URL de chamada
delete: Eliminar
+ empty: Non tes aplicacións.
name: Nome
- new: Novo aplicativo
- scopes: Permisos
+ new: Nova aplicación
+ scopes: Ámbitos
show: Mostrar
- title: Os seus aplicativos
+ title: As túas aplicacións
new:
- title: Novo aplicativo
+ title: Nova aplicación
show:
actions: Accións
application_id: Chave do cliente
callback_urls: URLs de chamada
- scopes: Permisos
- secret: Chave secreta do cliente
- title: 'Aplicativo: %{name}'
+ scopes: Ámbitos
+ secret: Chave segreda do cliente
+ title: 'Aplicación: %{name}'
authorizations:
buttons:
authorize: Autorizar
@@ -60,21 +61,21 @@ gl:
title: Algo fallou
new:
able_to: Poderá
- prompt: O aplicativo %{client_name} solicita acceso a súa conta
+ prompt: A aplicación %{client_name} solicita acceso a túa conta
title: Autorización necesaria
show:
- title: Copie este código de autorización e pégueo no aplicativo.
+ title: Copia este código de autorización e pégao na aplicación.
authorized_applications:
buttons:
revoke: Retirar autorización
confirmations:
- revoke: Está segura?
+ revoke: Estás segura?
index:
- application: Aplicativo
+ application: Aplicación
created_at: Autorizado
date_format: "%d-%m-%Y %H:%M:%S"
- scopes: Permisos
- title: Os seus aplicativos autorizados
+ scopes: Ámbitos
+ title: As túas aplicacións autorizadas
errors:
messages:
access_denied: O propietario do recurso ou o servidor autorizado denegaron a petición.
diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml
index 61e7dd5f12..32709299fd 100644
--- a/config/locales/doorkeeper.hu.yml
+++ b/config/locales/doorkeeper.hu.yml
@@ -38,6 +38,7 @@ hu:
application: Alkalmazás
callback_url: Callback URL
delete: Eltávolítás
+ empty: Nincsenek alkalmazásaid.
name: Név
new: Új alkalmazás
scopes: Hatáskör
diff --git a/config/locales/doorkeeper.id.yml b/config/locales/doorkeeper.id.yml
index efaeaae169..8403904818 100644
--- a/config/locales/doorkeeper.id.yml
+++ b/config/locales/doorkeeper.id.yml
@@ -38,6 +38,7 @@ id:
application: Aplikasi
callback_url: URL Callback
delete: Hapus
+ empty: Anda tidak memiliki aplikasi.
name: Nama
new: Aplikasi baru
scopes: Cakupan
diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml
index 31c4bca9f9..0d15479c5d 100644
--- a/config/locales/doorkeeper.is.yml
+++ b/config/locales/doorkeeper.is.yml
@@ -38,6 +38,7 @@ is:
application: Forrit
callback_url: URL-slóð baksvörunar (callback)
delete: Eyða
+ empty: Þú ert ekki með nein forrit.
name: Heiti
new: Nýtt forrit
scopes: Gildissvið
@@ -78,12 +79,22 @@ is:
errors:
messages:
access_denied: Eigandi tilfangs eða auðkenningarþjónn höfnuðu beininni.
+ credential_flow_not_configured: Flæði á lykilorðsauðkennum eiganda tilfangs (Resource Owner) brást vegna þess að Doorkeeper.configure.resource_owner_from_credentials er óskilgreint.
+ invalid_client: Auðkenning á biðlara brást vegna þess að biðlarinn er óþekktur, að auðkenning biðlarans fylgdi ekki með, eða að notuð var óstudd auðkenningaraðferð.
+ invalid_grant: Uppgefin auðkenningarheimild er ógild, útrunnin, afturkölluð, samsvarar ekki endurbirtingarslóðinni í auðkenningarbeiðninni, eða var gefin út til annars biðlara.
invalid_redirect_uri: Endurbeiningarslóðin sem fylgdi er ekki gild.
+ invalid_request: Í beiðnina vantar nauðsynlega færibreytu, hún inniheldur óleyfilegt gildi á færibreytu, eða er gölluð á einhvern annan hátt.
+ invalid_resource_owner: Uppgefin auðkenni eiganda tilfangs eru ekki gild, eða að eigandi tilfangs finnst ekki
invalid_scope: Umbeðið gildissvið er ógilt, óþekkt eða rangt uppsett.
invalid_token:
expired: Auðkenningarteiknið er útrunnið
revoked: Auðkenningarteiknið var aturkallað
unknown: Auðkenningarteiknið er ógilt
+ resource_owner_authenticator_not_configured: Leit að eiganda tilfangs (Resource Owner) brást vegna þess að Doorkeeper.configure.resource_owner_authenticator er óskilgreint.
+ server_error: Auðkenningarþjónninn rakst á óvænt skilyrði sem kom í veg fyrir að hægt væri að uppfylla beiðnina.
+ temporarily_unavailable: Auðkenningarþjónninn hefur ekki tök á að meðhöndla beiðnina vegna of mikils tímabundins álags eða viðhalds á vefþvóninum.
+ unauthorized_client: Biðlaraforritið hefur ekki heimild til að framkvæma beiðnina með þessari aðferð.
+ unsupported_grant_type: Þessi gerð auðkenningaraðferðar er ekki studd af auðkenningarþjóninum.
unsupported_response_type: Auðkenningarþjónninn styður ekki þessa tegund svars.
flash:
applications:
diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml
index 122b38c04a..68e2b57f3e 100644
--- a/config/locales/doorkeeper.it.yml
+++ b/config/locales/doorkeeper.it.yml
@@ -38,6 +38,7 @@ it:
application: Applicazione
callback_url: URL di callback
delete: Elimina
+ empty: Non hai applicazioni.
name: Nome
new: Nuova applicazione
scopes: Visibilità
diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml
index 67eadbf2d2..73932bafd6 100644
--- a/config/locales/doorkeeper.ja.yml
+++ b/config/locales/doorkeeper.ja.yml
@@ -38,6 +38,7 @@ ja:
application: アプリ
callback_url: コールバックURL
delete: 削除
+ empty: アプリはありません
name: 名前
new: 新規アプリ
scopes: アクセス権
@@ -125,7 +126,7 @@ ja:
read: アカウントのすべてのデータの読み取り
read:accounts: アカウント情報の読み取り
read:blocks: ブロックの読み取り
- read:bookmarks: ブックマークを見る
+ read:bookmarks: ブックマークの読み取り
read:favourites: お気に入りの読み取り
read:filters: フィルターの読み取り
read:follows: フォローの読み取り
diff --git a/config/locales/doorkeeper.kk.yml b/config/locales/doorkeeper.kk.yml
index 2c3346b6eb..75f8de5429 100644
--- a/config/locales/doorkeeper.kk.yml
+++ b/config/locales/doorkeeper.kk.yml
@@ -38,6 +38,7 @@ kk:
application: Қосымша
callback_url: Callbаck URL
delete: Өшіру
+ empty: Сізде ешқандай қосымша жоқ.
name: Аты
new: Жаңа қосымша
scopes: Scopеs
diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml
index 3f9e128574..6f4192ebea 100644
--- a/config/locales/doorkeeper.ko.yml
+++ b/config/locales/doorkeeper.ko.yml
@@ -38,6 +38,7 @@ ko:
application: 애플리케이션
callback_url: 콜백 URL
delete: 삭제
+ empty: 어플리케이션이 없습니다.
name: 이름
new: 새 애플리케이션
scopes: 범위
diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml
index 215c8795d0..90d8f93580 100644
--- a/config/locales/doorkeeper.pt-BR.yml
+++ b/config/locales/doorkeeper.pt-BR.yml
@@ -38,6 +38,7 @@ pt-BR:
application: Aplicativos
callback_url: Link de retorno
delete: Excluir
+ empty: Não tem aplicações.
name: Nome
new: Novo aplicativo
scopes: Autorizações
diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml
index e23310a187..2433f23e9c 100644
--- a/config/locales/doorkeeper.pt-PT.yml
+++ b/config/locales/doorkeeper.pt-PT.yml
@@ -38,6 +38,7 @@ pt-PT:
application: Aplicações
callback_url: URL de retorno
delete: Eliminar
+ empty: Não tem aplicações.
name: Nome
new: Nova Aplicação
scopes: Autorizações
diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml
index f04a1306d4..532e2c9aca 100644
--- a/config/locales/doorkeeper.ru.yml
+++ b/config/locales/doorkeeper.ru.yml
@@ -38,6 +38,7 @@ ru:
application: Приложение
callback_url: Callback URL
delete: Удалить
+ empty: У вас нет созданных приложений.
name: Название
new: Новое приложение
scopes: Разрешения
diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml
index af98020c1a..d9367ce5ea 100644
--- a/config/locales/doorkeeper.sv.yml
+++ b/config/locales/doorkeeper.sv.yml
@@ -38,6 +38,7 @@ sv:
application: Applikation
callback_url: Återkalls URL
delete: Ta bort
+ empty: Du har inga program.
name: Namn
new: Ny applikation
scopes: Omfattning
diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml
index 33d6944f0b..597a65038d 100644
--- a/config/locales/doorkeeper.th.yml
+++ b/config/locales/doorkeeper.th.yml
@@ -36,6 +36,7 @@ th:
application: แอปพลิเคชัน
callback_url: URL เรียกกลับ
delete: ลบ
+ empty: คุณไม่มีแอปพลิเคชัน
name: ชื่อ
new: แอปพลิเคชันใหม่
scopes: ขอบเขต
diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml
index b4362f2a27..a218e31575 100644
--- a/config/locales/doorkeeper.tr.yml
+++ b/config/locales/doorkeeper.tr.yml
@@ -38,6 +38,7 @@ tr:
application: Uygulama
callback_url: Geri Dönüş URL
delete: Sil
+ empty: Hiç uygulamanız yok.
name: İsim
new: Yeni uygulama
scopes: Kapsam
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 97ae2bd6cd..53d4755238 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -339,13 +339,11 @@ el:
delete: Διαγραφή
destroyed_msg: Επιτυχής διαγραφή email τομέα από τη μαύρη λίστα
domain: Τομέας
+ empty: Δεν έχουν οριστεί αποκλεισμένοι τομείς email.
new:
create: Πρόσθεση τομέα
title: Νέα εγγραφή email στη μαύρη λίστα
title: Μαύρη λίστα email
- followers:
- back_to_account: Επιστροφή στον λογαριασμό
- title: Ακόλουθοι του/της %{acct}
instances:
by_domain: Τομέας
delivery_available: Διαθέσιμη παράδοση
@@ -920,6 +918,7 @@ el:
duration_too_long: είναι πολύ μακριά στο μέλλον
duration_too_short: είναι πολύ σύντομα
expired: Η ψηφοφορία έχει ήδη λήξει
+ invalid_choice: Αυτή η επιλογή ψήφου δεν υπάρχει
over_character_limit: δε μπορεί να υπερβαίνει τους %{max} χαρακτήρες έκαστη
too_few_options: πρέπει να έχει περισσότερες από μια επιλογές
too_many_options: δεν μπορεί να έχει περισσότερες από %{max} επιλογές
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 8262a58687..18a96ccbc1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -198,11 +198,13 @@ en:
change_email_user: "%{name} changed the e-mail address of user %{target}"
confirm_user: "%{name} confirmed e-mail address of user %{target}"
create_account_warning: "%{name} sent a warning to %{target}"
+ create_announcement: "%{name} created new announcement %{target}"
create_custom_emoji: "%{name} uploaded new emoji %{target}"
create_domain_allow: "%{name} whitelisted domain %{target}"
create_domain_block: "%{name} blocked domain %{target}"
create_email_domain_block: "%{name} blacklisted e-mail domain %{target}"
demote_user: "%{name} demoted user %{target}"
+ destroy_announcement: "%{name} deleted announcement %{target}"
destroy_custom_emoji: "%{name} destroyed emoji %{target}"
destroy_domain_allow: "%{name} removed domain %{target} from whitelist"
destroy_domain_block: "%{name} unblocked domain %{target}"
@@ -224,10 +226,22 @@ en:
unassigned_report: "%{name} unassigned report %{target}"
unsilence_account: "%{name} unsilenced %{target}'s account"
unsuspend_account: "%{name} unsuspended %{target}'s account"
+ update_announcement: "%{name} updated announcement %{target}"
update_custom_emoji: "%{name} updated emoji %{target}"
update_status: "%{name} updated status by %{target}"
deleted_status: "(deleted status)"
title: Audit log
+ announcements:
+ edit:
+ title: Edit announcement
+ empty: No announcements found.
+ live: Live
+ new:
+ create: Create announcement
+ title: New announcement
+ published: Published
+ time_range: Time range
+ title: Announcements
custom_emojis:
assign_category: Assign category
by_domain: Domain
@@ -345,9 +359,6 @@ en:
create: Add domain
title: New e-mail blacklist entry
title: E-mail blacklist
- followers:
- back_to_account: Back To Account
- title: "%{acct}'s Followers"
instances:
by_domain: Domain
delivery_available: Delivery is available
@@ -376,6 +387,8 @@ en:
title: Invites
pending_accounts:
title: Pending accounts (%{count})
+ relationships:
+ title: "%{acct}'s relationships"
relays:
add_new: Add new relay
delete: Delete
@@ -671,6 +684,9 @@ en:
hint_html: "Tip: We won't ask you for your password again for the next hour."
invalid_password: Invalid password
prompt: Confirm password to continue
+ date:
+ formats:
+ default: "%b %d, %Y"
datetime:
distance_in_words:
about_x_hours: "%{count}h"
@@ -747,6 +763,7 @@ en:
hint_html: "What are featured hashtags? They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects."
filters:
contexts:
+ account: Profiles
home: Home timeline
notifications: Notifications
public: Public timelines
@@ -771,6 +788,8 @@ en:
all: All
changes_saved_msg: Changes successfully saved!
copy: Copy
+ delete: Delete
+ edit: Edit
no_batch_actions_available: No batch actions available on this page
order_by: Order by
save_changes: Save changes
@@ -944,11 +963,15 @@ en:
other: Other
posting_defaults: Posting defaults
public_timelines: Public timelines
+ reactions:
+ errors:
+ unrecognized_emoji: is not a recognized emoji
relationships:
activity: Account activity
dormant: Dormant
followers: Followers
following: Following
+ invited: Invited
last_active: Last active
most_recent: Most recent
moved: Moved
@@ -1013,7 +1036,7 @@ en:
firefox_os: Firefox OS
ios: iOS
linux: Linux
- mac: Mac
+ mac: macOS
other: unknown platform
windows: Windows
windows_mobile: Windows Mobile
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index f9374272f3..fb4d5c8bec 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -11,6 +11,7 @@ eo:
apps: Poŝtelefonaj aplikaĵoj
apps_platforms: Uzu Mastodon ĉe iOS, Android kaj aliajn platformojn
browse_directory: Esplori profilujo kaj filtri per interesoj
+ browse_local_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon
browse_public_posts: Vidi vivantan fluon de publikaj mesaĝoj al Mastodon
contact: Kontakti
contact_missing: Ne elektita
@@ -267,6 +268,7 @@ eo:
features: Funkcioj
hidden_service: Federacio kun kaŝitaj servoj
open_reports: nesolvitaj signaloj
+ pending_tags: kradvortoj atendantaj revizion
pending_users: uzantoj atendantaj revizion
recent_users: Lastatempaj uzantoj
search: Tutteksta serĉado
@@ -333,9 +335,6 @@ eo:
create: Aldoni domajnon
title: Nova blokado de retadresa domajno
title: Nigra listo de retadresaj domajnoj
- followers:
- back_to_account: Reen al la konto
- title: Sekvantoj de %{acct}
instances:
by_domain: Domajno
delivery_available: Liverado disponeblas
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index da1ad126f8..f298cfbf59 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -344,9 +344,6 @@ es-AR:
create: Agregar dominio
title: Nueva desaprobación de correo electrónico
title: Desaprobación de correo electrónico
- followers:
- back_to_account: Volver a la cuenta
- title: Seguidores de %{acct}
instances:
by_domain: Dominio
delivery_available: La entrega está disponible
@@ -375,6 +372,8 @@ es-AR:
title: Invitaciones
pending_accounts:
title: Cuentas pendientes (%{count})
+ relationships:
+ title: Relaciones de %{acct}
relays:
add_new: Agregar nuevo relé
delete: Eliminar
@@ -734,6 +733,7 @@ es-AR:
hint_html: "¿Qué son las etiquetas destacadas? Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus toots públicos específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo."
filters:
contexts:
+ account: Perfiles
home: Línea temporal principal
notifications: Notificaciones
public: Líneas temporales públicas
@@ -934,6 +934,7 @@ es-AR:
dormant: Inactivas
followers: Seguidores
following: Siguiendo
+ invited: Invitado
last_active: Última actividad
most_recent: Más reciente
moved: Mudada
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 113ea36724..cc8857bfd5 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -7,7 +7,7 @@ es:
active_count_after: activo
active_footnote: Usuarios Activos Mensuales (UAM)
administered_by: 'Administrado por:'
- api: API
+ api: Interfaz de Programación de la Aplicación
apps: Aplicaciones móviles
apps_platforms: Utiliza Mastodonte desde iOS, Android y otras plataformas
browse_directory: Navega por el directorio de perfiles y filtra por intereses
@@ -344,9 +344,6 @@ es:
create: Añadir dominio
title: Nueva entrada en la lista negra de correo
title: Lista negra de correo
- followers:
- back_to_account: Volver a la cuenta
- title: Seguidores de %{acct}
instances:
by_domain: Dominio
delivery_available: Entrega disponible
@@ -375,6 +372,8 @@ es:
title: Invitaciones
pending_accounts:
title: Cuentas pendientes (%{count})
+ relationships:
+ title: Relaciones de %{acct}
relays:
add_new: Añadir un nuevo relés
delete: Borrar
@@ -486,7 +485,7 @@ es:
open: Cualquiera puede registrarse
title: Modo de registros
show_known_fediverse_at_about_page:
- desc_html: Cuando esté desactivado, mostrará solamente la cronología local, y no la federada
+ desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales.
title: Mostrar fediverso conocido en la vista previa de la cronología
show_staff_badge:
desc_html: Mostrar un parche de staff en la página de un usuario
@@ -587,7 +586,7 @@ es:
guide_link: https://es.crowdin.com/project/mastodon
guide_link_text: Todos pueden contribuir.
sensitive_content: Contenido sensible
- toot_layout: Diseño para barritar
+ toot_layout: Diseño de los toots
application_mailer:
notification_preferences: Cambiar preferencias de correo electrónico
salutation: "%{name},"
@@ -734,6 +733,7 @@ es:
hint_html: "¿Qué son las etiquetas destacadas? Se muestran de forma prominente en tu perfil público y permiten a las personas usuarias navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de obras creativas o proyectos a largo plazo."
filters:
contexts:
+ account: Perfiles
home: Cronología propia
notifications: Notificaciones
public: Cronología pública
@@ -780,7 +780,7 @@ es:
i_am_html: Soy %{username} en %{service}.
identity: Identidad
inactive: Inactivo
- publicize_checkbox: 'Y barrite esto:'
+ publicize_checkbox: 'Y tootee esto:'
publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}"
status: Estado de la verificación
view_proof: Ver prueba
@@ -934,6 +934,7 @@ es:
dormant: Inactivo
followers: Seguidores
following: Siguiendo
+ invited: Invitado
last_active: Última actividad
most_recent: Más reciente
moved: Movido
@@ -954,16 +955,16 @@ es:
remote_interaction:
favourite:
proceed: Proceder a marcar como favorito
- prompt: 'Quieres marcar como favorito este bramido:'
+ prompt: 'Quieres marcar como favorito este toot:'
reblog:
- proceed: Proceder a rebarritar
- prompt: 'Quieres rebarritar este bramido:'
+ proceed: Proceder a retootear
+ prompt: 'Quieres retootear este toot:'
reply:
proceed: Proceder a responder
- prompt: 'Quieres responder a este bramido:'
+ prompt: 'Quieres responder a este toot:'
scheduled_statuses:
- over_daily_limit: Ha superado el límite de %{limit} bramidos programados para ese día
- over_total_limit: Ha superado el límite de %{limit} bramidos programados
+ over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día
+ over_total_limit: Ha superado el límite de %{limit} toots programados
too_soon: La fecha programada debe estar en el futuro
sessions:
activity: Última actividad
@@ -1190,8 +1191,8 @@ es:
warning:
explanation:
disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee.
- silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus bramidos en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente.
- suspend: Su cuenta ha sido suspendida, y todos tus bramidos y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
+ silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente.
+ suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores.
get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}.
review_server_policies: Revisar las políticas del servidor
statuses: 'Específicamente, para:'
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 16e80ae353..e0e861c336 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -347,9 +347,6 @@ et:
create: Lisa domeen
title: Uus e-posti keelunimekirja sisend
title: E-posti keelunimekiri
- followers:
- back_to_account: Tagasi minu kontole
- title: "%{acct}-i jälgijad"
instances:
by_domain: Domeen
delivery_available: Üleandmine on saadaval
@@ -378,6 +375,8 @@ et:
title: Kutsed
pending_accounts:
title: Ootel olevad kasutajad (%{count})
+ relationships:
+ title: "%{acct}-i suhted"
relays:
add_new: Lisa uus relee
delete: Kustuta
@@ -737,6 +736,7 @@ et:
hint_html: "Mis on esile toodud sildid? Need sildid näidatakse nähtavalt Teie avalikul profiilil ning nad aitavad inimestel leida postitusi, millel on antud sildid. Nad on hea viis kuidas näiteks hoida järge loovtöödel või pikaajalistel projektidel."
filters:
contexts:
+ account: Profiilid
home: Kodu ajajoon
notifications: Teated
public: Avalikud ajajooned
@@ -937,6 +937,7 @@ et:
dormant: Seisev
followers: Jälgijad
following: Jälgib
+ invited: Kutsutud
last_active: Viimati aktiivne
most_recent: Viimased
moved: Kolinud
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index bfa91beb89..999772cfee 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -344,9 +344,6 @@ eu:
create: Gehitu domeinua
title: Sarrera berria e-mail zerrenda beltzean
title: E-mail zerrenda beltza
- followers:
- back_to_account: Itzuli kontura
- title: "%{acct} kontuaren jarraitzaileak"
instances:
by_domain: Domeinua
delivery_available: Bidalketa eskuragarri dago
@@ -921,6 +918,7 @@ eu:
duration_too_long: etorkizunean urrunegi dago
duration_too_short: goizegi da
expired: Inkesta amaitu da jada
+ invalid_choice: Hautatutako boto aukera ez da existitzen
over_character_limit: bakoitzak gehienez %{max} karaktere izan ditzake
too_few_options: elementu bat baino gehiago izan behar du
too_many_options: ezin ditu %{max} elementu baino gehiago izan
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 81c163f7f0..ecf3bc391a 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -346,9 +346,6 @@ fa:
create: ساختن مسدودسازی
title: مسدودسازی دامین ایمیل تازه
title: مسدودسازی دامینهای ایمیل
- followers:
- back_to_account: بازگشت به حساب
- title: پیگیران %{acct}
instances:
by_domain: دامین
delivery_available: پیام آماده است
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 9c8f56889e..09a5994941 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -198,11 +198,13 @@ fr:
change_email_user: "%{name} a modifié l’adresse de courriel de l’utilisateur·rice %{target}"
confirm_user: "%{name} adresse courriel confirmée de l’utilisateur·ice %{target}"
create_account_warning: "%{name} a envoyé un avertissement à %{target}"
+ create_announcement: "%{name} a créé une nouvelle annonce %{target}"
create_custom_emoji: "%{name} a importé de nouveaux émojis %{target}"
create_domain_allow: "%{name} a inscrit le domaine %{target} sur liste blanche"
create_domain_block: "%{name} a bloqué le domaine %{target}"
create_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste noire"
demote_user: "%{name} a rétrogradé l’utilisateur·ice %{target}"
+ destroy_announcement: "%{name} a supprimé l’annonce %{target}"
destroy_custom_emoji: "%{name} a détruit l’émoticône %{target}"
destroy_domain_allow: "%{name} a supprimé le domaine %{target} de la liste blanche"
destroy_domain_block: "%{name} a débloqué le domaine %{target}"
@@ -224,10 +226,22 @@ fr:
unassigned_report: "%{name} a désassigné le signalement %{target}"
unsilence_account: "%{name} a mis fin au mode silence de %{target}"
unsuspend_account: "%{name} a réactivé le compte de %{target}"
+ update_announcement: "%{name} a actualisé l’annonce %{target}"
update_custom_emoji: "%{name} a mis à jour l’émoji %{target}"
update_status: "%{name} a mis à jour le statut de %{target}"
deleted_status: "(statut supprimé)"
title: Journal d’audit
+ announcements:
+ edit:
+ title: Modifier l’annonce
+ empty: Aucune annonce trouvée.
+ live: En direct
+ new:
+ create: Créer une annonce
+ title: Nouvelle annonce
+ published: Publié
+ time_range: Intervalle de temps
+ title: Annonces
custom_emojis:
assign_category: Attribuer une catégorie
by_domain: Domaine
@@ -344,9 +358,6 @@ fr:
create: Créer le blocage
title: Nouveau blocage de domaine de courriel
title: Blocage de domaines de courriel
- followers:
- back_to_account: Retour au compte
- title: Abonné⋅e⋅s de %{acct}
instances:
by_domain: Domaine
delivery_available: Livraison disponible
@@ -375,6 +386,8 @@ fr:
title: Invitations
pending_accounts:
title: Comptes en attente (%{count})
+ relationships:
+ title: Relations de %{acct}
relays:
add_new: Ajouter un nouveau relais
delete: Effacer
@@ -658,6 +671,9 @@ fr:
hint_html: "Astuce : Nous ne vous demanderons plus votre mot de passe pour la prochaine heure."
invalid_password: Mot de passe invalide
prompt: Confirmez votre mot de passe pour continuer
+ date:
+ formats:
+ default: "%d %b %Y"
datetime:
distance_in_words:
about_x_hours: "%{count} h"
@@ -734,6 +750,7 @@ fr:
hint_html: "Que sont les hashtags vedettes ? Ils sont affichés avec emphase sur votre flux d'actualités publique et permettent aux gens de parcourir vos messages publics spécifiquement sous ces hashtags. Ils sont un excellent outil pour garder trace des œuvres créatives ou des projets à long terme."
filters:
contexts:
+ account: Profils
home: Accueil
notifications: Notifications
public: Fils publics
@@ -758,6 +775,8 @@ fr:
all: Tous
changes_saved_msg: Les modifications ont été enregistrées avec succès !
copy: Copier
+ delete: Supprimer
+ edit: Modifier
no_batch_actions_available: Aucune action par lots disponible sur cette page
order_by: Classer par
save_changes: Enregistrer les modifications
@@ -929,11 +948,15 @@ fr:
other: Autre
posting_defaults: Paramètres par défaut des pouets
public_timelines: Fils publics
+ reactions:
+ errors:
+ unrecognized_emoji: n’est pas un émoji reconnu
relationships:
activity: Activité du compte
dormant: Dormant
followers: Abonné·e·s
following: Abonnements
+ invited: Invité·e
last_active: Dernière activité
most_recent: Plus récent
moved: Déménagé
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index 7e8776a5b0..9fa44456ed 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -2,26 +2,26 @@
gl:
about:
about_hashtag_html: Estes son toots públicos etiquetados con #%{hashtag}. Podes interactuar con eles se tes unha conta nalgures do fediverso.
- about_mastodon_html: O Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada coma o correo electrónico!
+ about_mastodon_html: Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada como o correo electrónico.
about_this: Acerca de
- active_count_after: activo
- active_footnote: Usuarios Activos Mensuais (UAM)
- administered_by: 'Administrado por:'
+ active_count_after: activas
+ active_footnote: Usuarias Activas no Mes (UAM)
+ administered_by: 'Administrada por:'
api: API
apps: Aplicacións móbiles
- apps_platforms: Emprega o Mastodon dende iOS, Android e outras plataformas
+ apps_platforms: Emprega Mastodon dende iOS, Android e outras plataformas
browse_directory: Navega polo directorio de perfís e filtra por intereses
browse_local_posts: Navega polas publicacións públicas deste servidor en tempo real
- browse_public_posts: Navega polas publicacións públicas do Mastodon en tempo real
+ browse_public_posts: Navega polas publicacións públicas de Mastodon en tempo real
contact: Contacto
- contact_missing: Non estabelecido
+ contact_missing: Non establecido
contact_unavailable: Non dispoñíbel
- discover_users: Descobrir usuarios
+ discover_users: Descubrir usuarias
documentation: Documentación
federation_hint_html: Cunha conta en %{instance} poderás seguir ás persoas en calquera servidor do Mastodon e alén.
get_apps: Probar unha aplicación móbil
- hosted_on: O Mastodon está aloxado en %{domain}
- instance_actor_flash: 'Esta conta é un actor virtual empregado para representar ó servidor e non a un usuario individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías empregar o bloqueo de dominio.
+ hosted_on: Mastodon aloxado en %{domain}
+ instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queiras bloquear a toda a instancia, en tal caso deberías utilizar o bloqueo do dominio.
'
learn_more: Saber máis
@@ -32,7 +32,7 @@ gl:
status_count_after:
one: estado
other: estados
- status_count_before: Que escribiron
+ status_count_before: Que publicaron
tagline: Segue ás túas amizades e coñece novas
terms: Termos do servizo
unavailable_content: Contido non dispoñíbel
@@ -40,22 +40,22 @@ gl:
domain: Servidor
reason: Razón
rejecting_media: 'Os ficheiros multimedia deste servidor non serán procesados e non se amosarán miniaturas, o que require un clic manual no ficheiro orixinal:'
- silenced: 'As publicacións deste servidor non se amosarán en ningún lugar agás que as sigas:'
- suspended: 'Non se procesarán, almacenarán nin intercambiarán datos destes servidores, o que fai imposíbel calquera interacción ou comunicación cos usuarios dende estes servidores:'
- unavailable_content_html: O Mastodon de xeito xeral permíteche ver contidos doutros servidores do fediverso e interactuar cos seus usuarios. Estas son as excepcións que se estabeleceron neste servidor en particular.
+ silenced: 'As publicacións deste servidor non se amosarán en conversas e liñas temporais, nin terás notificacións das súas usuarias agás que as sigas:'
+ suspended: 'Non se procesarán, almacenarán nin intercambiarán datos destes servidores, o que fai imposíbel calquera interacción ou comunicación coas usuarias dende estes servidores:'
+ unavailable_content_html: O Mastodon de xeito xeral permíteche ver contidos doutros servidores do fediverso e interactuar coas súas usuarias. Estas son as excepcións que se estabeleceron neste servidor en particular.
user_count_after:
- one: usuario
- other: usuarios
+ one: usuaria
+ other: usuarias
user_count_before: Fogar de
- what_is_mastodon: Que é o Mastodon?
+ what_is_mastodon: Qué é Mastodon?
accounts:
- choices_html: 'Suxestións de %{name}:'
+ choices_html: 'Escollas de %{name}:'
endorsements_hint: Podes suxerir a persoas que segues dende a interface web, e amosaranse aquí.
- featured_tags_hint: Podes destacar determinados cancelos (hashtags) que se amosarán aquí.
+ featured_tags_hint: Podes destacar determinadas etiquetas que se amosarán aquí.
follow: Seguir
followers:
- one: Seguidor
- other: Seguidores
+ one: Seguidora
+ other: Seguidoras
following: Seguindo
joined: Uniuse en %{date}
last_active: última actividade
@@ -74,18 +74,18 @@ gl:
other: Toots
posts_tab_heading: Toots
posts_with_replies: Toots e respostas
- reserved_username: O nome de usuario está reservado
+ reserved_username: O nome de usuaria está reservado
roles:
- admin: Administrador
+ admin: Administradora
bot: Bot
group: Grupo
- moderator: Moderador
+ moderator: Moderadora
unavailable: Perfil non dispoñíbel
unfollow: Deixar de seguir
admin:
account_actions:
action: Executar acción
- title: Executar acción de moderación en %{acct}
+ title: Executar acción de moderación a %{acct}
account_moderation_notes:
create: Deixar nota
created_msg: Nota de moderación creada de xeito correcto!
@@ -94,7 +94,7 @@ gl:
accounts:
approve: Aprobar
approve_all: Aprobar todos
- are_you_sure: Estás seguro?
+ are_you_sure: Está segura?
avatar: Imaxe de perfil
by_domain: Dominio
change_email:
@@ -110,7 +110,7 @@ gl:
deleted: Eliminado
demote: Rebaixar
disable: Desactivar
- disable_two_factor_authentication: Desactivar dobre factor
+ disable_two_factor_authentication: Desactivar 2FA
disabled: Desactivado
display_name: Nome a amosar
domain: Dominio
@@ -119,13 +119,13 @@ gl:
email_status: Estado do email
enable: Activar
enabled: Activado
- followers: Seguidores
+ followers: Seguidoras
follows: Seguindo
header: Cabeceira
inbox_url: URL da caixa de entrada
- invited_by: Convidado por
+ invited_by: Convidada por
ip: IP
- joined: Unido
+ joined: Uniuse
location:
all: Todo
local: Local
@@ -135,7 +135,7 @@ gl:
media_attachments: Multimedia adxunta
memorialize: Converter en lembranza
moderation:
- active: Activo
+ active: Activa
all: Todo
pending: Pendente
silenced: Silenciados
@@ -159,7 +159,7 @@ gl:
remove_avatar: Eliminar imaxe de perfil
remove_header: Eliminar cabeceira
resend_confirmation:
- already_confirmed: Este usuario xa está confirmado
+ already_confirmed: Esta usuaria xa está confirmada
send: Reenviar o email de confirmación
success: Email de confirmación enviado de xeito correcto!
reset: Restabelecer
@@ -170,9 +170,9 @@ gl:
admin: Administrador
moderator: Moderador
staff: Persoal (staff)
- user: Usuario
+ user: Usuaria
search: Procurar
- search_same_ip: Outros usuarios co mesmo IP
+ search_same_ip: Outras usuarias co mesmo IP
shared_inbox_url: URL da caixa de entrada compartida
show:
created_reports: Denuncias feitas
@@ -188,46 +188,60 @@ gl:
undo_silenced: Desfacer silencio
undo_suspension: Desfacer suspensión
unsubscribe: Desbotar a subscrición
- username: Nome de usuario
+ username: Nome de usuaria
warn: Aviso
web: Web
whitelisted: Listaxe branca
action_logs:
actions:
assigned_to_self_report: "%{name} atribuíu a denuncia %{target} a el mesmo"
- change_email_user: "%{name} mudou o enderezo de email do usuario %{target}"
- confirm_user: "%{name} confirmou o enderezo de email do usuario %{target}"
+ change_email_user: "%{name} cambiou o enderezo de correo-e da usuaria %{target}"
+ confirm_user: "%{name} comfirmou o enderezo de correo da usuaria %{target}"
create_account_warning: "%{name} enviou un aviso a %{target}"
+ create_announcement: "%{name} creou un novo anuncio %{target}"
create_custom_emoji: "%{name} subiu unha nova emoticona %{target}"
create_domain_allow: "%{name} engadiu á listaxe branca o dominio %{target}"
create_domain_block: "%{name} bloqueou o dominio %{target}"
create_email_domain_block: "%{name} engadiu á listaxe negra o dominio de email %{target}"
- demote_user: "%{name} rebaixou ó usuario %{target}"
+ demote_user: "%{name} degradou a usuaria %{target}"
+ destroy_announcement: "%{name} eliminou o anuncio %{target}"
destroy_custom_emoji: "%{name} eliminou a emoticona %{target}"
destroy_domain_allow: "%{name} eliminou o dominio %{target} da listaxe branca"
destroy_domain_block: "%{name} desbloqueou o dominio %{target}"
destroy_email_domain_block: "%{name} engadiu á lista branca o dominio de email %{target}"
destroy_status: "%{name} eliminou o estado de %{target}"
- disable_2fa_user: "%{name} desactivou o requirimento de dobre factor para o usuario %{target}"
+ disable_2fa_user: "%{name} desactivou o requirimento de dobre factor para a usuaria %{target}"
disable_custom_emoji: "%{name} desactivou a emoticona %{target}"
- disable_user: "%{name} desactivou o acceso á conta para o usuario %{target}"
+ disable_user: "%{name} desactivou o acceso á conta para a usuaria %{target}"
enable_custom_emoji: "%{name} activou a emoticona %{target}"
- enable_user: "%{name} activou o acceso á conta para o usuario %{target}"
+ enable_user: "%{name} activou o acceso á conta para a usuaria %{target}"
memorialize_account: "%{name} converteu a conta de %{target} nunha páxina para a lembranza"
- promote_user: "%{name} promocionou o usuario %{target}"
+ promote_user: "%{name} promoveu a usuaria %{target}"
remove_avatar_user: "%{name} eliminou a imaxe de perfil de %{target}"
reopen_report: "%{name} reabriu a denuncia %{target}"
- reset_password_user: "%{name} restabeleceu o contrasinal do usuario %{target}"
+ reset_password_user: "%{name} restableceu o contrasinal da usuaria %{target}"
resolve_report: "%{name} resolveu a denuncia %{target}"
silence_account: "%{name} silenciou a conta de %{target}"
suspend_account: "%{name} suspendeu a conta de %{target}"
unassigned_report: "%{name} deixou de atribuír a denuncia %{target}"
unsilence_account: "%{name} deixou de silenciar a conta de %{target}"
unsuspend_account: "%{name} desactivou a suspensión da conta de %{target}"
+ update_announcement: "%{name} actualizou o anuncio %{target}"
update_custom_emoji: "%{name} actualizou a emoticona %{target}"
update_status: "%{name} actualizou o estado de %{target}"
deleted_status: "(estado eliminado)"
title: Rexistro de auditoría
+ announcements:
+ edit:
+ title: Editar anuncio
+ empty: Ningún anuncio atopado.
+ live: Ao vivo
+ new:
+ create: Crear anuncio
+ title: Novo anuncio
+ published: Publicado
+ time_range: Intre de tempo
+ title: Anuncios
custom_emojis:
assign_category: Atribuír categoría
by_domain: Dominio
@@ -275,18 +289,18 @@ gl:
hidden_service: Federación con servizos agochados
open_reports: denuncias abertas
pending_tags: cancelos agardando revisión
- pending_users: usuarios agardando revisión
- recent_users: Usuarios recentes
+ pending_users: usuarias agardando revisión
+ recent_users: Usuarias recentes
search: Procura por texto completo
- single_user_mode: Modo de usuario único
+ single_user_mode: Modo de usuaria única
software: Software
space: Uso de almacenamento
title: Taboleiro
- total_users: usuarios en total
+ total_users: usuarias en total
trends: Tendencias
week_interactions: interaccións desta semana
week_users_active: activos desta semana
- week_users_new: usuarios desta semana
+ week_users_new: usuarias esta semana
whitelist_mode: Modo de listaxe branca
domain_allows:
add_new: Engadir dominio á listaxe branca
@@ -344,9 +358,6 @@ gl:
create: Engadir dominio
title: Nova entrada na listaxe negra de email
title: Listaxe negra de email
- followers:
- back_to_account: Voltar á conta
- title: Seguidores de %{acct}
instances:
by_domain: Dominio
delivery_available: Entrega dispoñíbel
@@ -375,94 +386,96 @@ gl:
title: Convites
pending_accounts:
title: Contas pendentes (%{count})
+ relationships:
+ title: Relacións de %{acct}
relays:
add_new: Engadir un novo repetidor
delete: Eliminar
description_html: Un repetidor da federación é un servidor intermedio que intercambia grandes volumes de toots públicos entre servidores que se suscriban e publiquen nel. Pode axudar a servidores pequenos e medios a descubrir contido no fediverso, o que de outro xeito precisaría que as usuarias locais seguisen a outra xente en servidores remotos.
disable: Desactivar
- disabled: Desactivada
+ disabled: Desactivado
enable: Activar
- enable_hint: Unha vez activado, o seu servidor suscribirase a todos os toots públicos de este servidor, e tamén comezará a eviar a el os toots públicos do servidor.
- enabled: Activada
+ enable_hint: Unha vez activado, o teu servidor subscribirase a todos os toots públicos deste repetidor, e tamén comezará a enviar a el os toots públicos do servidor.
+ enabled: Activado
inbox_url: URL do repetidor
- pending: Agardando polo permiso do repetidor
+ pending: Agardando pola aprobación do repetidor
save_and_enable: Gardar e activar
- setup: Configurar a conexión ao repetidor
- signatures_not_enabled: Os repetidores non funcionarán correctamente se o modo seguro ou lista branca están activados
+ setup: Configurar unha conexión ó repetidor
+ signatures_not_enabled: Os repetidores non funcionarán de xeito correcto se o modo seguro ou listaxe branca están activados
status: Estado
title: Repetidores
report_notes:
- created_msg: Creouse correctamente a nota do informe!
- destroyed_msg: Nota do informe eliminouse con éxito!
+ created_msg: A nota da denuncia creouse de xeito correcto!
+ destroyed_msg: A nota da denuncia borrouse de xeito correcto!
reports:
account:
notes:
one: "%{count} nota"
other: "%{count} notas"
reports:
- one: "%{count} informe"
- other: "%{count} informes"
+ one: "%{count} denuncia"
+ other: "%{count} denuncias"
action_taken_by: Acción tomada por
- are_you_sure: Está segura?
- assign_to_self: Asignarmo
+ are_you_sure: Estás seguro?
+ assign_to_self: Asignarme
assigned: Moderador asignado
- by_target_domain: Dominio da conta sobre a que informa
+ by_target_domain: Dominio da conta denunciada
comment:
- none: Nada
- created_at: Reportado
+ none: Ningún
+ created_at: Denunciado
mark_as_resolved: Marcar como resolto
mark_as_unresolved: Marcar como non resolto
notes:
create: Engadir nota
- create_and_resolve: Resolver con nota
- create_and_unresolve: Voltar a abrir con nota
+ create_and_resolve: Resolver cunha nota
+ create_and_unresolve: Reabrir cunha nota
delete: Eliminar
- placeholder: Describe qué medidas foron tomadas, ou calquer outra información relacionada...
- reopen: Voltar a abrir o informe
- report: 'Informe #%{id}'
- reported_account: Conta reportada
- reported_by: Reportada por
+ placeholder: Describir que accións foron tomadas ou calquera outra novidade sobre esta denuncia...
+ reopen: Reabrir denuncia
+ report: 'Denuncia #%{id}'
+ reported_account: Conta denunciada
+ reported_by: Denunciado por
resolved: Resolto
- resolved_msg: Resolveuse con éxito o informe!
+ resolved_msg: Resolveuse con éxito a denuncia!
status: Estado
- title: Informes
+ title: Denuncias
unassign: Non asignar
unresolved: Non resolto
updated_at: Actualizado
settings:
activity_api_enabled:
- desc_html: Conta de estados publicados localmente, usuarias activas, e novos rexistros por semana
+ desc_html: Conta de estados publicados de xeito local, usuarias activas, e novos rexistros en períodos semanais
title: Publicar estatísticas agregadas sobre a actividade da usuaria
bootstrap_timeline_accounts:
- desc_html: Separar múltiples nomes de usuaria con vírgulas. Só funcionarán as contas locais non bloqueadas. Si baldeiro, por omisión son todos os local admin.
- title: Seguimentos por omisión para novas usuarias
+ desc_html: Separar os múltiples nomes de usuaria con vírgulas. Só funcionarán as contas locais non bloqueadas. Se fica baleiro, serán todos os administradores locais.
+ title: Seguimentos por defecto para novas contas
contact_information:
- email: e-mail de traballo
+ email: Email de negocios
username: Nome de usuaria de contacto
custom_css:
- desc_html: Modificar o aspecto con CSS cargado en cada páxina
+ desc_html: Modificar a aparencia con CSS cargado en cada páxina
title: CSS personalizado
default_noindex:
desc_html: Aféctalle a todas as usuarias que non cambiaron os axustes elas mesmas
title: Por omisión exclúe as usuarias do indexado por servidores de busca
domain_blocks:
- all: Para todas
+ all: Para todos
disabled: Para ninguén
- title: Mostrar dominios bloqueados
+ title: Amosar dominios bloqueados
users: Para usuarias locais conectadas
domain_blocks_rationale:
- title: Mostrar razón
+ title: Amosar motivo
enable_bootstrap_timeline_accounts:
title: Activar seguimentos por omisión para novas usuarias
hero:
- desc_html: Mostrado na portada. Recoméndase 600x100px como mínimo. Se non se establece, mostrará a imaxe por omisión do servidor
- title: Imáxe Heróe
+ desc_html: Amosado na páxina principal. Polo menos 600x100px recomendados. Se non está definido, estará por defecto a miniatura do servidor
+ title: Imaxe do heroe
mascot:
- desc_html: Mostrado en varias páxinas. Recoméndase 293x205 como mínimo. Se non se establece publícase a mascota por omisión
+ desc_html: Amosado en varias páxinas. Polo menos 293x205px recomendados. Se non está definido, estará a mascota por defecto
title: Imaxe da mascota
peers_api_enabled:
desc_html: Nomes de dominio que este servidor atopou no fediverso
- title: Publicar lista de servidores descubertos
+ title: Publicar listaxe de servidores descobertos
preview_sensitive_media:
desc_html: A vista previa de ligazóns de outros sitios web mostrará unha imaxe incluso si os medios están marcados como sensibles
title: Mostrar medios sensibles con vista previa OpenGraph
@@ -658,6 +671,9 @@ gl:
hint_html: "Nota: Non che pediremos o contrasinal na seguinte hora."
invalid_password: Contrasinal incorrecto
prompt: Confirma o contrasinal para continuar
+ date:
+ formats:
+ default: "%d %b, %Y"
datetime:
distance_in_words:
about_x_hours: "%{count}h"
@@ -734,6 +750,7 @@ gl:
hint_html: "¿Qué son as etiquetas destacadas? Móstranse destacadas no seu perfil público e permítenlle a outras persoas ver os seus toots públicos nos que as utilizou. Son unha ferramenta moi útil para facer seguimento de traballos creativos e proxectos a longo prazo."
filters:
contexts:
+ account: Perfís
home: Liña temporal inicial
notifications: Avisos
public: Liñas temporais públicas
@@ -758,6 +775,8 @@ gl:
all: Todo
changes_saved_msg: Cambios gardados correctamente!!
copy: Copiar
+ delete: Eliminar
+ edit: Editar
no_batch_actions_available: Non hai accións en pila dispoñibles nesta páxina
order_by: Ordenar por
save_changes: Gardar cambios
@@ -916,11 +935,11 @@ gl:
truncate: "…"
polls:
errors:
- already_voted: Xa votou en esta sondaxe
+ already_voted: Xa votaches nesta enquisa
duplicate_options: contén elementos duplicados
duration_too_long: está moi lonxe no futuro
duration_too_short: é demasiado cedo
- expired: A sondaxe rematou
+ expired: A enquisa rematou
invalid_choice: A opción de voto escollida non existe
over_character_limit: non poden ter máis de %{max} caracteres cada unha
too_few_options: debe ter máis de unha opción
@@ -929,11 +948,15 @@ gl:
other: Outro
posting_defaults: Valores por omisión
public_timelines: Liñas temporais públicas
+ reactions:
+ errors:
+ unrecognized_emoji: non é unha emoticona recoñecida
relationships:
activity: Actividade da conta
dormant: En repouso
followers: Seguidoras
following: Seguindo
+ invited: Convidado
last_active: Último activo
most_recent: Máis recente
moved: Movida
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index ae3cc479c1..9f0e2f9485 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -341,13 +341,11 @@ hu:
delete: Törlés
destroyed_msg: E-mail domain sikeresen eltávolítva a feketelistáról
domain: Domain
+ empty: Nincs email domain a feketelistán.
new:
create: Domain hozzáadása
title: Új e-mail feketelista bejegyzés
title: E-mail feketelista
- followers:
- back_to_account: Vissza a fiókhoz
- title: "%{acct} követői"
instances:
by_domain: Domain
delivery_available: Kézbesítés elérhető
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 2a759bc5f6..8cdb2f1fc8 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -308,6 +308,7 @@ id:
private_comment: Komentar pribadi
private_comment_hint: Komentar tentang pembatasan domain ini untuk penggunaan internal oleh moderator.
public_comment: Komentar publik
+ public_comment_hint: Komentar tentang pembatasan domain ini untuk publik umum, jika mengiklankan daftar pembatasan domain diaktifkan.
reject_media: Tolak berkas media
reject_media_hint: Hapus file media yang tersimpan dan menolak semua unduhan nantinya. Tidak terpengaruh dengan suspen
reject_reports: Tolak laporan
@@ -338,9 +339,6 @@ id:
create: Tambah domain
title: Entri daftar hitam surel baru
title: Daftar hitam surel
- followers:
- back_to_account: Kembali Ke Akun
- title: Pengikut %{acct}
instances:
by_domain: Domain
delivery_available: Pengiriman tersedia
@@ -440,6 +438,9 @@ id:
all: Kepada semua orang
disabled: Tidak kepada siapa pun
title: Lihat blokir domain
+ users: Ke pengguna lokal yang sudah login
+ domain_blocks_rationale:
+ title: Tampilkan alasan
enable_bootstrap_timeline_accounts:
title: Aktifkan opsi ikuti otomatis untuk pengguna baru
hero:
diff --git a/config/locales/is.yml b/config/locales/is.yml
index a4d21deb26..70d6e4e75d 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -52,7 +52,7 @@ is:
choices_html: "%{name} hefur valið:"
endorsements_hint: Þú getur auglýst efni frá fólki sem þú fylgir í vefviðmótinu og mun það birtast hér.
featured_tags_hint: Þú getur gefið sérstökum myllumerkjum aukið vægi og birtast þau þá hér.
- follow: Fylgja
+ follow: Fylgjast með
followers:
one: fylgjandi
other: fylgjendur
@@ -344,9 +344,6 @@ is:
create: Bæta við léni
title: Ný færsla á bannlista fyrir tölvupóstföng
title: Bannlisti yfir tölvupóstföng
- followers:
- back_to_account: Til baka í notandaaðgang
- title: Fylgjast með %{acct}
instances:
by_domain: Lén
delivery_available: Afhending er til taks
@@ -495,7 +492,7 @@ is:
desc_html: Kynningarmálsgrein í API. Lýstu því hvað það er sem geri þennan Mastodon-þjón sérstakan, auk annarra mikilvægra upplýsinga. Þú getur notað HTML-einindi, sér í lagi <a>
og <em>
.
title: Lýsing á vefþjóni
site_description_extended:
- desc_html: góður staður fyrir siðareglur, almennt regluverk, leiðbeiningar og annað sem gerir netþjóninni þinn sérstakann. Þú getur notað HTML-einindi
+ desc_html: Góður staður fyrir siðareglur, almennt regluverk, leiðbeiningar og annað sem gerir netþjóninni þinn sérstakann. Þú getur notað HTML-einindi
title: Sérsniðnar ítarlegar upplýsingar
site_short_description:
desc_html: Birt á hliðarspjaldi og í lýsigögnum. Lýstu því hvað Mastodon gerir og hvað það er sem geri þennan vefþjón sérstakan, í einni málsgrein.
@@ -645,7 +642,7 @@ is:
authorize_follow:
already_following: Þú ert að þegar fylgjast með þessum aðgangi
error: Því miður, það kom upp villa við að fletta upp fjartengda notandaaðgangnum
- follow: Fylgja
+ follow: Fylgjast með
follow_request: 'Þú sendir beiðni um að fylgjast með til:'
following: 'Tókst! Þú ert núna að fylgjast með:'
post_follow:
@@ -731,6 +728,7 @@ is:
add_new: Bæta við nýju
errors:
limit: Þú ert þegar búin/n að gefa hámarksfjölda myllumerkja aukið vægi
+ hint_html: "Hvað eru myllumerki með aukið vægi? Þau eru birt áberandi á opinbera notandasniðinu þínu og gera fólki kleift að fletta í gegnum opinberu færslurnar þínar sérstaklega undir þessum myllumerkjum. Þau eru frábær aðferð við að halda utan um skapandi vinnu eða langtíma verkefni."
filters:
contexts:
home: Heimatímalína
@@ -741,6 +739,7 @@ is:
title: Breyta síu
errors:
invalid_context: Ekkert eða ógilt samhengi var gefið
+ invalid_irreversible: Óendurkræf síun virkar bara í sambandi við heimasvæði eða tilkynningar
index:
delete: Eyða
empty: Þú ert ekki með neinar síur.
@@ -770,6 +769,11 @@ is:
authorize_connection_prompt: Auðkenna dulkóðaða tengingu?
errors:
failed: Dulrituð tenging mistókst, endilega reyndu aftur frá %{provider}.
+ keybase:
+ invalid_token: Keybase-teikn eru tætigildi undirritana og verða að vera 66 hex-stafir
+ verification_failed: Keybase skilur þetta teikn ekki sem undirritun Keybase-notandans %{kb_username}. Prófaðu aftur í Keybase.
+ wrong_user: Get ekki búið til sannvottun fyrir %{proving} á meðan skráð er inn sem %{current}. Skráðu inn sem %{proving} og prófaðu aftur.
+ explanation_html: Hér geturðu tengt dulritað önnur auðkenni þín, eins og t.d. Keybase-notandasnið. Þetta gerir öðru fólki kleift að senda þér dulrituð skilaboð og að treysta efni sem þú sendir þeim.
i_am_html: Ég er %{username} á %{service}.
identity: Auðkenni
inactive: Óvirkt
@@ -783,10 +787,12 @@ is:
merge_long: Halda fyrirliggjandi færslum og bæta við nýjum
overwrite: Skrifa yfir
overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju
+ preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar.
+ success: Það tókst að senda inn gögnin þín og verður unnið með þau þegar færi gefst
types:
blocking: Listi yfir útilokanir
domain_blocking: Listi yfir útilokanir léna
- following: Listi yfir fylgjendur
+ following: Listi yfir þá sem fylgst er með
muting: Listi yfir þagganir
upload: Senda inn
in_memoriam_html: Minning.
@@ -844,9 +850,11 @@ is:
backreference_required: Það verður fyrst að stilla nýja aðganginn til að bakvísa á þennan aðgang
before: 'Áður en haldið er áfram, skaltu lesa þessa minnispunkta gaumgæfilega:'
cooldown: Eftir yfirfærslu/flutning kemur kælingartímabil á meðan þú getur ekki flutt þig aftur
+ disabled_account: Núverandi aðgangur þinn verður ekki nothæfur að fullu eftir þetta. Hinsvegar muntu geta flutt út gögn af honum og einnig endurvirkjað hann.
followers: Þessi aðgerð mun flytja alla fylgjendur af núverandi aðgangi yfir á nýja aðganginn
only_redirect_html: Einnig geturðu einungis sett upp endurbeiningu á notandasniðið þitt.
other_data: Engin önnur gögn munu flytjast sjálfvirkt
+ redirect: Notandasnið aðgangsins verður uppfært með athugasemd um endurbeininguna og verður undanþegið frá leitum
moderation:
title: Umsjón
notification_mailer:
@@ -854,6 +862,9 @@ is:
action: Skoða allar tilkynningar
body: Hér er stutt yfirlit yfir þau skilaboð sem þú gætir hafa misst af síðan þú leist inn síðast %{since}
mention: "%{name} minntist á þig í:"
+ new_followers_summary:
+ one: Að auki, þú hefur fengið einn nýjan fylgjanda á meðan þú varst fjarverandi! Húh!
+ other: Að auki, þú hefur fengið %{count} nýja fylgjendur á meðan þú varst fjarverandi! Frábært!
subject:
one: "1 ný tilkynning síðan þú leist inn síðast \U0001F418"
other: "%{count} nýjar tilkynningar síðan þú leist inn síðast \U0001F418"
@@ -873,6 +884,9 @@ is:
title: Ný beiðni um að fylgjast með
mention:
action: Svara
+ body: "%{name} minntist á þig í:"
+ subject: "%{name} minntist á þig"
+ title: Ný tilvísun
reblog:
body: "%{name} endurbirti stöðufærsluna þína:"
subject: "%{name} endurbirti stöðufærsluna þína"
@@ -904,6 +918,7 @@ is:
duration_too_long: er of langt inn í framtíðina
duration_too_short: er of snemma
expired: Könnuninni er þegar lokið
+ invalid_choice: Þessi valkostur er ekki til
over_character_limit: geta ekki verið lengri en %{max} stafir hvert
too_few_options: verður að vera með fleiri en eitt atriði
too_many_options: getur ekki innihaldið meira en %{max} atriði
@@ -928,8 +943,9 @@ is:
status: Staða aðgangs
remote_follow:
acct: Settu inn notandanafn@lén þaðan sem þú vilt vera virk/ur
+ missing_resource: Gat ekki fundið endurbeiningarslóðina fyrir notandaaðganginn þinn
no_account_html: Ertu ekki með aðgang? Þú getur nýskráð þig hér
- proceed: Halda áfram í að fylgja
+ proceed: Halda áfram í að fylgjast með
prompt: 'Þú ætlar að fara að fylgjast með:'
reason_html: "Hvers vegna er þetta skref nauðsynlegt? %{instance}
er ekki endilega netþjónninn þar sem þú ert skráð/ur, þannig að við verðum að endurbeina þér á heimaþjóninn þinn fyrst."
remote_interaction:
@@ -998,7 +1014,7 @@ is:
development: Þróun
edit_profile: Breyta notandasniði
export: Útflutningur gagna
- featured_tags: Myllumerki í umræðunni
+ featured_tags: Myllumerki með aukið vægi
identity_proofs: Sannanir á auðkenni
import: Flytja inn
import_and_export: Inn- og útflutningur
@@ -1148,21 +1164,32 @@ is:
default: "%d. %b, %Y, %H:%M"
month: "%b %Y"
two_factor_authentication:
+ code_hint: Settu inn kóðann sem auðkenningarforritið útbjó til staðfestingar
+ description_html: Ef þú virkjar tvíþátta auðkenningu mun innskráning krefjast þess að þú hafir símann þinn við hendina, með honum þarf að útbúa öryggisteikn sem þú þarft að setja inn.
disable: Gera óvirkt
enable: Virkja
enabled: Tveggja-þátta auðkenning er virk
enabled_success: Það tókst að virkja tveggja-þátta auðkenningu
generate_recovery_codes: Útbúa endurheimtukóða
+ instructions_html: "Skannaðu þennar QR-kóða inn í Google Authenticator eða álíka TOTP-forrit á símanum þínum. Héðan í frá mun það forrit útbúa teikn sem þú verður að setja inn til að geta skráð þig inn."
+ lost_recovery_codes: Endurheimtukóðar gera þér kleift að fá aftur samband við notandaaðganginn þinn ef þú tapar símanum þínum. Ef þú aftur hefur tapað endurheimtukóðunum, geturðu endurgert þá hér. Gömlu endurheimtukóðarnir verða þá ógiltir.
+ manual_instructions: 'Ef þú getur ekki skannað QR-kóðann og verður að setja hann inn handvirkt, þá er hér leyniorðið á textaformi:'
recovery_codes: Kóðar fyrir endurheimtingu öryggisafrits
+ recovery_codes_regenerated: Það tókst að endurgera endurheimtukóða
+ recovery_instructions_html: Ef þú tapar símanum þínum geturðu notað einn af endurheimtukóðunum hér fyrir neðan til að fá aftur samband við notandaaðganginn þinn. Geymdu endurheimtukóðana á öruggum stað. Sem dæmi gætirðu prentað þá út og geymt með öðrum mikilvægum skjölum.
setup: Setja upp
wrong_code: Kóðinn sem þú settir inn er ógildur! Eru klukkur netþjónsins og tækisins réttar?
user_mailer:
backup_ready:
+ explanation: Þú baðst um fullt öryggisafrit af Mastodon notandaaðgangnum þínum. Það er núna tilbúið til niðurhals!
subject: Safnskráin þín er tilbúin til niðurhals
title: Taka út í safnskrá
warning:
explanation:
+ disable: Á meðan aðgangurinn þinn er frystur, eru gögn aðgangsins ósnert, en þú getur ekki framkvæmt neinar aðgerðir fyrr en honum hefur verið aflæst.
+ silence: Á meðan aðgangurinn þinn er takmarkaður, mun aðeins fólk sem þegar fylgist með þér sjá tístin þín á þessum vefþjóni, auk þess sem lokað gæti verið á þig á ýmsum opinberum listum. Aftur á móti geta aðrir gerst fylgjendur þínir handvirkt.
suspend: Aðgangurinn þinn hefur verið settur í biðstöðu, öll þín tíst og innsent myndefni hafa verið óafturkræft fjarlægð af þessum vefþjóni, sem og af þeim vefþjónum þar sem þú áttir þér fylgjendur.
+ get_in_touch: Þú getur svarað þessum tölvupósti til að setja þig í samband við umsjónarmenn %{instance}.
review_server_policies: Yfirfara reglur vefþjónsins
statuses: 'Sérstaklega fyrir:'
subject:
@@ -1177,17 +1204,28 @@ is:
suspend: Notandaaðgangur í bið
welcome:
edit_profile_action: Setja upp notandasnið
+ edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að senda inn auðkennismynd, síðuhaus, breytt birtingarnafninu þínu og ýmislegt fleira. Ef þú vilt yfirfara nýja fylgjendur áður en þeim er leyft að fylgjast með þér geturðu læst aðgangnum þínum.
explanation: Hér eru nokkrar ábendingar til að koma þér í gang
final_action: Byrjaðu að skrifa
+ final_step: 'Byrjaðu að tjá þig! Jafnvel án fylgjenda geta aðrir séð opinberar færslur frá þér, til dæmis á staðværu tímalínunni og í myllumerkjum. Þú gætir jafnvel viljað kynna þig með myllumerkinu #introductions.'
+ full_handle: Fullt auðkenni þitt
+ full_handle_hint: Þetta er það sem þú myndir gefa upp við vini þína svo þeir geti sent þér skilaboð eða fylgst með þér af öðrum netþjóni.
review_preferences_action: Breyta kjörstillingum
+ review_preferences_step: Gakktu úr skugga um að kjörstillingarnar séu eins og þú vilt hafa þær, eins og t.d. hvaða tölvupóst þú vilt fá, eða hvaða stig friðhelgi þú vilt að færslurnar þínar hafi sjálfgefið. Ef þú hefur ekkert á móti sjónrænu áreiti geturðu virkjað sjálvirka spilun GIF-hreyfimynda.
subject: Velkomin í Mastodon
+ tip_federated_timeline: Sameiginlega tímalínan er færibandasýn á Mastodon netkerfið. En hún inniheldur bara fólk sem nágrannar þínir eru áskrifendur að, þannig að hún er ekki tæmandi.
+ tip_following: Sjálfgefið er að þú fylgist með stjórnanda eða stjórnendum vefþjónsins. Til að finna fleira áhugavert fólk ættirðu að kíkja á staðværu og sameiginlegu tímalínurnar.
tip_local_timeline: Staðværa tímalínan er færibandasýn á allt fólkið á %{instance}. Þetta eru þínir næstu nágrannar!
+ tip_mobile_webapp: Ef farsímavafrinn býður þér að bæta Mastodon á heimaskjáinn þinn, muntu geta tekið á móti ýti-tilkynningum. Það virkar á ýmsa vegu eins og um uppsett forrit sé að ræða!
tips: Ábendingar
title: Velkomin/n um borð, %{name}!
users:
follow_limit_reached: Þú getur ekki fylgst með fleiri en %{limit} aðilum
invalid_email: Tölvupóstfangið er ógilt
invalid_otp_token: Ógildur tveggja-þátta kóði
+ otp_lost_help_html: Ef þú hefur misst aðganginn að hvoru tveggja, geturðu sett þig í samband við %{email}
+ seamless_external_login: Innskráning þín er í gegnum utanaðkomandi þjónustu, þannig að stillingar fyrir lykilorð og tölvupóst eru ekki aðgengilegar.
signed_in_as: 'Skráð inn sem:'
verification:
+ explanation_html: 'Þú getur vottað að þú sért eigandi og ábyrgur fyrir tenglunum í lýsigögnum notandasniðsins þíns. Til að það virki, þurfa vefsvæðin sem vísað er í að innihalda tengil til baka í Mastodon-notandasniðið. Tengillinn sem vísar til baka verður að vera með rel="me"
eigindi. Textinn í tenglinum skiptir ekki máli. Hérna er dæmi:'
verification: Sannprófun
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 7bce8d3d6e..a7e811e22e 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -344,9 +344,6 @@ it:
create: Aggiungi dominio
title: Nuova voce della lista nera delle email
title: Lista nera email
- followers:
- back_to_account: Torna all'account
- title: Seguaci di %{acct}
instances:
by_domain: Dominio
delivery_available: Distribuzione disponibile
@@ -922,6 +919,7 @@ it:
duration_too_long: è troppo lontano nel futuro
duration_too_short: è troppo presto
expired: Il sondaggio si è già concluso
+ invalid_choice: L'opzione di voto scelta non esiste
over_character_limit: non possono essere più lunghi di %{max} caratteri ciascuno
too_few_options: deve avere più di un elemento
too_many_options: non può contenere più di %{max} elementi
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index e26fe3942f..ce15f4195b 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -224,6 +224,8 @@ ja:
update_status: "%{name} さんが %{target} さんの投稿を更新しました"
deleted_status: "(削除済)"
title: 操作履歴
+ announcements:
+ title: 告知
custom_emojis:
assign_category: カテゴリーを割り当て
by_domain: ドメイン
@@ -339,9 +341,6 @@ ja:
create: ドメインを追加
title: メールアドレス用ブラックリスト新規追加
title: メールブラックリスト
- followers:
- back_to_account: 戻る
- title: "%{acct}さんのフォロワー"
instances:
by_domain: ドメイン
delivery_available: 配送可能
@@ -750,6 +749,8 @@ ja:
all: すべて
changes_saved_msg: 正常に変更されました!
copy: コピー
+ delete: 削除
+ edit: 編集
no_batch_actions_available: このページに一括操作はありません
order_by: 並び順
save_changes: 変更を保存
@@ -910,6 +911,7 @@ ja:
duration_too_long: が長過ぎます
duration_too_short: が短過ぎます
expired: アンケートは既に終了しました
+ invalid_choice: 選択された項目は存在しません
over_character_limit: は%{max}文字より長くすることはできません
too_few_options: は複数必要です
too_many_options: は%{max}個までです
diff --git a/config/locales/kab.yml b/config/locales/kab.yml
index 6297937366..5cedbd3645 100644
--- a/config/locales/kab.yml
+++ b/config/locales/kab.yml
@@ -1,7 +1,7 @@
---
kab:
about:
- about_hashtag_html: Tigi d tiberraḥin tizuyaz, ɣur-sent #%{hashtag}. Tzemreḍ ad tesdemreḍ akked yid-sent ma tesɛiḍ amiḍan deg kra n umḍiq deg fediverse.
+ about_hashtag_html: Tigi d tiberraḥin tizuyaz, γur-sent #%{hashtag}. Tzemreḍ ad tesdemreḍ akked yid-sent ma tesɛiḍ amiḍan deg kra n umḍiq deg fediverse.
about_mastodon_html: 'Azeṭṭa ametti n uzekka: Ulac deg-s asussen, ulac taɛessast n tsuddiwin fell-ak, yebna ɣef leqder d ttrebga, daɣen d akeslemmas! Akked Mastudun, isefka-inek ad qimen inek!'
about_this: Ɣef
active_count_after: yekker
@@ -215,9 +215,6 @@ kab:
create: Rnu taγult
title: Timerna n taɣult tamaynut n imayl ɣer tebdart taberkant
title: Tabdart taberkant n imayl
- followers:
- back_to_account: Uγal γer umiḍan
- title: Imeḍfaṛen n %{acct}
instances:
by_domain: Taγult
delivery_available: Yella usiweḍ
@@ -259,6 +256,9 @@ kab:
all: Ɣef medden akk
disabled: Ɣef yiwen ala
users: Ɣef yimseqdacen idiganen i yeqqnen
+ site_description:
+ title: Aglam n uqeddac
+ site_title: Isem n uqeddac
title: Iγewwaṛen n usmel
statuses:
batch:
diff --git a/config/locales/kk.yml b/config/locales/kk.yml
index 4ef87a5bc5..74c486ef60 100644
--- a/config/locales/kk.yml
+++ b/config/locales/kk.yml
@@ -344,9 +344,6 @@ kk:
create: Add dоmain
title: New e-mail blаcklist entry
title: E-mail қаратізімі
- followers:
- back_to_account: Back To Accоunt
- title: "%{acct} оқырмандары"
instances:
by_domain: Domаin
delivery_available: Жеткізу қол жетімді
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 25bb714ef9..21ea5b554b 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -341,9 +341,6 @@ ko:
create: 차단 규칙 생성
title: 새 이메일 도메인 차단
title: Email 도메인 차단
- followers:
- back_to_account: 계정으로 돌아가기
- title: "%{acct}의 팔로워"
instances:
by_domain: 도메인
delivery_available: 전송 가능
@@ -924,6 +921,7 @@ ko:
dormant: 휴면
followers: 팔로워
following: 팔로잉
+ invited: 초대됨
last_active: 마지막 활동
most_recent: 가장 최근
moved: 이동함
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index 41f0284d80..9af094c019 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -261,9 +261,6 @@ lt:
create: Pridėto domeną
title: Naujas el pašto juodojo sąrašo įtraukimas
title: El pašto juodasis sąrašas
- followers:
- back_to_account: Atgal Į Paskyrą
- title: "%{acct} Sekėjai"
instances:
by_domain: Domenas
delivery_available: Pristatymas galimas
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 5975ba68e7..092a46d57a 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -343,9 +343,6 @@ nl:
create: Blokkeren
title: Nieuw e-maildomein blokkeren
title: E-maildomeinen blokkeren
- followers:
- back_to_account: Terug naar account
- title: Volgers van %{acct}
instances:
by_domain: Domein
delivery_available: Bezorging is mogelijk
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index 4eb8c69b38..c61523efe8 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -331,9 +331,6 @@ nn:
create: Legg til domene
title: Ny blokkeringsoppføring av e-postdomene
title: Blokkerte e-postadresser
- followers:
- back_to_account: Tilbake til konto
- title: "%{acct} sine fylgjarar"
instances:
by_domain: Domene
delivery_available: Levering er tilgjengelig
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 51d0eb1bde..12772f335f 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -317,9 +317,6 @@
create: Legg til domene
title: Ny blokkeringsoppføring av e-postdomene
title: Blokkering av e-postdomene
- followers:
- back_to_account: Tilbake til kontoen
- title: "%{acct} sine følgere"
instances:
by_domain: Domene
delivery_available: Levering er tilgjengelig
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 985d2a311f..ea0729f747 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -331,9 +331,6 @@ oc:
create: Crear un blocatge
title: Nòu blocatge de domeni de corrièl
title: Blocatge de domeni de corrièl
- followers:
- back_to_account: Tornar al compte
- title: Seguidors de %{acct}
instances:
by_domain: Domeni
delivery_available: Liurason disponibla
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index e243162e87..774319a5a8 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -346,9 +346,6 @@ pl:
create: Utwórz blokadę
title: Nowa blokada domeny e-mail
title: Blokowanie domen e-mail
- followers:
- back_to_account: Wróć do konta
- title: Śledzący %{acct}
instances:
by_domain: Domena
delivery_available: Doręczanie jest dostępne
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 7fe2c8946e..fb741b0d04 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -344,9 +344,6 @@ pt-BR:
create: Adicionar domínio
title: Novo domínio de e-mail bloqueado
title: Lista de bloqueio de domínios de e-mail
- followers:
- back_to_account: Voltar para a conta
- title: Seguidores de %{acct}
instances:
by_domain: Domínio
delivery_available: Envio disponível
@@ -375,6 +372,8 @@ pt-BR:
title: Convites
pending_accounts:
title: Contas pendentes (%{count})
+ relationships:
+ title: Relações de %{acct}
relays:
add_new: Adicionar novo repetidor
delete: Excluir
@@ -734,6 +733,7 @@ pt-BR:
hint_html: "O que são hashtags em destaque? Elas são mostradas no seu perfil público e permitem que as pessoas acessem seus toots públicos que contenham especificamente essas hashtags. São uma excelente ferramenta para acompanhar os trabalhos criativos ou os projetos de longo prazo."
filters:
contexts:
+ account: Perfis
home: Página inicial
notifications: Notificações
public: Linhas públicas
@@ -934,6 +934,7 @@ pt-BR:
dormant: Inativo
followers: Seguidores
following: Seguindo
+ invited: Convidado
last_active: Última atividade
most_recent: Mais recente
moved: Mudou-se
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 8628c5774d..deee432877 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -344,9 +344,6 @@ pt-PT:
create: Adicionar domínio
title: Novo bloqueio de domínio de email
title: Bloqueio de Domínio de Email
- followers:
- back_to_account: Voltar à conta
- title: Seguidores de %{acct}
instances:
by_domain: Domínio
delivery_available: Entrega disponível
@@ -375,6 +372,8 @@ pt-PT:
title: Convites
pending_accounts:
title: Contas pendentes (%{count})
+ relationships:
+ title: Relações de %{acct}
relays:
add_new: Adicionar novo repetidor
delete: Apagar
@@ -734,6 +733,7 @@ pt-PT:
hint_html: "O que são hashtags em destaque? Elas são exibidas de forma bem visível no seu perfil público e permitem que as pessoas consultem as suas publicações públicas especificamente sob essas hashtags. São uma ótima ferramenta para manter o controlo de trabalhos criativos ou projetos de longo prazo."
filters:
contexts:
+ account: Perfis
home: Cronologia inicial
notifications: Notificações
public: Cronologias públicas
@@ -934,6 +934,7 @@ pt-PT:
dormant: Inativo
followers: Seguidores
following: A seguir
+ invited: Convidado
last_active: Última atividade
most_recent: Mais recente
moved: Mudou-se
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index a62995721e..bd019ee178 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -140,7 +140,7 @@ ru:
remote: Удаленные
title: Размещение
login_status: Статус учётной записи
- media_attachments: Мультимедийные вложения
+ media_attachments: Файлы мультимедиа
memorialize: Сделать мемориалом
moderation:
active: Действующие
@@ -359,9 +359,6 @@ ru:
create: Создать блокировку
title: Новая блокировка по домену
title: Блокировка e-mail доменов
- followers:
- back_to_account: Вернуться к учётной записи
- title: Подписчики пользователя %{acct}
instances:
by_domain: Домен
delivery_available: Доставка возможна
@@ -392,6 +389,8 @@ ru:
title: Приглашения
pending_accounts:
title: Ожидающие учетные записи (%{count})
+ relationships:
+ title: Связи %{acct}
relays:
add_new: Добавить ретранслятор
delete: Удалить
@@ -550,11 +549,11 @@ ru:
deleted: Удалено
failed_to_execute: Не удалось выполнить
media:
- title: Файлы медиа
- no_media: Без медиа
+ title: Файлы мультимедиа
+ no_media: Без файлов
no_status_selected: Ничего не изменилось, так как ни один пост не был выделен
title: Посты пользователя
- with_media: С медиа
+ with_media: С файлами
tags:
accounts_today: Уникальных использований за сегодня
accounts_week: Уникальных использований за эту неделю
@@ -755,6 +754,7 @@ ru:
hint_html: "Особенные хэштеги отображаются в вашем профиле и позволяют людям просматривать ваши посты, отмеченные ими. Это отличный инструмент для отслеживания долгосрочных проектов и творческих работ."
filters:
contexts:
+ account: Посты в профилях
home: Домашняя лента
notifications: Уведомления
public: Публичные ленты
@@ -963,6 +963,7 @@ ru:
dormant: Заброшенная
followers: Подписчики
following: Подписки
+ invited: Приглашённые
last_active: По последней активности
most_recent: По недавности
moved: Мигрировавшая
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index e3355e8c53..f7a38a92c4 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -42,7 +42,7 @@ ar:
setting_use_pending_items: إخفاء تحديثات الخط وراء نقرة بدلًا مِن التمرير التلقائي للتدفق
username: اسم المستخدم الخاص بك سوف يكون فريدا مِن نوعه على %{domain}
featured_tag:
- name: 'رُبَّما تريد·ين استخدام واحد مِن هذه:'
+ name: 'رُبَّما تريد·ين استخدام واحد مِن بين هذه:'
form_challenge:
current_password: إنك بصدد الدخول إلى منطقة آمنة
imports:
@@ -123,7 +123,7 @@ ar:
setting_theme: سمة الموقع
setting_trends: اعرض ما يُتداوَل اليوم
setting_unfollow_modal: إظهار مربع حوار للتأكيد قبل إلغاء متابعة أي حساب
- setting_use_blurhash: أظهر ألوانًا متدرّجة على الوسائط الحساسة
+ setting_use_blurhash: أظهر ألوانًا متدرّجة على الوسائط المَخفية
setting_use_pending_items: الوضع البطيء
severity: القوّة
type: صيغة الاستيراد
diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml
index 3fae058301..d43ab04fe1 100644
--- a/config/locales/simple_form.ca.yml
+++ b/config/locales/simple_form.ca.yml
@@ -31,7 +31,7 @@ ca:
locale: El llenguatge de l’interfície d’usuari, els correus i les notificacions push
locked: Requereix que aprovis manualment els seguidors
password: Utilitza com a mínim 8 caràcters
- phrase: Es combinarà independentment del format en el text o l'avís de contingut del bram
+ phrase: Es combinarà independentment del format en el text o l'avís de contingut del tut
scopes: A quines API es permetrà a l'aplicació accedir. Si selecciones un àmbit d'alt nivell, no cal que seleccionis un d'individual.
setting_aggregate_reblogs: No mostra els nous impulsos dels tuts que ja s'han impulsat recentment (només afecta als impulsos nous rebuts)
setting_default_sensitive: Els mèdia sensibles estan ocults per defecte i es poden revelar amb un clic
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index 84787a6c50..0863cc4a85 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -14,6 +14,12 @@ de:
text_html: Optional. Du kannst Beitragssyntax nutzen. Du kannst Warnungsvorlagen benutzen um Zeit zu sparen
type_html: Wähle aus, was du mit %{acct} machen möchtest
warning_preset_id: Optional. Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen
+ announcement:
+ all_day: Wenn aktiviert werden nur die Daten des Zeitraums angezeigt
+ ends_at: Optional. Die Ankündigung wird zu diesem Zeitpunkt automatisch zurückgezogen
+ scheduled_at: Leer lassen um die Ankündigung sofort zu veröffentlichen
+ starts_at: Optional. Falls deine Ankündigung an einen bestimmten Zeitraum gebunden ist
+ text: Du kannst die Toot-Syntax verwenden. Bitte beachte den Platz, den die Ankündigung auf dem Bildschirm des Benutzers einnehmen wird
defaults:
autofollow: Leute, die sich über deine Einladung registrieren, werden dir automatisch folgen
avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert
@@ -83,6 +89,12 @@ de:
silence: Stummschalten
suspend: Deaktivieren und Benutzerdaten unwiderruflich löschen
warning_preset_id: Benutze eine Warnungsvorlage
+ announcement:
+ all_day: Ganztägiges Ereignis
+ ends_at: Ereignisende
+ scheduled_at: Veröffentlichung planen
+ starts_at: Beginn des Ereignisses
+ text: Ankündigung
defaults:
autofollow: Eingeladene Nutzer sollen dir automatisch folgen
avatar: Profilbild
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index 8386c8cf15..2f08209060 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -14,6 +14,12 @@ en:
text_html: Optional. You can use toot syntax. You can add warning presets to save time
type_html: Choose what to do with %{acct}
warning_preset_id: Optional. You can still add custom text to end of the preset
+ announcement:
+ all_day: When checked, only the dates of the time range will be displayed
+ ends_at: Optional. Announcement will be automatically unpublished at this time
+ scheduled_at: Leave blank to publish the announcement immediately
+ starts_at: Optional. In case your announcement is bound to a specific time range
+ text: You can use toot syntax. Please be mindful of the space the announcement will take up on the user's screen
defaults:
autofollow: People who sign up through the invite will automatically follow you
avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px
@@ -88,6 +94,12 @@ en:
silence: Silence
suspend: Suspend and irreversibly delete account data
warning_preset_id: Use a warning preset
+ announcement:
+ all_day: All-day event
+ ends_at: End of event
+ scheduled_at: Schedule publication
+ starts_at: Begin of event
+ text: Announcement
defaults:
autofollow: Invite to follow your account
avatar: Avatar
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index da39046808..20467dba4d 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -7,11 +7,11 @@ es:
account_migration:
acct: Especifique el nombre de usuario@dominio de la cuenta a la cual se desea migrar
account_warning_preset:
- text: Puede usar sintaxis de barritadas, como URLs, etiquetas y menciones
+ text: Puede usar sintaxis de toots, como URLs, hashtags y menciones
admin_account_action:
- include_statuses: El usuario verá qué bramidos han causado la acción de moderación o advertencia
+ include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia
send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta
- text_html: Opcional. Puede usar sintaxis de bramidos. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo
+ text_html: Opcional. Puede usar sintaxis de toots. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo
type_html: Elige qué hacer con %{acct}
warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida
defaults:
@@ -27,20 +27,20 @@ es:
fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil
header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
inbox_url: Copia la URL de la página principal del relés que quieres utilizar
- irreversible: Las bramidos filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
+ irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
locale: El idioma de la interfaz de usuario, correos y notificaciones push
locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores
password: Utilice al menos 8 caracteres
- phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una bramido
+ phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot
scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
- setting_aggregate_reblogs: No mostrar nuevas rebramidos para las bramidos que han sido recientemente rebramidos (sólo afecta a las rebramidos recibidos recientemente)
+ setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente)
setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click
setting_display_media_default: Ocultar contenido multimedia marcado como sensible
setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil
setting_noindex: Afecta a tu perfil público y páginas de estado
- setting_show_application: La aplicación que utiliza usted para publicar bramidos se mostrará en la vista detallada de sus bramidos
+ setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots
setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
setting_use_pending_items: Ocultar actualizaciones cronológicas tras un clic en lugar de desplazar automáticamente la ristra
username: Tu nombre de usuario será único en %{domain}
@@ -60,7 +60,7 @@ es:
tag:
name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
user:
- chosen_languages: Cuando se marca, solo se mostrarán las barritadas en los idiomas seleccionados en las cronologías públicas
+ chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos
labels:
account:
fields:
@@ -73,7 +73,7 @@ es:
account_warning_preset:
text: Texto predefinido
admin_account_action:
- include_statuses: Incluir en el correo electrónico a los bramidos denunciados
+ include_statuses: Incluir en el correo electrónico a los toots denunciados
send_email_notification: Notificar al usuario por correo electrónico
text: Aviso personalizado
type: Acción
@@ -112,21 +112,21 @@ es:
setting_advanced_layout: Habilitar interfaz web avanzada
setting_aggregate_reblogs: Agrupar rebarritadas en las cronologías
setting_auto_play_gif: Reproducir automáticamente los GIFs animados
- setting_boost_modal: Mostrar ventana de confirmación antes de un Rebramido
- setting_crop_images: Recortar a 16x9 las imágenes de los bramidos no expandidos
+ setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot
+ setting_crop_images: Recortar a 16x9 las imágenes de los toots no expandidos
setting_default_language: Idioma de publicación
setting_default_privacy: Privacidad de publicaciones
setting_default_sensitive: Marcar siempre imágenes como sensibles
- setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un bramido
+ setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot
setting_display_media: Visualización multimedia
setting_display_media_default: Por defecto
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
- setting_expand_spoilers: Siempre expandir los bramidos marcados con advertencias de contenido
+ setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido
setting_hide_network: Ocultar tu red
setting_noindex: Excluirse del indexado de motores de búsqueda
setting_reduce_motion: Reducir el movimiento de las animaciones
- setting_show_application: Mostrar aplicación usada para publicar bramidos
+ setting_show_application: Mostrar aplicación usada para publicar toots
setting_system_font_ui: Utilizar la tipografía por defecto del sistema
setting_theme: Tema del sitio
setting_trends: Mostrar las tendencias de hoy
@@ -162,7 +162,7 @@ es:
listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
name: Etiqueta
trendable: Permitir que esta etiqueta aparezca bajo tendencias
- usable: Permitir a las barritadas usar esta etiqueta
+ usable: Permitir a los toots usar esta etiqueta
'no': 'No'
recommended: Recomendado
required:
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 7b9e466ee3..0e5332f1e5 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -14,6 +14,12 @@ fr:
text_html: Optionnel. Vous pouvez utilisez la syntaxe des pouets. Vous pouvez ajouter des présélections d’attention pour économiser du temps
type_html: Choisir que faire avec %{acct}
warning_preset_id: Optionnel. Vous pouvez toujours ajouter un texte personnalisé à la fin de la présélection
+ announcement:
+ all_day: Si coché, seules les dates de l’intervalle de temps seront affichées
+ ends_at: Optionnel. L’annonce sera automatiquement dépubliée à ce moment
+ scheduled_at: Laisser vide pour publier l’annonce immédiatement
+ starts_at: Optionnel. Si votre annonce est liée à une période spécifique
+ text: Vous pouvez utiliser la syntaxe d’un pouet. Veuillez prendre en compte l’espace que l'annonce prendra sur l’écran de l'utilisateur
defaults:
autofollow: Les personnes qui s’inscrivent grâce à l’invitation vous suivront automatiquement
avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px
@@ -83,6 +89,12 @@ fr:
silence: Masquer
suspend: Suspendre et effacer les données du compte de manière irréversible
warning_preset_id: Utiliser un modèle d’avertissement
+ announcement:
+ all_day: Événement de toute la journée
+ ends_at: Fin de l’événement
+ scheduled_at: Planifier la publication
+ starts_at: Début de l’événement
+ text: Annonce
defaults:
autofollow: Invitation à suivre votre compte
avatar: Image de profil
diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml
index 0fdf3e74e2..0af6bd690a 100644
--- a/config/locales/simple_form.gl.yml
+++ b/config/locales/simple_form.gl.yml
@@ -14,6 +14,12 @@ gl:
text_html: Optativo. Pode utilizar formato no toot. Pode engadir avisos preestablecidos para aforrar tempo
type_html: Escolla que facer con %{acct}
warning_preset_id: Optativo. Poderá engadir texto persoalizado ao final do preestablecido
+ announcement:
+ all_day: Cando se marca, só serán amosadas as datas do intre de tempo
+ ends_at: Opcional. O anuncio non se publicará de xeito automático neste intre
+ scheduled_at: Déixao baleiro para publicar o anuncio de xeito inmediato
+ starts_at: Opcional. No caso de que o teu anuncio estea vinculado a un intre de tempo específico
+ text: Podes empregar a sintaxe do toot. Ten en conta o espazo que ocupará o anuncio na pantalla do usuario
defaults:
autofollow: As persoas que se conectaron a través de un convite seguirana automáticamente a vostede
avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px
@@ -83,6 +89,12 @@ gl:
silence: Acalar
suspend: Suspender e eliminar irreversiblemente datos da conta
warning_preset_id: Utilizar un aviso preestablecido
+ announcement:
+ all_day: Acontecemento diario
+ ends_at: Final do acontecemento
+ scheduled_at: Publicación programada
+ starts_at: Comezo do acontecemento
+ text: Anuncio
defaults:
autofollow: Convide a seguir a súa conta
avatar: Avatar
diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml
index c6a89fb409..b7aabd5d14 100644
--- a/config/locales/simple_form.is.yml
+++ b/config/locales/simple_form.is.yml
@@ -6,31 +6,61 @@ is:
acct: Tilgreindu notandanafn@lén á notandaaðgangnum sem þú vilt flytjast frá
account_migration:
acct: Tilgreindu notandanafn@lén á notandaaðgangnum sem þú vilt flytjast til
+ account_warning_preset:
+ text: Þú getur notað sömu skilgreiningar og fyrir tíst, svo sem URL-slóðir, myllumerki og tilvísanir
admin_account_action:
+ include_statuses: Notandinn mun sjá hvaða tíst hafa valdið viðbrögðum umsjónarmanns eða aðvörun kerfisins
+ send_email_notification: Notandinn mun fá útskýringar á því hvað gerðist með notandaaðganginn hans
+ text_html: Valfrjálst. Þú getur notað sömu skilgreiningar og fyrir tíst. Þú getur bætt inn forstilltum aðvörunum til að spara tíma
type_html: Veldu hvað eigi að gera við %{acct}
+ warning_preset_id: Valkvætt. Þú getur ennþá bætt sérsniðnum texta við enda forstillinga
defaults:
+ autofollow: Fólk sem skráir sig í gegnum boðið mun sjálfkrafa fylgjast með þér
avatar: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
bot: Þessi aðgangur er aðallega til að framkvæma sjálfvirkar aðgerðir og gæti verið án þess að hann sé vaktaður reglulega
- current_password: Í öryggisskyni skaltu setja inn lykiloðið fyrir þennan notandaaðgang
+ context: Eitt eða fleiri samhengi þar sem sían ætti að gilda
+ current_password: Í öryggisskyni skaltu setja inn lykilorðið fyrir þennan notandaaðgang
+ current_username: Til að staðfesta skaltu setja inn notandanafnið fyrir þennan notandaaðgang
+ digest: Er aðeins sent eftir lengri tímabil án virkni og þá aðeins ef þú hefur fengið persónuleg skilaboð á meðan þú hefur ekki verið á línunni
discoverable: Persónusniðamappan er önnur leið til að láta notandaaðganginn þinn ná til fleiri lesenda
email: Þú munt fá sendan staðfestingarpóst
+ fields: Þú getur birt allt að 4 atriði sem töflu á notandasniðinu þínu
header: PNG, GIF eða JPG. Mest %{size}. Verður smækkað í %{dimensions}px
+ inbox_url: Afritaðu slóðina af forsíðu endurvarpans sem þú vilt nota
+ irreversible: Síuð tíst munu hverfa óendurkræft, jafnvel þó sían sé seinna fjarlægð
locale: Tungumál notandaviðmótsins, tölvupósts og ýti-tilkynninga
locked: Krefst þess að þú samþykkir fylgjendur handvirkt
password: Notaðu minnst 8 stafi
+ phrase: Verður notað til samsvörunar burtséð frá stafstöðu texta eða viðvörunar vegna efnis í tísti
+ scopes: Að hvaða API-kerfisviðmótum forritið fær aðgang. Ef þú velur efsta-stigs svið, þarftu ekki að gefa einstakar heimildir.
+ setting_aggregate_reblogs: Ekki sýna nýjar endurbirtingar á tístum sem hafa nýlega verið endurbirt (hefur bara áhrif á ný-mótteknar endurbirtingar)
setting_default_sensitive: Viðkvæmt myndefni er sjálfgefið falið og er hægt að birta með smelli
setting_display_media_default: Fela myndefni sem merkt er viðkvæmt
setting_display_media_hide_all: Alltaf fela allt myndefni
setting_display_media_show_all: Alltaf birta myndefni sem merkt er viðkvæmt
- setting_noindex: Hefur áhrip á opinbera notandasniðið þitt og stöðusíður
+ setting_hide_network: Hverjum þú fylgist með og hverjir fylgjast með þér verður ekki birt á notandasniðinu þínu
+ setting_noindex: Hefur áhrif á opinbera notandasniðið þitt og stöðusíður
+ setting_show_application: Nafnið á forritinu sem þú notar til að tísta mun birtast í ítarlegri sýn á tístunum þínum
setting_use_blurhash: Litstiglarnir byggja á litunum í földu myndunum, en gera öll smáatriði óskýr
- setting_use_pending_items: Fela uppfærslur tímalínu þar til smellt er í stað þess að hún skruni streyminu sjálfvirkt
+ setting_use_pending_items: Fela uppfærslur tímalínu þar til smellt er, í stað þess að hún skruni streyminu sjálfvirkt
+ username: Notandanafnið þitt verður einstakt á %{domain}
+ whole_word: Þegar stikkorð eða frasi er einungis tölur og bókstafir, verður það aðeins notað ef það samsvarar heilu orði
+ domain_allow:
+ domain: Þetta lén mun geta sótt gögn af þessum vefþjóni og tekið verður á móti innsendum gögnum frá léninu til vinnslu og geymslu
featured_tag:
name: 'Þú gætir viljað nota eitt af þessum:'
+ form_challenge:
+ current_password: Þú ert að fara inn á öryggissvæði
imports:
data: CSV-skrá sem flutt hefur verið út af öðrum Mastodon-þjóni
invite_request:
text: Þetta mun hjálpa okkur við að yfirfara umsóknina þína
+ sessions:
+ otp: 'Settu inn tveggja-þátta kóðann sem farsímaforritið útbjó eða notaðu einn af endurheimtukóðunum þínum:'
+ tag:
+ name: Þú getur aðeins breytt stafstöði mill há-/lágstafa, til gæmis til að gera þetta læsilegra
+ user:
+ chosen_languages: Þegar merkt er við þetta, birtast einungis tíst á völdum tungumálum á opinberum tímalínum
labels:
account:
fields:
@@ -38,6 +68,10 @@ is:
value: Efni
account_alias:
acct: Auðkenni gamla aðgangsins
+ account_migration:
+ acct: Auðkenni nýja aðgangsins
+ account_warning_preset:
+ text: Forstilltur texti
admin_account_action:
include_statuses: Innifela kærð tíst í tölvupóstinum
send_email_notification: Láta notanda vita með tölvupósti
@@ -65,6 +99,7 @@ is:
expires_in: Rennur út eftir
fields: Lýsigögn notandasniðs
header: Síðuhaus
+ inbox_url: URL-slóð á innhólf endurvarpa
irreversible: Fella niður í staðinn fyrir að fela
locale: Tungumál viðmóts
locked: Læsa aðgangi
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 3e2855e588..503610652f 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -83,6 +83,8 @@ ja:
silence: サイレンス
suspend: 停止しアカウントのデータを恒久的に削除する
warning_preset_id: プリセット警告文を使用
+ announcement:
+ text: 告知
defaults:
autofollow: 招待から参加後、あなたをフォロー
avatar: アイコン
@@ -158,7 +160,7 @@ ja:
pending_account: 新しいアカウントの承認が必要な時
reblog: トゥートがブーストされた時
report: 通報を受けた時
- trending_tag: 未審査のハッシュタグが人気の時にメールで通知する
+ trending_tag: 未審査のハッシュタグが人気の時
tag:
listable: 検索とディレクトリへの使用を許可する
name: ハッシュタグ
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index b127bee0f2..b02ee8eca8 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -350,9 +350,6 @@ sk:
create: Pridaj doménu
title: Nový email na zablokovanie
title: Blokované emailové adresy
- followers:
- back_to_account: Späť na účet
- title: Sledovatielia užívateľa %{acct}
instances:
by_domain: Doména
delivery_available: Je v dosahu doručovania
@@ -917,6 +914,7 @@ sk:
duration_too_long: je príliš ďaleko do budúcnosti
duration_too_short: je príliš skoro
expired: Anketa už skončila
+ invalid_choice: Zvolená hlasovacia možnosť neexistuje
over_character_limit: každá nemôže byť dlhšia ako %{max} znakov
too_few_options: musí mať viac ako jednu položku
too_many_options: nemôže zahŕňať viac ako %{max} položiek
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index c078cea1bc..afb928f117 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -320,9 +320,6 @@ sl:
create: Dodaj domeno
title: Nov vnos e-pošte na črni seznam
title: Črni seznam e-pošt
- followers:
- back_to_account: Nazaj na račun
- title: Sledilci od %{acct}
instances:
by_domain: Domena
delivery_available: Na voljo je dostava
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index c4d95a6f75..6a7a945c4e 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -266,9 +266,6 @@ sq:
create: Shtoni përkatësi
title: Zë i ri email në listë bllokimesh
title: Listë bllokimesh email-esh
- followers:
- back_to_account: Mbrapsht Te Llogaria
- title: Ndjekës të %{acct}
instances:
delivery_available: Ka shpërndarje të mundshme
known_accounts:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 23a8266851..c686812157 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -280,9 +280,6 @@ sr:
create: Додај домен
title: Нова ставка е-поштe у црној листи
title: Црна листа E-поште
- followers:
- back_to_account: Назад на налог
- title: "%{acct} Пратиоци"
instances:
delivery_available: Достава је доступна
known_accounts:
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index b94277825f..0094ff06bc 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -328,9 +328,6 @@ sv:
create: Skapa domän
title: Ny E-postdomänblocklistningsinmatning
title: E-postdomänblock
- followers:
- back_to_account: Tillbaka till konto
- title: "%{acct}'s följare"
instances:
by_domain: Domän
moderation:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index b7f4a5f34f..02b8fc97e4 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -306,9 +306,6 @@ th:
create: เพิ่มโดเมน
title: รายการบัญชีดำอีเมลใหม่
title: บัญชีดำอีเมล
- followers:
- back_to_account: กลับไปที่บัญชี
- title: ผู้ติดตามของ %{acct}
instances:
by_domain: โดเมน
known_accounts:
@@ -386,7 +383,10 @@ th:
custom_css:
title: CSS ที่กำหนดเอง
domain_blocks:
+ all: ให้กับทุกคน
+ disabled: ให้กับไม่มีใคร
title: แสดงการปิดกั้นโดเมน
+ users: ให้กับผู้ใช้ในเว็บที่เข้าสู่ระบบ
domain_blocks_rationale:
title: แสดงคำชี้แจงเหตุผล
enable_bootstrap_timeline_accounts:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 1e80315c02..0fa4750bc1 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -6,7 +6,7 @@ tr:
about_this: Bu sunucu hakkında
active_count_after: etkin
active_footnote: Aylık Aktif Kullanıcılar (AAK)
- administered_by: 'Tarafından yönetildi:'
+ administered_by: 'Yöneten:'
api: API
apps: Mobil uygulamalar
apps_platforms: İos, Android ve diğer platformlardaki Mastodon'u kullanın
@@ -344,9 +344,6 @@ tr:
create: Alan adı ekle
title: Yeni e-posta kara liste girişi
title: E-posta kara listesi
- followers:
- back_to_account: Hesaba Geri Dön
- title: "%{acct} Takipçileri"
instances:
by_domain: Alan adı
delivery_available: Teslimat mevcut
@@ -375,6 +372,8 @@ tr:
title: Davetler
pending_accounts:
title: Bekleyen hesaplar (%{count})
+ relationships:
+ title: "%{acct} kişisinin ilişkileri"
relays:
add_new: Yeni aktarıcı ekle
delete: Sil
@@ -692,7 +691,7 @@ tr:
directories:
directory: Profil dizini
explanation: Kullanıcıları ilgi alanlarına göre keşfedin
- explore_mastodon: "%{title} keşfet"
+ explore_mastodon: "%{title} sunucusunu keşfet"
domain_validator:
invalid_domain: geçerli bir alan adı değil
errors:
@@ -721,7 +720,7 @@ tr:
in_progress: Arşivinizi derliyoruz...
request: Arşiv isteği
size: Boyut
- blocks: Blokladıklarınız
+ blocks: Engelledikleriniz
csv: CSV
domain_blocks: Alan adı blokları
lists: Listeler
@@ -734,6 +733,7 @@ tr:
hint_html: "Öne çıkan etiketler nelerdir? Genel profilinizde belirgin bir şekilde görüntülenirler ve kişilerin genel yayınlarınıza özellikle bu etiketler altında göz atmalarına izin verir. Yaratıcı çalışmaları veya uzun vadeli projeleri takip etmek için harika bir araçtır."
filters:
contexts:
+ account: Profiller
home: Ana zaman çizelgesi
notifications: Bildirimler
public: Genel zaman çizelgesi
@@ -934,6 +934,7 @@ tr:
dormant: Atıl
followers: Takipçiler
following: Takip edilenler
+ invited: Davet edildi
last_active: Son aktivite
most_recent: En son
moved: Taşındı
@@ -1215,7 +1216,7 @@ tr:
full_handle_hint: Arkadaşlarınıza, size başka bir sunucudan mesaj atabilmeleri veya sizi takip edebilmeleri için söyleyeceğiniz şey budur.
review_preferences_action: Tercihleri değiştirin
review_preferences_step: Hangi e-postaları almak veya gönderilerinizin varsayılan olarak hangi gizlilik seviyesinde olmasını istediğiniz gibi tercihlerinizi ayarladığınızdan emin olun. Hareket hastalığınız yoksa, GIF otomatik oynatmayı etkinleştirmeyi seçebilirsiniz.
- subject: Mastodon'a hoşgeldiniz
+ subject: Mastodon'a hoş geldiniz
tip_federated_timeline: Federe zaman tüneli, Mastodon ağının genel bir görüntüsüdür. Ancak yalnızca komşularınızın abone olduğu kişileri içerir, bu yüzden tamamı değildir.
tip_following: Sunucu yönetici(ler)ini varsayılan olarak takip edersiniz. Daha ilginç insanlar bulmak için yerel ve federe zaman çizelgelerini kontrol edin.
tip_local_timeline: Yerel zaman çizelgesi, %{instance} üzerindeki kişilerin genel bir görüntüsüdür. Bunlar senin en yakın komşularındır!
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 32b38067be..7df8abcce4 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -352,9 +352,6 @@ uk:
create: Додати домен
title: Нове блокування поштового домену
title: Чорний список поштових доменів
- followers:
- back_to_account: Повернутися до Облікового запису
- title: Підписники %{acct}
instances:
by_domain: Домен
delivery_available: Доставлення доступне
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index b01c1ea204..ec8e853fe8 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -336,9 +336,6 @@ vi:
create: Thêm tên miền
title: Mục nhập danh sách đen e-mail mới
title: Danh sách đen e-mail
- followers:
- back_to_account: Quay lại tài khoản
- title: Người theo dõi của %{acct}
instances:
by_domain: Miền
delivery_available: Giao hàng tận nơi
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index a1deb13e20..21b0ecf782 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -338,9 +338,6 @@ zh-CN:
create: 添加域名
title: 添加电子邮件域名屏蔽
title: 电子邮件域名屏蔽
- followers:
- back_to_account: 返回帐户
- title: "%{acct} 的关注者"
instances:
by_domain: 域名
delivery_available: 无法投递
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 8dd4c346b4..ffd5ba5e95 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -294,9 +294,6 @@ zh-HK:
create: 新增網域
title: 新增電郵網域阻隔
title: 電郵網域阻隔
- followers:
- back_to_account: 返回帳戶
- title: "%{acct} 的關注者"
instances:
moderation:
all: 全部
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 1ba2c82c8e..5b25688edb 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -294,9 +294,6 @@ zh-TW:
create: 新增站點
title: 新增電子信箱黑名單項目
title: 電子信箱黑名單
- followers:
- back_to_account: 返回帳戶
- title: "%{acct} 的關注者"
instances:
moderation:
all: 全部
diff --git a/config/navigation.rb b/config/navigation.rb
index ab4262182b..bd172f25fb 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -52,6 +52,7 @@ SimpleNavigation::Configuration.run do |navigation|
n.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_dashboard_url, if: proc { current_user.staff? } do |s|
s.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url
s.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/settings}
+ s.item :announcements, safe_join([fa_icon('bullhorn fw'), t('admin.announcements.title')]), admin_announcements_path, highlights_on: %r{/admin/announcements}
s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? && !whitelist_mode? }, highlights_on: %r{/admin/relays}
s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? }
diff --git a/config/routes.rb b/config/routes.rb
index 545c07255c..322d66aec3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -175,9 +175,12 @@ Rails.application.routes.draw do
get :edit
end
end
+
resources :email_domain_blocks, only: [:index, :new, :create, :destroy]
resources :action_logs, only: [:index]
resources :warning_presets, except: [:new]
+ resources :announcements, except: [:show]
+
resource :settings, only: [:edit, :update]
resources :invites, only: [:index, :create, :destroy] do
@@ -225,7 +228,7 @@ Rails.application.routes.draw do
resource :reset, only: [:create]
resource :action, only: [:new, :create], controller: 'account_actions'
resources :statuses, only: [:index, :show, :create, :update, :destroy]
- resources :followers, only: [:index]
+ resources :relationships, only: [:index]
resource :confirmation, only: [:create] do
collection do
@@ -320,6 +323,16 @@ Rails.application.routes.draw do
resources :scheduled_statuses, only: [:index, :show, :update, :destroy]
resources :preferences, only: [:index]
+ resources :announcements, only: [:index] do
+ scope module: :announcements do
+ resources :reactions, only: [:update, :destroy]
+ end
+
+ member do
+ post :dismiss
+ end
+ end
+
resources :conversations, only: [:index, :destroy] do
member do
post :read
diff --git a/db/migrate/20191218153258_create_announcements.rb b/db/migrate/20191218153258_create_announcements.rb
new file mode 100644
index 0000000000..58e143c920
--- /dev/null
+++ b/db/migrate/20191218153258_create_announcements.rb
@@ -0,0 +1,16 @@
+class CreateAnnouncements < ActiveRecord::Migration[5.2]
+ def change
+ create_table :announcements do |t|
+ t.text :text, null: false, default: ''
+
+ t.boolean :published, null: false, default: false
+ t.boolean :all_day, null: false, default: false
+
+ t.datetime :scheduled_at
+ t.datetime :starts_at
+ t.datetime :ends_at
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20200113125135_create_announcement_mutes.rb b/db/migrate/20200113125135_create_announcement_mutes.rb
new file mode 100644
index 0000000000..c588e7fcd3
--- /dev/null
+++ b/db/migrate/20200113125135_create_announcement_mutes.rb
@@ -0,0 +1,12 @@
+class CreateAnnouncementMutes < ActiveRecord::Migration[5.2]
+ def change
+ create_table :announcement_mutes do |t|
+ t.belongs_to :account, foreign_key: { on_delete: :cascade, index: false }
+ t.belongs_to :announcement, foreign_key: { on_delete: :cascade }
+
+ t.timestamps
+ end
+
+ add_index :announcement_mutes, [:account_id, :announcement_id], unique: true
+ end
+end
diff --git a/db/migrate/20200114113335_create_announcement_reactions.rb b/db/migrate/20200114113335_create_announcement_reactions.rb
new file mode 100644
index 0000000000..226c81a18e
--- /dev/null
+++ b/db/migrate/20200114113335_create_announcement_reactions.rb
@@ -0,0 +1,15 @@
+class CreateAnnouncementReactions < ActiveRecord::Migration[5.2]
+ def change
+ create_table :announcement_reactions do |t|
+ t.belongs_to :account, foreign_key: { on_delete: :cascade, index: false }
+ t.belongs_to :announcement, foreign_key: { on_delete: :cascade }
+
+ t.string :name, null: false, default: ''
+ t.belongs_to :custom_emoji, foreign_key: { on_delete: :cascade }
+
+ t.timestamps
+ end
+
+ add_index :announcement_reactions, [:account_id, :announcement_id, :name], unique: true, name: :index_announcement_reactions_on_account_id_and_announcement_id
+ end
+end
diff --git a/db/migrate/20200119112504_add_public_index_to_statuses.rb b/db/migrate/20200119112504_add_public_index_to_statuses.rb
new file mode 100644
index 0000000000..db007848e0
--- /dev/null
+++ b/db/migrate/20200119112504_add_public_index_to_statuses.rb
@@ -0,0 +1,11 @@
+class AddPublicIndexToStatuses < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def up
+ add_index :statuses, [:id, :account_id], name: :index_statuses_public_20200119, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))'
+ end
+
+ def down
+ remove_index :statuses, name: :index_statuses_public_20200119
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b7ab74033e..2f41dee979 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: 2019_12_12_003415) do
+ActiveRecord::Schema.define(version: 2020_01_19_112504) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -196,15 +196,49 @@ ActiveRecord::Schema.define(version: 2019_12_12_003415) do
t.index ["target_type", "target_id"], name: "index_admin_action_logs_on_target_type_and_target_id"
end
+ create_table "announcement_mutes", force: :cascade do |t|
+ t.bigint "account_id"
+ t.bigint "announcement_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id", "announcement_id"], name: "index_announcement_mutes_on_account_id_and_announcement_id", unique: true
+ t.index ["account_id"], name: "index_announcement_mutes_on_account_id"
+ t.index ["announcement_id"], name: "index_announcement_mutes_on_announcement_id"
+ end
+
+ create_table "announcement_reactions", force: :cascade do |t|
+ t.bigint "account_id"
+ t.bigint "announcement_id"
+ t.string "name", default: "", null: false
+ t.bigint "custom_emoji_id"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id", "announcement_id", "name"], name: "index_announcement_reactions_on_account_id_and_announcement_id", unique: true
+ t.index ["account_id"], name: "index_announcement_reactions_on_account_id"
+ t.index ["announcement_id"], name: "index_announcement_reactions_on_announcement_id"
+ t.index ["custom_emoji_id"], name: "index_announcement_reactions_on_custom_emoji_id"
+ end
+
+ create_table "announcements", force: :cascade do |t|
+ t.text "text", default: "", null: false
+ t.boolean "published", default: false, null: false
+ t.boolean "all_day", default: false, null: false
+ t.datetime "scheduled_at"
+ t.datetime "starts_at"
+ t.datetime "ends_at"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
create_table "backups", force: :cascade do |t|
t.bigint "user_id"
t.string "dump_file_name"
t.string "dump_content_type"
- t.bigint "dump_file_size"
t.datetime "dump_updated_at"
t.boolean "processed", default: false, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.bigint "dump_file_size"
end
create_table "blocks", force: :cascade do |t|
@@ -693,6 +727,7 @@ ActiveRecord::Schema.define(version: 2019_12_12_003415) do
t.datetime "deleted_at"
t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)"
t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
+ t.index ["id", "account_id"], name: "index_statuses_public_20200119", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
t.index ["in_reply_to_account_id"], name: "index_statuses_on_in_reply_to_account_id"
t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id"
t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id"
@@ -820,6 +855,11 @@ ActiveRecord::Schema.define(version: 2019_12_12_003415) do
add_foreign_key "account_warnings", "accounts", on_delete: :nullify
add_foreign_key "accounts", "accounts", column: "moved_to_account_id", on_delete: :nullify
add_foreign_key "admin_action_logs", "accounts", on_delete: :cascade
+ add_foreign_key "announcement_mutes", "accounts", on_delete: :cascade
+ add_foreign_key "announcement_mutes", "announcements", on_delete: :cascade
+ add_foreign_key "announcement_reactions", "accounts", on_delete: :cascade
+ add_foreign_key "announcement_reactions", "announcements", on_delete: :cascade
+ add_foreign_key "announcement_reactions", "custom_emojis", on_delete: :cascade
add_foreign_key "backups", "users", on_delete: :nullify
add_foreign_key "blocks", "accounts", column: "target_account_id", name: "fk_9571bfabc1", on_delete: :cascade
add_foreign_key "blocks", "accounts", name: "fk_4269e03e65", on_delete: :cascade
diff --git a/lib/cli.rb b/lib/cli.rb
index fbdf49fc34..19cc5d6b51 100644
--- a/lib/cli.rb
+++ b/lib/cli.rb
@@ -96,6 +96,8 @@ module Mastodon
prompt.warn('Do NOT interrupt this process...')
+ Setting.registrations_mode = 'none'
+
Account.local.without_suspended.find_each do |account|
payload = ActiveModelSerializers::SerializableResource.new(
account,
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index a8e5f0b79e..e0549d0a59 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -9,15 +9,15 @@ module Mastodon
end
def minor
- 0
- end
-
- def patch
1
end
+ def patch
+ 0
+ end
+
def flags
- ''
+ 'rc1'
end
def suffix
diff --git a/lib/tasks/auto_annotate_models.rake b/lib/tasks/auto_annotate_models.rake
index fb9c89aa4c..a374e33ad2 100644
--- a/lib/tasks/auto_annotate_models.rake
+++ b/lib/tasks/auto_annotate_models.rake
@@ -4,6 +4,7 @@ if Rails.env.development?
task :set_annotation_options do
Annotate.set_defaults(
'routes' => 'false',
+ 'models' => 'true',
'position_in_routes' => 'before',
'position_in_class' => 'before',
'position_in_test' => 'before',
diff --git a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb b/spec/controllers/api/v1/announcements/reactions_controller_spec.rb
new file mode 100644
index 0000000000..72620e2421
--- /dev/null
+++ b/spec/controllers/api/v1/announcements/reactions_controller_spec.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Api::V1::Announcements::ReactionsController, type: :controller do
+ render_views
+
+ let(:user) { Fabricate(:user) }
+ let(:scopes) { 'write:favourites' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+
+ let!(:announcement) { Fabricate(:announcement) }
+
+ describe 'PUT #update' do
+ context 'without token' do
+ it 'returns http unauthorized' do
+ put :update, params: { announcement_id: announcement.id, id: '😂' }
+ expect(response).to have_http_status :unauthorized
+ end
+ end
+
+ context 'with token' do
+ before do
+ allow(controller).to receive(:doorkeeper_token) { token }
+ put :update, params: { announcement_id: announcement.id, id: '😂' }
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'creates reaction' do
+ expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to_not be_nil
+ end
+ end
+ end
+
+ describe 'DELETE #destroy' do
+ before do
+ announcement.announcement_reactions.create!(account: user.account, name: '😂')
+ end
+
+ context 'without token' do
+ it 'returns http unauthorized' do
+ delete :destroy, params: { announcement_id: announcement.id, id: '😂' }
+ expect(response).to have_http_status :unauthorized
+ end
+ end
+
+ context 'with token' do
+ before do
+ allow(controller).to receive(:doorkeeper_token) { token }
+ delete :destroy, params: { announcement_id: announcement.id, id: '😂' }
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'creates reaction' do
+ expect(announcement.announcement_reactions.find_by(name: '😂', account: user.account)).to be_nil
+ end
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/announcements_controller_spec.rb b/spec/controllers/api/v1/announcements_controller_spec.rb
new file mode 100644
index 0000000000..6ee46b60eb
--- /dev/null
+++ b/spec/controllers/api/v1/announcements_controller_spec.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Api::V1::AnnouncementsController, type: :controller do
+ render_views
+
+ let(:user) { Fabricate(:user) }
+ let(:scopes) { 'read' }
+ let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
+
+ let!(:announcement) { Fabricate(:announcement) }
+
+ describe 'GET #index' do
+ context 'without token' do
+ it 'returns http unprocessable entity' do
+ get :index
+ expect(response).to have_http_status :unprocessable_entity
+ end
+ end
+
+ context 'with token' do
+ before do
+ allow(controller).to receive(:doorkeeper_token) { token }
+ get :index
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+ end
+ end
+
+ describe 'POST #dismiss' do
+ context 'without token' do
+ it 'returns http unauthorized' do
+ post :dismiss, params: { id: announcement.id }
+ expect(response).to have_http_status :unauthorized
+ end
+ end
+
+ context 'with token' do
+ let(:scopes) { 'write:accounts' }
+
+ before do
+ allow(controller).to receive(:doorkeeper_token) { token }
+ post :dismiss, params: { id: announcement.id }
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'dismisses announcement' do
+ expect(announcement.announcement_mutes.find_by(account: user.account)).to_not be_nil
+ end
+ end
+ end
+end
diff --git a/spec/controllers/api/v1/trends_controller_spec.rb b/spec/controllers/api/v1/trends_controller_spec.rb
new file mode 100644
index 0000000000..91e0d18fe7
--- /dev/null
+++ b/spec/controllers/api/v1/trends_controller_spec.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe Api::V1::TrendsController, type: :controller do
+ render_views
+
+ describe 'GET #index' do
+ before do
+ allow(TrendingTags).to receive(:get).and_return(Fabricate.times(10, :tag))
+ get :index
+ end
+
+ it 'returns http success' do
+ expect(response).to have_http_status(200)
+ end
+ end
+end
diff --git a/spec/fabricators/announcement_fabricator.rb b/spec/fabricators/announcement_fabricator.rb
new file mode 100644
index 0000000000..5a3871d901
--- /dev/null
+++ b/spec/fabricators/announcement_fabricator.rb
@@ -0,0 +1,6 @@
+Fabricator(:announcement) do
+ text { Faker::Lorem.paragraph(sentence_count: 2) }
+ published true
+ starts_at nil
+ ends_at nil
+end
diff --git a/spec/fabricators/announcement_mute_fabricator.rb b/spec/fabricators/announcement_mute_fabricator.rb
new file mode 100644
index 0000000000..c4eafe8f4c
--- /dev/null
+++ b/spec/fabricators/announcement_mute_fabricator.rb
@@ -0,0 +1,4 @@
+Fabricator(:announcement_mute) do
+ account
+ announcement
+end
diff --git a/spec/fabricators/announcement_reaction_fabricator.rb b/spec/fabricators/announcement_reaction_fabricator.rb
new file mode 100644
index 0000000000..f923c59c60
--- /dev/null
+++ b/spec/fabricators/announcement_reaction_fabricator.rb
@@ -0,0 +1,5 @@
+Fabricator(:announcement_reaction) do
+ account
+ announcement
+ name '🌿'
+end
diff --git a/spec/fabricators/media_attachment_fabricator.rb b/spec/fabricators/media_attachment_fabricator.rb
index bb938e36d9..651927c2dd 100644
--- a/spec/fabricators/media_attachment_fabricator.rb
+++ b/spec/fabricators/media_attachment_fabricator.rb
@@ -1,16 +1,12 @@
Fabricator(:media_attachment) do
account
+
file do |attrs|
- [
- case attrs[:type]
- when :gifv
- attachment_fixture ['attachment.gif', 'attachment.webm'].sample
- when :image
- attachment_fixture 'attachment.jpg'
- when nil
- attachment_fixture ['attachment.gif', 'attachment.jpg', 'attachment.webm'].sample
- end,
- nil
- ].sample
+ case attrs[:type]
+ when :gifv, :video
+ attachment_fixture('attachment.webm')
+ else
+ attachment_fixture('attachment.jpg')
+ end
end
end
diff --git a/spec/lib/formatter_spec.rb b/spec/lib/formatter_spec.rb
index 83be0a5883..633d59c2ab 100644
--- a/spec/lib/formatter_spec.rb
+++ b/spec/lib/formatter_spec.rb
@@ -258,6 +258,14 @@ RSpec.describe Formatter do
is_expected.to include 'href="xmpp:muc@instance.com?join"'
end
end
+
+ context 'given text containing a magnet: URI' do
+ let(:text) { 'wikipedia gives this example of a magnet uri: magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a' }
+
+ it 'matches the full URI' do
+ is_expected.to include 'href="magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a"'
+ end
+ end
end
describe '#format_spoiler' do
diff --git a/spec/middleware/handle_bad_encoding_middleware_spec.rb b/spec/middleware/handle_bad_encoding_middleware_spec.rb
deleted file mode 100644
index 8c0d24f182..0000000000
--- a/spec/middleware/handle_bad_encoding_middleware_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe HandleBadEncodingMiddleware do
- let(:app) { double() }
- let(:middleware) { HandleBadEncodingMiddleware.new(app) }
-
- it "request with query string is unchanged" do
- expect(app).to receive(:call).with("PATH" => "/some/path", "QUERY_STRING" => "name=fred")
- middleware.call("PATH" => "/some/path", "QUERY_STRING" => "name=fred")
- end
-
- it "request with no query string is unchanged" do
- expect(app).to receive(:call).with("PATH" => "/some/path")
- middleware.call("PATH" => "/some/path")
- end
-
- it "request with invalid encoding in query string drops query string" do
- expect(app).to receive(:call).with("QUERY_STRING" => "", "PATH" => "/some/path")
- middleware.call("QUERY_STRING" => "q=%2Fsearch%2Fall%Forder%3Ddescending%26page%3D5%26sort%3Dcreated_at", "PATH" => "/some/path")
- end
-end
diff --git a/spec/models/announcement_mute_spec.rb b/spec/models/announcement_mute_spec.rb
new file mode 100644
index 0000000000..9d0e4c9037
--- /dev/null
+++ b/spec/models/announcement_mute_spec.rb
@@ -0,0 +1,4 @@
+require 'rails_helper'
+
+RSpec.describe AnnouncementMute, type: :model do
+end
diff --git a/spec/models/announcement_reaction_spec.rb b/spec/models/announcement_reaction_spec.rb
new file mode 100644
index 0000000000..f6e1515840
--- /dev/null
+++ b/spec/models/announcement_reaction_spec.rb
@@ -0,0 +1,4 @@
+require 'rails_helper'
+
+RSpec.describe AnnouncementReaction, type: :model do
+end
diff --git a/spec/models/announcement_spec.rb b/spec/models/announcement_spec.rb
new file mode 100644
index 0000000000..7f7b647a9e
--- /dev/null
+++ b/spec/models/announcement_spec.rb
@@ -0,0 +1,4 @@
+require 'rails_helper'
+
+RSpec.describe Announcement, type: :model do
+end
diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb
index a275621a13..456bc42167 100644
--- a/spec/models/media_attachment_spec.rb
+++ b/spec/models/media_attachment_spec.rb
@@ -31,14 +31,6 @@ RSpec.describe MediaAttachment, type: :model do
context 'file is blank' do
let(:file) { nil }
- context 'remote_url is blank' do
- let(:remote_url) { '' }
-
- it 'returns false' do
- is_expected.to be false
- end
- end
-
context 'remote_url is present' do
let(:remote_url) { 'remote_url' }
@@ -153,6 +145,11 @@ RSpec.describe MediaAttachment, type: :model do
end
end
+ it 'is invalid without file' do
+ media = MediaAttachment.new(account: Fabricate(:account))
+ expect(media.valid?).to be false
+ end
+
describe 'descriptions for remote attachments' do
it 'are cut off at 1500 characters' do
media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg')
diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb
index bf06f50e9b..025a3da40c 100644
--- a/spec/services/post_status_service_spec.rb
+++ b/spec/services/post_status_service_spec.rb
@@ -212,14 +212,18 @@ RSpec.describe PostStatusService, type: :service do
it 'does not allow attaching both videos and images' do
account = Fabricate(:account)
+ video = Fabricate(:media_attachment, type: :video, account: account)
+ image = Fabricate(:media_attachment, type: :image, account: account)
+
+ video.update(type: :video)
expect do
subject.call(
account,
text: "test status update",
media_ids: [
- Fabricate(:media_attachment, type: :video, account: account),
- Fabricate(:media_attachment, type: :image, account: account),
+ video,
+ image,
].map(&:id),
)
end.to raise_error(