diff options
169 files changed, 1268 insertions, 665 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 8670c2658..120ec7407 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,14 +11,14 @@ All notable changes to this project will be documented in this file. - Add identity proof integration with Keybase ([Gargron](https://github.com/tootsuite/mastodon/pull/10297), [xgess](https://github.com/tootsuite/mastodon/pull/10375), [Gargron](https://github.com/tootsuite/mastodon/pull/10338), [Gargron](https://github.com/tootsuite/mastodon/pull/10350), [Gargron](https://github.com/tootsuite/mastodon/pull/10414)) - Add option to overwrite imported data instead of merging ([Gargron](https://github.com/tootsuite/mastodon/pull/9962)) - Add featured hashtags to profiles ([Gargron](https://github.com/tootsuite/mastodon/pull/9755), [Gargron](https://github.com/tootsuite/mastodon/pull/10167), [Gargron](https://github.com/tootsuite/mastodon/pull/10249), [ThibG](https://github.com/tootsuite/mastodon/pull/10034)) -- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349)) +- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349), [Gargron](https://github.com/tootsuite/mastodon/pull/10469)) - Add support for WebP uploads ([acid-chicken](https://github.com/tootsuite/mastodon/pull/9879)) - Add "copy link" item to status action bars in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9983)) - Add list title editing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9748)) - Add a "Block & Report" button to the block confirmation dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10360)) - Add disappointed elephant when the page crashes in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10275)) - Add ability to upload multiple files at once in web UI ([tmm576](https://github.com/tootsuite/mastodon/pull/9856)) -- Add indication that you have been blocked when viewing profiles in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420)) +- Add indication when you are not allowed to follow an account in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420), [Gargron](https://github.com/tootsuite/mastodon/pull/10491)) - Add validations to admin settings to catch common mistakes ([Gargron](https://github.com/tootsuite/mastodon/pull/10348), [ThibG](https://github.com/tootsuite/mastodon/pull/10354)) - Add `type`, `limit`, `offset`, `min_id`, `max_id`, `account_id` to search API ([Gargron](https://github.com/tootsuite/mastodon/pull/10091)) - Add a preferences API so apps can share basic behaviours ([Gargron](https://github.com/tootsuite/mastodon/pull/10109)) @@ -32,6 +32,10 @@ All notable changes to this project will be documented in this file. - Add `DB_SSLMODE` configuration variable ([sascha-sl](https://github.com/tootsuite/mastodon/pull/10210)) - Add click-to-copy UI to invites page ([Gargron](https://github.com/tootsuite/mastodon/pull/10259)) - Add self-replies fetching ([ThibG](https://github.com/tootsuite/mastodon/pull/10106), [ThibG](https://github.com/tootsuite/mastodon/pull/10128), [ThibG](https://github.com/tootsuite/mastodon/pull/10175), [ThibG](https://github.com/tootsuite/mastodon/pull/10201)) +- Add rate limit for media proxy requests ([Gargron](https://github.com/tootsuite/mastodon/pull/10490)) +- Add `tootctl emoji purge` ([Gargron](https://github.com/tootsuite/mastodon/pull/10481)) +- Add `tootctl accounts approve` ([Gargron](https://github.com/tootsuite/mastodon/pull/10480)) +- Add `tootctl accounts reset-relationships` ([noellabo](https://github.com/tootsuite/mastodon/pull/10483)) ### Changed @@ -51,6 +55,10 @@ All notable changes to this project will be documented in this file. - Change web UI to use new Web Share Target API ([gol-cha](https://github.com/tootsuite/mastodon/pull/9963)) - Change ActivityPub reports to have persistent URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/10303)) - Change `tootctl accounts cull --dry-run` to list accounts that would be deleted ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460)) +- Change format of CSV exports of follows and mutes to include extra settings ([ThibG](https://github.com/tootsuite/mastodon/pull/10495), [ThibG](https://github.com/tootsuite/mastodon/pull/10335)) +- Change ActivityPub collections to be cacheable by proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/10467)) +- Change REST API and public profiles to not return follows/followers for users that have blocked you ([Gargron](https://github.com/tootsuite/mastodon/pull/10491)) +- Change the groupings of menu items in settings navigation ([Gargron](https://github.com/tootsuite/mastodon/pull/10533)) ### Removed diff --git a/Gemfile.lock b/Gemfile.lock index 7d98a2fdc..c6169b260 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -99,7 +99,7 @@ GEM rack (>= 0.9.0) binding_of_caller (0.8.0) debug_inspector (>= 0.0.1) - bootsnap (1.4.2) + bootsnap (1.4.3) msgpack (~> 1.0) brakeman (4.5.0) browser (2.5.3) @@ -240,11 +240,11 @@ GEM http (~> 3.0) nokogiri (~> 1.8) oj (~> 3.0) - hamlit (2.9.2) + hamlit (2.9.3) temple (>= 0.8.0) thor tilt - hamlit-rails (0.2.2) + hamlit-rails (0.2.3) actionpack (>= 4.0.1) activesupport (>= 4.0.1) hamlit (>= 1.2.0) @@ -426,7 +426,7 @@ GEM pundit (2.0.1) activesupport (>= 3.0.0) raabro (1.1.6) - rack (2.0.6) + rack (2.0.7) rack-attack (5.4.2) rack (>= 1.0, < 3) rack-cors (1.0.3) @@ -597,7 +597,7 @@ GEM multi_json (~> 1.8) strong_migrations (0.3.1) activerecord (>= 3.2.0) - temple (0.8.0) + temple (0.8.1) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) terrapin (0.6.0) diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index f459bab19..5850bd56d 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -17,7 +17,10 @@ class AboutController < ApplicationController private def new_user - User.new.tap(&:build_account) + User.new.tap do |user| + user.build_account + user.build_invite_request + end end helper_method :new_user diff --git a/app/controllers/admin/pending_accounts_controller.rb b/app/controllers/admin/pending_accounts_controller.rb index 8429d3585..b62a9bc84 100644 --- a/app/controllers/admin/pending_accounts_controller.rb +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -8,29 +8,29 @@ module Admin @form = Form::AccountBatch.new end - def update + def batch @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button)) @form.save rescue ActionController::ParameterMissing - # Do nothing + flash[:alert] = I18n.t('admin.accounts.no_account_selected') ensure redirect_to admin_pending_accounts_path(current_params) end def approve_all - Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'approve').save + Form::AccountBatch.new(current_account: current_account, account_ids: User.pending.pluck(:account_id), action: 'approve').save redirect_to admin_pending_accounts_path(current_params) end def reject_all - Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'reject').save + Form::AccountBatch.new(current_account: current_account, account_ids: User.pending.pluck(:account_id), action: 'reject').save redirect_to admin_pending_accounts_path(current_params) end private def set_accounts - @accounts = Account.joins(:user).merge(User.pending).page(params[:page]) + @accounts = Account.joins(:user).merge(User.pending.recent).includes(user: :invite_request).page(params[:page]) end def form_account_batch_params diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 74dd7ff34..84099bd96 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -11,6 +11,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController before_action :set_instance_presenter, only: [:new, :create, :update] before_action :set_body_classes, only: [:new, :create, :edit, :update] + def new + super(&:build_invite_request) + end + def destroy not_found end @@ -25,17 +29,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController def build_resource(hash = nil) super(hash) - resource.locale = I18n.locale - resource.invite_code = params[:invite_code] if resource.invite_code.blank? - resource.agreement = true + resource.locale = I18n.locale + resource.invite_code = params[:invite_code] if resource.invite_code.blank? + resource.agreement = true + resource.current_sign_in_ip = request.remote_ip - resource.current_sign_in_ip = request.remote_ip if resource.current_sign_in_ip.nil? resource.build_account if resource.account.nil? end def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up) do |u| - u.permit({ account_attributes: [:username] }, :email, :password, :password_confirmation, :invite_code) + u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code) end end diff --git a/app/controllers/settings/identity_proofs_controller.rb b/app/controllers/settings/identity_proofs_controller.rb index 8f857fdcc..e22b4d9be 100644 --- a/app/controllers/settings/identity_proofs_controller.rb +++ b/app/controllers/settings/identity_proofs_controller.rb @@ -18,7 +18,7 @@ class Settings::IdentityProofsController < Settings::BaseController provider_username: params[:provider_username] ) - if current_account.username == params[:username] + if current_account.username.casecmp(params[:username]).zero? render layout: 'auth' else flash[:alert] = I18n.t('identity_proofs.errors.wrong_user', proving: params[:username], current: current_account.username) diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index 241053261..eb7a0eb4a 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -46,7 +46,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_hide_followers_count, :setting_aggregate_reblogs, :setting_show_application, - notification_emails: %i(follow follow_request reblog favourite mention digest report), + notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account), interactions: %i(must_be_follower must_be_following) ) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f70c37522..7ae1e5d0b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -118,4 +118,9 @@ module ApplicationHelper def storage_host? ENV['S3_ALIAS_HOST'].present? || ENV['S3_CLOUDFRONT_HOST'].present? end + + def quote_wrap(text, line_width: 80, break_sequence: "\n") + text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence) + text.split("\n").map { |line| '> ' + line }.join("\n") + end end diff --git a/app/javascript/flavours/glitch/actions/alerts.js b/app/javascript/flavours/glitch/actions/alerts.js index 50cd48a9e..b2c7ab76a 100644 --- a/app/javascript/flavours/glitch/actions/alerts.js +++ b/app/javascript/flavours/glitch/actions/alerts.js @@ -34,6 +34,11 @@ export function showAlertForError(error) { if (error.response) { const { data, status, statusText } = error.response; + if (status === 404 || status === 410) { + // Skip these errors as they are reflected in the UI + return {}; + } + let message = statusText; let title = `${status}`; diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js index 63c1b2d86..3b1af108f 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/index.js +++ b/app/javascript/flavours/glitch/features/account_gallery/index.js @@ -13,8 +13,10 @@ import MediaItem from './components/media_item'; import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container'; import { ScrollContainer } from 'react-router-scroll-4'; import LoadMore from 'flavours/glitch/components/load_more'; +import MissingIndicator from 'flavours/glitch/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), medias: getAccountGallery(state, props.params.accountId), isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']), hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']), @@ -51,6 +53,7 @@ export default class AccountGallery extends ImmutablePureComponent { medias: ImmutablePropTypes.list.isRequired, isLoading: PropTypes.bool, hasMore: PropTypes.bool, + isAccount: PropTypes.bool, }; componentDidMount () { @@ -103,7 +106,15 @@ export default class AccountGallery extends ImmutablePureComponent { } render () { - const { medias, isLoading, hasMore } = this.props; + const { medias, isLoading, hasMore, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } let loadOlder = null; diff --git a/app/javascript/flavours/glitch/features/account_timeline/components/header.js b/app/javascript/flavours/glitch/features/account_timeline/components/header.js index 96cabe847..0faa8a424 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/components/header.js +++ b/app/javascript/flavours/glitch/features/account_timeline/components/header.js @@ -3,7 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import InnerHeader from 'flavours/glitch/features/account/components/header'; import ActionBar from 'flavours/glitch/features/account/components/action_bar'; -import MissingIndicator from 'flavours/glitch/components/missing_indicator'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; import { NavLink } from 'react-router-dom'; @@ -89,7 +88,7 @@ export default class Header extends ImmutablePureComponent { const { account, hideTabs, identity_proofs } = this.props; if (account === null) { - return <MissingIndicator />; + return null; } return ( diff --git a/app/javascript/flavours/glitch/features/account_timeline/index.js b/app/javascript/flavours/glitch/features/account_timeline/index.js index 9971c0f4a..93d8fc9ec 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/index.js +++ b/app/javascript/flavours/glitch/features/account_timeline/index.js @@ -13,11 +13,13 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; import { fetchAccountIdentityProofs } from '../../actions/identity_proofs'; +import MissingIndicator from 'flavours/glitch/components/missing_indicator'; const mapStateToProps = (state, { params: { accountId }, withReplies = false }) => { const path = withReplies ? `${accountId}:with_replies` : accountId; return { + isAccount: !!state.getIn(['accounts', accountId]), statusIds: state.getIn(['timelines', `account:${path}`, 'items'], ImmutableList()), featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()), isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']), @@ -36,6 +38,7 @@ export default class AccountTimeline extends ImmutablePureComponent { isLoading: PropTypes.bool, hasMore: PropTypes.bool, withReplies: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -73,7 +76,15 @@ export default class AccountTimeline extends ImmutablePureComponent { } render () { - const { statusIds, featuredStatusIds, isLoading, hasMore } = this.props; + const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } if (!statusIds && isLoading) { return ( diff --git a/app/javascript/flavours/glitch/features/followers/index.js b/app/javascript/flavours/glitch/features/followers/index.js index 6bb9f60fd..2e47ab9b9 100644 --- a/app/javascript/flavours/glitch/features/followers/index.js +++ b/app/javascript/flavours/glitch/features/followers/index.js @@ -15,8 +15,10 @@ import ProfileColumnHeader from 'flavours/glitch/features/account/components/pro import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container'; import LoadMore from 'flavours/glitch/components/load_more'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import MissingIndicator from 'flavours/glitch/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), }); @@ -29,6 +31,7 @@ export default class Followers extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -70,7 +73,15 @@ export default class Followers extends ImmutablePureComponent { } render () { - const { accountIds, hasMore } = this.props; + const { accountIds, hasMore, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } let loadMore = null; diff --git a/app/javascript/flavours/glitch/features/following/index.js b/app/javascript/flavours/glitch/features/following/index.js index 3f2f091a1..ad1445f3a 100644 --- a/app/javascript/flavours/glitch/features/following/index.js +++ b/app/javascript/flavours/glitch/features/following/index.js @@ -15,8 +15,10 @@ import ProfileColumnHeader from 'flavours/glitch/features/account/components/pro import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container'; import LoadMore from 'flavours/glitch/components/load_more'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import MissingIndicator from 'flavours/glitch/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']), }); @@ -29,6 +31,7 @@ export default class Following extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -70,7 +73,15 @@ export default class Following extends ImmutablePureComponent { } render () { - const { accountIds, hasMore } = this.props; + const { accountIds, hasMore, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } let loadMore = null; diff --git a/app/javascript/flavours/glitch/styles/accounts.scss b/app/javascript/flavours/glitch/styles/accounts.scss index d2ae83b2e..57451c3a1 100644 --- a/app/javascript/flavours/glitch/styles/accounts.scss +++ b/app/javascript/flavours/glitch/styles/accounts.scss @@ -294,3 +294,29 @@ .directory__tag .trends__item__current { width: auto; } + +.pending-account { + &__header { + color: $darker-text-color; + + a { + color: $ui-secondary-color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + text-decoration: underline; + } + } + + strong { + color: $primary-text-color; + font-weight: 700; + } + } + + &__body { + margin-top: 10px; + } +} diff --git a/app/javascript/flavours/glitch/styles/widgets.scss b/app/javascript/flavours/glitch/styles/widgets.scss index 307e509d5..e736d7a7e 100644 --- a/app/javascript/flavours/glitch/styles/widgets.scss +++ b/app/javascript/flavours/glitch/styles/widgets.scss @@ -377,6 +377,10 @@ border: 0; } + strong { + font-weight: 700; + } + thead th { text-align: center; text-transform: uppercase; @@ -414,6 +418,11 @@ } } + &__comment { + width: 50%; + vertical-align: initial !important; + } + @media screen and (max-width: $no-gap-breakpoint) { tbody td.optional { display: none; diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js index 50cd48a9e..b2c7ab76a 100644 --- a/app/javascript/mastodon/actions/alerts.js +++ b/app/javascript/mastodon/actions/alerts.js @@ -34,6 +34,11 @@ export function showAlertForError(error) { if (error.response) { const { data, status, statusText } = error.response; + if (status === 404 || status === 410) { + // Skip these errors as they are reflected in the UI + return {}; + } + let message = statusText; let title = `${status}`; diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js index 96051818b..73be58d6a 100644 --- a/app/javascript/mastodon/features/account_gallery/index.js +++ b/app/javascript/mastodon/features/account_gallery/index.js @@ -13,8 +13,10 @@ import MediaItem from './components/media_item'; import HeaderContainer from '../account_timeline/containers/header_container'; import { ScrollContainer } from 'react-router-scroll-4'; import LoadMore from '../../components/load_more'; +import MissingIndicator from 'mastodon/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), medias: getAccountGallery(state, props.params.accountId), isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']), hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']), @@ -52,6 +54,7 @@ class AccountGallery extends ImmutablePureComponent { medias: ImmutablePropTypes.list.isRequired, isLoading: PropTypes.bool, hasMore: PropTypes.bool, + isAccount: PropTypes.bool, }; componentDidMount () { @@ -91,7 +94,15 @@ class AccountGallery extends ImmutablePureComponent { } render () { - const { medias, shouldUpdateScroll, isLoading, hasMore } = this.props; + const { medias, shouldUpdateScroll, isLoading, hasMore, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } let loadOlder = null; diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js index 27dfcc516..844b8a236 100644 --- a/app/javascript/mastodon/features/account_timeline/components/header.js +++ b/app/javascript/mastodon/features/account_timeline/components/header.js @@ -2,7 +2,6 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import InnerHeader from '../../account/components/header'; -import MissingIndicator from '../../../components/missing_indicator'; import ImmutablePureComponent from 'react-immutable-pure-component'; import MovedNote from './moved_note'; import { FormattedMessage } from 'react-intl'; @@ -88,7 +87,7 @@ export default class Header extends ImmutablePureComponent { const { account, hideTabs, identity_proofs } = this.props; if (account === null) { - return <MissingIndicator />; + return null; } return ( diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index a01f1dd9a..27581bfdc 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -13,6 +13,7 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; import { fetchAccountIdentityProofs } from '../../actions/identity_proofs'; +import MissingIndicator from 'mastodon/components/missing_indicator'; const emptyList = ImmutableList(); @@ -20,6 +21,7 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false }) const path = withReplies ? `${accountId}:with_replies` : accountId; return { + isAccount: !!state.getIn(['accounts', accountId]), statusIds: state.getIn(['timelines', `account:${path}`, 'items'], emptyList), featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], emptyList), isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']), @@ -41,6 +43,7 @@ class AccountTimeline extends ImmutablePureComponent { hasMore: PropTypes.bool, withReplies: PropTypes.bool, blockedBy: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -74,7 +77,15 @@ class AccountTimeline extends ImmutablePureComponent { } render () { - const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy } = this.props; + const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } if (!statusIds && isLoading) { return ( diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js index ce6357c4c..e3387e1be 100644 --- a/app/javascript/mastodon/features/followers/index.js +++ b/app/javascript/mastodon/features/followers/index.js @@ -16,8 +16,10 @@ import Column from '../ui/components/column'; import HeaderContainer from '../account_timeline/containers/header_container'; import ColumnBackButton from '../../components/column_back_button'; import ScrollableList from '../../components/scrollable_list'; +import MissingIndicator from 'mastodon/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), @@ -33,6 +35,7 @@ class Followers extends ImmutablePureComponent { accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, blockedBy: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -52,7 +55,15 @@ class Followers extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy } = this.props; + const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } if (!accountIds) { return ( diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js index 70e7fde06..3bf89fb2b 100644 --- a/app/javascript/mastodon/features/following/index.js +++ b/app/javascript/mastodon/features/following/index.js @@ -16,8 +16,10 @@ import Column from '../ui/components/column'; import HeaderContainer from '../account_timeline/containers/header_container'; import ColumnBackButton from '../../components/column_back_button'; import ScrollableList from '../../components/scrollable_list'; +import MissingIndicator from 'mastodon/components/missing_indicator'; const mapStateToProps = (state, props) => ({ + isAccount: !!state.getIn(['accounts', props.params.accountId]), accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']), hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']), blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false), @@ -33,6 +35,7 @@ class Following extends ImmutablePureComponent { accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, blockedBy: PropTypes.bool, + isAccount: PropTypes.bool, }; componentWillMount () { @@ -52,7 +55,15 @@ class Following extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy } = this.props; + const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props; + + if (!isAccount) { + return ( + <Column> + <MissingIndicator /> + </Column> + ); + } if (!accountIds) { return ( diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 6ed799941..e815d54d5 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -71,10 +71,10 @@ "compose_form.lock_disclaimer": "حسابك ليس {locked}. يمكن لأي شخص متابعتك و عرض المنشورات.", "compose_form.lock_disclaimer.lock": "مقفل", "compose_form.placeholder": "فيمَ تفكّر؟", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "إضافة خيار", + "compose_form.poll.duration": "مدة استطلاع الرأي", + "compose_form.poll.option_placeholder": "الخيار {number}", + "compose_form.poll.remove_option": "إزالة هذا الخيار", "compose_form.publish": "بوّق", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "لقد تم تحديد هذه الصورة كحساسة", @@ -117,6 +117,7 @@ "emoji_button.symbols": "رموز", "emoji_button.travel": "أماكن و أسفار", "empty_column.account_timeline": "ليس هناك تبويقات!", + "empty_column.account_unavailable": "الملف الشخصي غير متوفر", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", "empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !", "empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.", @@ -150,7 +151,7 @@ "hashtag.column_settings.tag_mode.all": "كلها", "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "إدراج الوسوم الإضافية لهذا العمود", "home.column_settings.basic": "أساسية", "home.column_settings.show_reblogs": "عرض الترقيات", "home.column_settings.show_replies": "عرض الردود", @@ -257,7 +258,7 @@ "notifications.column_settings.filter_bar.show": "عرض", "notifications.column_settings.follow": "متابعُون جُدُد :", "notifications.column_settings.mention": "الإشارات :", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "نتائج استطلاع الرأي:", "notifications.column_settings.push": "الإخطارات المدفوعة", "notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.show": "إعرِضها في عمود", @@ -267,14 +268,14 @@ "notifications.filter.favourites": "المفضلة", "notifications.filter.follows": "يتابِع", "notifications.filter.mentions": "الإشارات", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "نتائج استطلاع الرأي", "notifications.group": "{count} إشعارات", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "poll.closed": "انتهى", + "poll.refresh": "تحديث", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.vote": "صَوّت", + "poll_button.add_poll": "إضافة استطلاع للرأي", + "poll_button.remove_poll": "إزالة استطلاع الرأي", "privacy.change": "إضبط خصوصية المنشور", "privacy.direct.long": "أنشر إلى المستخدمين المشار إليهم فقط", "privacy.direct.short": "مباشر", @@ -366,7 +367,7 @@ "upload_area.title": "إسحب ثم أفلت للرفع", "upload_button.label": "إضافة وسائط (JPEG، PNG، GIF، WebM، MP4، MOV)", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_form.description": "وصف للمعاقين بصريا", "upload_form.focus": "قص", "upload_form.undo": "حذف", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index a341567a7..a983f63a4 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes y llugares", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Entá nun bloquiesti a dengún usuariu.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 49e043582..36a08b264 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 0d095bdeb..338e49f81 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index c6b71a4f8..18dd56d0d 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i Llocs", "empty_column.account_timeline": "No hi ha toots aquí!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Encara no has bloquejat cap usuari.", "empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per fer rodar la pilota!", "empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 61d865154..f98ea7f26 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -351,7 +351,7 @@ "status.unmute_conversation": "Odkrýt konverzaci", "status.unpin": "Odepnout z profilu", "suggestions.dismiss": "Odmítnout návrh", - "suggestions.header": "Mohlo by vás zajímat…", + "suggestions.header": "Mohli by vás zajímat…", "tabs_bar.federated_timeline": "Federovaná", "tabs_bar.home": "Domů", "tabs_bar.local_timeline": "Místní", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index f03b54750..d886b2b54 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio & Llefydd", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", "empty_column.community": "Mae'r ffrwd lleol yn wag. Ysgrifenwch rhywbeth yn gyhoeddus i gael dechrau arni!", "empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 1be8d989d..89096b29b 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser & steder", "empty_column.account_timeline": "Ingen bidrag her!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Du har ikke blokeret nogen endnu.", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!", "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 701410a81..69c0dcbad 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -71,10 +71,10 @@ "compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.", "compose_form.lock_disclaimer.lock": "κλειδωμένος", "compose_form.placeholder": "Τι σκέφτεσαι;", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Προσθήκη επιλογής", + "compose_form.poll.duration": "Διάρκεια δημοσκόπησης", + "compose_form.poll.option_placeholder": "Επιλογή {number}", + "compose_form.poll.remove_option": "Αφαίρεση επιλογής", "compose_form.publish": "Τουτ", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "Το πολυμέσο έχει σημειωθεί ως ευαίσθητο", @@ -117,6 +117,7 @@ "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", "empty_column.account_timeline": "Δεν έχει τουτ εδώ!", + "empty_column.account_unavailable": "Μη διαθέσιμο προφίλ", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", "empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!", "empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.", @@ -154,8 +155,8 @@ "home.column_settings.basic": "Βασικά", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", + "intervals.full.hours": "{number, plural, one {# ώρα} other {# ώρες}}", "intervals.full.minutes": "{number, plural, one {# λεπτό} other {# λεπτά}}", "introduction.federation.action": "Επόμενο", "introduction.federation.federated.headline": "Ομοσπονδιακή", @@ -273,8 +274,8 @@ "poll.refresh": "Ανανέωση", "poll.total_votes": "{count, plural, one {# ψήφος} other {# ψήφοι}}", "poll.vote": "Ψήφισε", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll_button.add_poll": "Προσθήκη δημοσκόπησης", + "poll_button.remove_poll": "Αφαίρεση δημοσκόπησης", "privacy.change": "Προσαρμογή ιδιωτικότητας δημοσίευσης", "privacy.direct.long": "Δημοσίευση μόνο σε όσους και όσες αναφέρονται", "privacy.direct.short": "Προσωπικά", @@ -366,7 +367,7 @@ "upload_area.title": "Drag & drop για να ανεβάσεις", "upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης", "upload_form.focus": "Αλλαγή προεπισκόπησης", "upload_form.undo": "Διαγραφή", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index ed0113650..740f2bfae 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", "empty_column.account_timeline": "Neniu mesaĝo ĉi tie!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", "empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!", "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 97d03d840..158a116d0 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 17f84dc27..bd26ae232 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Sinboloak", "emoji_button.travel": "Bidaiak eta tokiak", "empty_column.account_timeline": "Ez dago toot-ik hemen!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!", "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 91a27e366..6890fa971 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", "empty_column.account_timeline": "هیچ بوقی اینجا نیست!", + "empty_column.account_unavailable": "نمایهٔ ناموجود", "empty_column.blocks": "شما هنوز هیچ کسی را مسدود نکردهاید.", "empty_column.community": "فهرست نوشتههای محلی خالی است. چیزی بنویسید تا چرخش بچرخد!", "empty_column.direct": "شما هیچ پیغام مستقیمی ندارید. اگر چنین پیغامی بگیرید یا بفرستید اینجا نمایش خواهد یافت.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 68381f6b3..825cd4a75 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", "empty_column.account_timeline": "Ei ole 'toots' täällä!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", "empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!", "empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 4d7451248..58f3ce147 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -71,10 +71,10 @@ "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.", "compose_form.lock_disclaimer.lock": "verrouillé", "compose_form.placeholder": "Qu’avez-vous en tête ?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Ajouter un choix", + "compose_form.poll.duration": "Durée du sondage", + "compose_form.poll.option_placeholder": "Choix {number}", + "compose_form.poll.remove_option": "Supprimer ce choix", "compose_form.publish": "Pouet", "compose_form.publish_loud": "{publish} !", "compose_form.sensitive.marked": "Média marqué comme sensible", @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", "empty_column.account_timeline": "Aucun pouet ici !", + "empty_column.account_unavailable": "Profil non disponible", "empty_column.blocks": "Vous n’avez bloqué aucun·e utilisateur·rice pour le moment.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", @@ -154,8 +155,8 @@ "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.days": "{number, plural, one {# jour} other {# jours}}", + "intervals.full.hours": "{number, plural, one {# heure} other {# heures}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "introduction.federation.action": "Suivant", "introduction.federation.federated.headline": "Fil public global", @@ -246,7 +247,7 @@ "notification.favourite": "{name} a ajouté à ses favoris :", "notification.follow": "{name} vous suit", "notification.mention": "{name} vous a mentionné :", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre statut :", "notifications.clear": "Nettoyer les notifications", "notifications.clear_confirmation": "Voulez-vous vraiment supprimer toutes vos notifications ?", @@ -257,7 +258,7 @@ "notifications.column_settings.filter_bar.show": "Afficher", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s :", "notifications.column_settings.mention": "Mentions :", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Résultats du sondage :", "notifications.column_settings.push": "Notifications", "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", @@ -267,14 +268,14 @@ "notifications.filter.favourites": "Favoris", "notifications.filter.follows": "Abonné·e·s", "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "Résultats des sondages", "notifications.group": "{count} notifications", "poll.closed": "Fermé", "poll.refresh": "Actualiser", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Voter", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll_button.add_poll": "Ajouter un sondage", + "poll_button.remove_poll": "Supprimer le sondage", "privacy.change": "Ajuster la confidentialité du message", "privacy.direct.long": "N’envoyer qu’aux personnes mentionnées", "privacy.direct.short": "Direct", @@ -366,7 +367,7 @@ "upload_area.title": "Glissez et déposez pour envoyer", "upload_button.label": "Joindre un média (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.", "upload_form.description": "Décrire pour les malvoyant·e·s", "upload_form.focus": "Modifier l’aperçu", "upload_form.undo": "Supprimer", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3011e7d07..723328ab4 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", "empty_column.account_timeline": "Sen toots por aquí!", + "empty_column.account_unavailable": "Perfil non dispoñible", "empty_column.blocks": "Non bloqueou ningunha usuaria polo de agora.", "empty_column.community": "A liña temporal local está baldeira. Escriba algo de xeito público para que rule!", "empty_column.direct": "Aínda non ten mensaxes directas. Cando envíe ou reciba unha, aparecerá aquí.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index c136c111f..c9228cffd 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "טור הסביבה ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 86bd01a79..55a4ec4ee 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & Mjesta", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 507e04400..c5b0831c3 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index a4c8bffba..c3971b09e 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Նշաններ", "emoji_button.travel": "Ուղեւորություն եւ տեղանքներ", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 5319705dc..c4610c330 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 300bc4484..dcdae5771 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "La lokala tempolineo esas vakua. Skribez ulo publike por iniciar la agiveso!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d70a88dbb..792204830 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi e luoghi", "empty_column.account_timeline": "Non ci sono toot qui!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Non hai ancora bloccato nessun utente.", "empty_column.community": "La timeline locale è vuota. Condividi qualcosa pubblicamente per dare inizio alla festa!", "empty_column.direct": "Non hai ancora nessun messaggio diretto. Quando ne manderai o riceverai qualcuno, apparirà qui.", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index fa1d823d0..ac983a546 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "სიმბოლოები", "emoji_button.travel": "მოგზაურობა და ადგილები", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "ლოკალური თაიმლაინი ცარიელია. დაწერეთ რაიმე ღიად ან ქენით რაიმე სხვა!", "empty_column.direct": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 12cdf25c9..ee7bf5d6e 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Таңбалар", "emoji_button.travel": "Саяхат", "empty_column.account_timeline": "Жазба жоқ ешқандай!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Ешкімді бұғаттамағансыз.", "empty_column.community": "Жергілікті желі бос. Сіз бастап жазыңыз!", "empty_column.direct": "Әзірше дым хат жоқ. Өзіңіз жазып көріңіз алдымен.", @@ -246,7 +247,7 @@ "notification.favourite": "{name} жазбаңызды таңдаулыға қосты", "notification.follow": "{name} сізге жазылды", "notification.mention": "{name} сізді атап өтті", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Бұл сауалнаманың мерзімі аяқталыпты", "notification.reblog": "{name} жазбаңызды бөлісті", "notifications.clear": "Ескертпелерді тазарт", "notifications.clear_confirmation": "Шынымен барлық ескертпелерді өшіресіз бе?", @@ -257,7 +258,7 @@ "notifications.column_settings.filter_bar.show": "Көрсету", "notifications.column_settings.follow": "Жаңа оқырмандар:", "notifications.column_settings.mention": "Аталымдар:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Нәтижелері:", "notifications.column_settings.push": "Push ескертпелер", "notifications.column_settings.reblog": "Бөлісулер:", "notifications.column_settings.show": "Бағанда көрсет", @@ -267,7 +268,7 @@ "notifications.filter.favourites": "Таңдаулылар", "notifications.filter.follows": "Жазылулар", "notifications.filter.mentions": "Аталымдар", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "Сауалнама нәтижелері", "notifications.group": "{count} ескертпе", "poll.closed": "Жабық", "poll.refresh": "Жаңарту", @@ -366,7 +367,7 @@ "upload_area.title": "Жүктеу үшін сүйреп әкеліңіз", "upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.", - "upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды", + "upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.", "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз", "upload_form.focus": "Превьюді өзгерту", "upload_form.undo": "Өшіру", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 0fa0c4fde..ac3342699 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Ceļošana & Vietas", "empty_column.account_timeline": "Šeit ziņojumu nav!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Tu neesi vēl nevienu bloķējis.", "empty_column.community": "Lokālā laika līnija ir tukša. :/ Ieraksti kaut ko lai sākas rosība!", "empty_column.direct": "Tev nav privāto ziņu. Tiklīdz saņemsi tās šeit parādīsies.", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index eedd4c6f3..220cc86f9 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index cac676c7b..5fb445209 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", "empty_column.account_timeline": "Hier zijn geen toots!", + "empty_column.account_unavailable": "Profiel is niet beschikbaar", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 9556c5ad8..fc2c3c573 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symboler", "emoji_button.travel": "Reise & steder", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokale tidslinjen er tom. Skriv noe offentlig for å få snøballen til å rulle!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 8fc8762a4..4dfb9904e 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Lo tèxte es pas rescondut", "compose_form.spoiler_placeholder": "Escrivètz l’avertiment aquí", "confirmation_modal.cancel": "Anullar", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blocar e senhalar", "confirmations.block.confirm": "Blocar", "confirmations.block.message": "Volètz vertadièrament blocar {name} ?", "confirmations.delete.confirm": "Escafar", @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", "empty_column.account_timeline": "Cap de tuts aquí !", + "empty_column.account_unavailable": "Perfil pas disponible", "empty_column.blocks": "Avètz pas blocat degun pel moment.", "empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !", "empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.", @@ -358,7 +359,7 @@ "tabs_bar.search": "Recèrcas", "time_remaining.days": "demòra{number, plural, one { # jorn} other {n # jorns}}", "time_remaining.hours": "demòra{number, plural, one { # ora} other {n # oras}}", - "time_remaining.minutes": "demòr{number, plural, one { # minuta} other {nn # minutas}}", + "time_remaining.minutes": "demòra{number, plural, one { # minuta} other {n # minutas}}", "time_remaining.moments": "Moments restants", "time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 505f35286..fce97f00e 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -121,7 +121,7 @@ "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", "empty_column.account_timeline": "Brak wpisów tutaj!", - "empty_column.account_timeline_blocked": "Jesteś zablokowany(-a)", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", "empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index c2bac0f07..5b07c2295 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", "empty_column.account_timeline": "Não há toots aqui!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Você ainda não bloqueou nenhum usuário.", "empty_column.community": "A timeline local está vazia. Escreva algo publicamente para começar!", "empty_column.direct": "Você não tem nenhuma mensagem direta ainda. Quando você enviar ou receber uma, as mensagens aparecerão por aqui.", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index 001a48b04..2abc3e252 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", "empty_column.account_timeline": "Sem publicações!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", "empty_column.community": "Ainda não existe conteúdo local para mostrar!", "empty_column.direct": "Ainda não tens qualquer mensagem directa. Quando enviares ou receberes alguma, ela irá aparecer aqui.", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 7192e10b9..c0ec77cc6 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboluri", "emoji_button.travel": "Călătorii si Locuri", "empty_column.account_timeline": "Nici o postare aici!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Nu ai blocat nici un utilizator incă.", "empty_column.community": "Fluxul local este gol. Scrie ceva public pentru a împinge bila la vale!", "empty_column.direct": "Nu ai nici un mesaj direct incă. Când trimiți sau primești unul, va fi afișat aici.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 09425c32e..13f511cbf 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Добавить или удалить из списков", "account.badges.bot": "Бот", "account.block": "Блокировать", "account.block_domain": "Блокировать все с {domain}", @@ -15,8 +15,8 @@ "account.follows.empty": "Этот пользователь ни на кого не подписан.", "account.follows_you": "Подписан(а) на Вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.link_verified_on": "Владение этой ссылкой было проверено {date}", + "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", "account.media": "Медиа", "account.mention": "Упомянуть", "account.moved_to": "Ищите {name} здесь:", @@ -71,10 +71,10 @@ "compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.", "compose_form.lock_disclaimer.lock": "закрыт", "compose_form.placeholder": "О чем Вы думаете?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Добавить", + "compose_form.poll.duration": "Длительность опроса", + "compose_form.poll.option_placeholder": "Вариант {number}", + "compose_form.poll.remove_option": "Удалить этот вариант", "compose_form.publish": "Трубить", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "Медиафайлы не отмечены как чувствительные", @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Текст не скрыт", "compose_form.spoiler_placeholder": "Текст предупреждения", "confirmation_modal.cancel": "Отмена", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Заблокировать и пожаловаться", "confirmations.block.confirm": "Заблокировать", "confirmations.block.message": "Вы уверены, что хотите заблокировать {name}?", "confirmations.delete.confirm": "Удалить", @@ -96,8 +96,8 @@ "confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?", "confirmations.redraft.confirm": "Удалить и исправить", "confirmations.redraft.message": "Вы уверены, что хотите удалить этот статус и превратить в черновик? Вы потеряете все ответы, продвижения и отметки 'нравится' к нему.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Ответить", + "confirmations.reply.message": "При ответе текст набираемого сообщения будет перезаписан. Продолжить?", "confirmations.unfollow.confirm": "Отписаться", "confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?", "embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.", @@ -116,7 +116,9 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "Статусов нет!", + "empty_column.account_unavailable": "Профиль недоступен", + "empty_column.account_timeline_blocked": "Вы заблокированы", "empty_column.blocks": "Вы ещё никого не заблокировали.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.", @@ -135,45 +137,45 @@ "follow_request.authorize": "Авторизовать", "follow_request.reject": "Отказать", "getting_started.developers": "Для разработчиков", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Каталог профилей", "getting_started.documentation": "Документация", "getting_started.heading": "Добро пожаловать", "getting_started.invite": "Пригласить людей", "getting_started.open_source_notice": "Mastodon - сервис с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.", "getting_started.security": "Безопасность", "getting_started.terms": "Условия использования", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_header.tag_mode.all": "и {additional}", + "hashtag.column_header.tag_mode.any": "или {additional}", + "hashtag.column_header.tag_mode.none": "без {additional}", + "hashtag.column_settings.select.no_options_message": "Предложений не найдено", + "hashtag.column_settings.select.placeholder": "Введите хэштеги…", + "hashtag.column_settings.tag_mode.all": "Все из списка", + "hashtag.column_settings.tag_mode.any": "Любой из списка", + "hashtag.column_settings.tag_mode.none": "Ни один из списка", + "hashtag.column_settings.tag_toggle": "Включая дополнительные хэштеге из этой колонки", "home.column_settings.basic": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish tutorial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "intervals.full.days": "{number, plural, one {# день} few {# дня} many {# дней} other {# дней}}", + "intervals.full.hours": "{number, plural, one {# час} few {# часа} many {# часов} other {# часов}}", + "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} many {# минут} other {# минут}}", + "introduction.federation.action": "Далее", + "introduction.federation.federated.headline": "Глобальная лента", + "introduction.federation.federated.text": "Публичные статусы с других серверов федеративной сети расположатся в глобальной ленте.", + "introduction.federation.home.headline": "Домашняя лента", + "introduction.federation.home.text": "Статусы от тех, на кого вы подписаны, появятся в вашей домашней ленте. Вы можете подписаться на кого угодно с любого сервера!", + "introduction.federation.local.headline": "Локальная лента", + "introduction.federation.local.text": "Публичные статусы от людей с того же сервера, что и вы, будут отображены в локальной ленте.", + "introduction.interactions.action": "Завершить обучение", + "introduction.interactions.favourite.headline": "Отметки \"нравится\"", + "introduction.interactions.favourite.text": "Вы можете отметить статус, чтобы вернуться к нему позже и дать знать автору, что запись вам понравилась, поставив отметку \"нравится\".", + "introduction.interactions.reblog.headline": "Продвижения", + "introduction.interactions.reblog.text": "Вы можете делиться статусами других людей, продвигая их в своём аккаунте.", + "introduction.interactions.reply.headline": "Ответы", + "introduction.interactions.reply.text": "Вы можете отвечать свои и чужие посты, образуя цепочки сообщений (обсуждения).", + "introduction.welcome.action": "Поехали!", + "introduction.welcome.headline": "Первые шаги", + "introduction.welcome.text": "Добро пожаловать в федеративную сеть! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями на любом сервере. Но этот сервер — {domain} — особенный: на нём располагается ваш профиль. Запомните его название.", "keyboard_shortcuts.back": "перейти назад", "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных", "keyboard_shortcuts.boost": "продвинуть пост", @@ -212,7 +214,7 @@ "lists.account.remove": "Убрать из списка", "lists.delete": "Удалить список", "lists.edit": "Изменить список", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Изменить название", "lists.new.create": "Новый список", "lists.new.title_placeholder": "Заголовок списка", "lists.search": "Искать из ваших подписок", @@ -222,7 +224,7 @@ "missing_indicator.label": "Не найдено", "missing_indicator.sublabel": "Запрашиваемый ресурс не найден", "mute_modal.hide_notifications": "Убрать уведомления от этого пользователя?", - "navigation_bar.apps": "Mobile apps", + "navigation_bar.apps": "Мобильные приложения", "navigation_bar.blocks": "Список блокировки", "navigation_bar.community_timeline": "Локальная лента", "navigation_bar.compose": "Создать новый статус", @@ -246,35 +248,35 @@ "notification.favourite": "{name} понравился Ваш статус", "notification.follow": "{name} подписался(-лась) на Вас", "notification.mention": "{name} упомянул(а) Вас", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.reblog": "{name} продвинул(а) Ваш статус", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.column_settings.alert": "Десктопные уведомления", "notifications.column_settings.favourite": "Нравится:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Отображать все категории", + "notifications.column_settings.filter_bar.category": "Фильтры по категориям", + "notifications.column_settings.filter_bar.show": "Показывать", "notifications.column_settings.follow": "Новые подписчики:", "notifications.column_settings.mention": "Упоминания:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Результаты опроса:", "notifications.column_settings.push": "Push-уведомления", "notifications.column_settings.reblog": "Продвижения:", "notifications.column_settings.show": "Показывать в колонке", "notifications.column_settings.sound": "Проигрывать звук", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.all": "Все", + "notifications.filter.boosts": "Продвижения", + "notifications.filter.favourites": "Отметки \"нравится\"", + "notifications.filter.follows": "Новые подписчики", + "notifications.filter.mentions": "Упоминания", + "notifications.filter.polls": "Результаты опросов", "notifications.group": "{count} уведомл.", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.closed": "Завершён", + "poll.refresh": "Обновить", + "poll.total_votes": "{count, plural, one {# голос} few {# голоса} many {# голосов} other {# голосов}}", + "poll.vote": "Голосовать", + "poll_button.add_poll": "Добавить опрос", + "poll_button.remove_poll": "Удалить опрос", "privacy.change": "Изменить видимость статуса", "privacy.direct.long": "Показать только упомянутым", "privacy.direct.short": "Направленный", @@ -292,12 +294,12 @@ "relative_time.minutes": "{number}м", "relative_time.seconds": "{number}с", "reply_indicator.cancel": "Отмена", - "report.forward": "Переслать для {target}", + "report.forward": "Переслать в {target}", "report.forward_hint": "Этот аккаунт расположен на другом сервере. Отправить туда анонимную копию Вашей жалобы?", "report.hint": "Жалоба будет отправлена модераторам Вашего сервера. Вы также можете указать подробную причину жалобы ниже:", "report.placeholder": "Комментарий", "report.submit": "Отправить", - "report.target": "Жалуемся на {target}", + "report.target": "Жалоба на {target}", "search.placeholder": "Поиск", "search_popout.search_format": "Продвинутый формат поиска", "search_popout.tips.full_text": "Возвращает посты, которые Вы написали, отметили как 'избранное', продвинули или в которых были упомянуты, а также содержащие юзернейм, имя и хэштеги.", @@ -309,12 +311,12 @@ "search_results.hashtags": "Хэштеги", "search_results.statuses": "Посты", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "Открыть интерфейс модератора для @{name}", + "status.admin_status": "Открыть этот статус в интерфейсе модератора", "status.block": "Заблокировать @{name}", "status.cancel_reblog_private": "Не продвигать", "status.cannot_reblog": "Этот статус не может быть продвинут", - "status.copy": "Copy link to status", + "status.copy": "Копировать ссылку на запись", "status.delete": "Удалить", "status.detailed_status": "Подробный просмотр обсуждения", "status.direct": "Написать @{name}", @@ -326,11 +328,11 @@ "status.mention": "Упомянуть @{name}", "status.more": "Больше", "status.mute": "Заглушить @{name}", - "status.mute_conversation": "Заглушить всю цепочку", + "status.mute_conversation": "Заглушить всё обсуждение", "status.open": "Развернуть статус", "status.pin": "Закрепить в профиле", "status.pinned": "Закреплённый статус", - "status.read_more": "Read more", + "status.read_more": "Ещё", "status.reblog": "Продвинуть", "status.reblog_private": "Продвинуть для своей аудитории", "status.reblogged_by": "{name} продвинул(а)", @@ -346,27 +348,27 @@ "status.show_less_all": "Свернуть для всех", "status.show_more": "Развернуть", "status.show_more_all": "Развернуть для всех", - "status.show_thread": "Show thread", - "status.unmute_conversation": "Снять глушение с треда", + "status.show_thread": "Показать обсуждение", + "status.unmute_conversation": "Снять глушение с обсуждения", "status.unpin": "Открепить от профиля", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Удалить предложение", + "suggestions.header": "Вам может быть интересно…", "tabs_bar.federated_timeline": "Глобальная", "tabs_bar.home": "Главная", "tabs_bar.local_timeline": "Локальная", "tabs_bar.notifications": "Уведомления", "tabs_bar.search": "Поиск", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "time_remaining.days": "{number, plural, one {остался # день} few {осталось # дня} many {осталось # дней} other {осталось # дней}}", + "time_remaining.hours": "{number, plural, one {остался # час} few {осталось # часа} many {осталось # часов} other {осталось # часов}}", + "time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}", + "time_remaining.moments": "остались считанные мгновения", + "time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}", "trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "upload_area.title": "Перетащите сюда, чтобы загрузить", "upload_button.label": "Добавить медиаконтент", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.limit": "Достигнут лимит загруженных файлов.", + "upload_error.poll": "К опросам нельзя прикреплять файлы.", "upload_form.description": "Описать для людей с нарушениями зрения", "upload_form.focus": "Обрезать", "upload_form.undo": "Отменить", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 52c79c0bb..c4fcb9f18 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", "empty_column.account_timeline": "Niesú tu žiadne príspevky!", + "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!", "empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.", @@ -159,8 +160,8 @@ "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "introduction.federation.action": "Ďalej", "introduction.federation.federated.headline": "Federovaná", - "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazenie vo federovanej časovej osi.", - "introduction.federation.home.headline": "Domov", + "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.", + "introduction.federation.home.headline": "Domovská", "introduction.federation.home.text": "Príspevky od ľudí ktorých následuješ sa zobrazia na tvojej domovskej nástenke. Môžeš následovať hocikoho na ktoromkoľvek serveri!", "introduction.federation.local.headline": "Miestna", "introduction.federation.local.text": "Verejné príspevky od ľudí v rámci toho istého serveru na akom si aj ty, budú zobrazované na miestnej časovej osi.", @@ -177,61 +178,61 @@ "keyboard_shortcuts.back": "dostať sa naspäť", "keyboard_shortcuts.blocked": "otvor zoznam blokovaných užívateľov", "keyboard_shortcuts.boost": "vyzdvihnúť", - "keyboard_shortcuts.column": "zamerať sa na status v jednom zo stĺpcov", - "keyboard_shortcuts.compose": "zamerať sa na písaciu plochu", + "keyboard_shortcuts.column": "zameraj sa na príspevok v jednom zo stĺpcov", + "keyboard_shortcuts.compose": "zameraj sa na písaciu plochu", "keyboard_shortcuts.description": "Popis", "keyboard_shortcuts.direct": "otvor panel súkromných správ", "keyboard_shortcuts.down": "posunúť sa dole v zozname", "keyboard_shortcuts.enter": "otvoriť správu", - "keyboard_shortcuts.favourite": "pridať do obľúbených", + "keyboard_shortcuts.favourite": "pridaj do obľúbených", "keyboard_shortcuts.favourites": "otvor zoznam obľúbených", "keyboard_shortcuts.federated": "otvor federovanú časovú os", "keyboard_shortcuts.heading": "Klávesové skratky", "keyboard_shortcuts.home": "otvor domácu časovú os", "keyboard_shortcuts.hotkey": "Klávesa", - "keyboard_shortcuts.legend": "zobraziť túto legendu", + "keyboard_shortcuts.legend": "zobraz túto legendu", "keyboard_shortcuts.local": "otvor miestnu časovú os", - "keyboard_shortcuts.mention": "spomenúť autora", + "keyboard_shortcuts.mention": "spomeň autora", "keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov", "keyboard_shortcuts.my_profile": "otvor svoj profil", "keyboard_shortcuts.notifications": "otvor panel oboznámení", "keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov", "keyboard_shortcuts.profile": "otvor autorov profil", "keyboard_shortcuts.reply": "odpovedať", - "keyboard_shortcuts.requests": "otvor zoznam požiadavok k následovaniu", - "keyboard_shortcuts.search": "zamerať sa na vyhľadávanie", + "keyboard_shortcuts.requests": "otvor zoznam žiadostí o sledovanie", + "keyboard_shortcuts.search": "zameraj sa na vyhľadávanie", "keyboard_shortcuts.start": "otvor panel ''začíname''", "keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW", - "keyboard_shortcuts.toot": "začať úplne novú hlášku", - "keyboard_shortcuts.unfocus": "nesústrediť sa na písaciu plochu, alebo hľadanie", - "keyboard_shortcuts.up": "posunúť sa vyššie v zozname", - "lightbox.close": "Zatvoriť", + "keyboard_shortcuts.toot": "začni úplne nový príspevok", + "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", + "keyboard_shortcuts.up": "posuň sa vyššie v zozname", + "lightbox.close": "Zatvor", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", - "lists.account.add": "Pridať do zoznamu", - "lists.account.remove": "Odobrať zo zoznamu", + "lists.account.add": "Pridaj do zoznamu", + "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", "lists.edit": "Uprav zoznam", "lists.edit.submit": "Zmeň názov", "lists.new.create": "Pridaj zoznam", "lists.new.title_placeholder": "Názov nového zoznamu", - "lists.search": "Vyhľadávajte medzi užívateľmi ktorých sledujete", + "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", "loading_indicator.label": "Načítam...", - "media_gallery.toggle_visible": "Zapnúť/Vypnúť viditeľnosť", + "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "missing_indicator.label": "Nenájdené", "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť", - "mute_modal.hide_notifications": "Skryť oznámenia od tohto používateľa?", - "navigation_bar.apps": "Mobilné aplikácie", + "mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?", + "navigation_bar.apps": "Aplikácie", "navigation_bar.blocks": "Blokovaní užívatelia", - "navigation_bar.community_timeline": "Lokálna časová os", + "navigation_bar.community_timeline": "Miestna časová os", "navigation_bar.compose": "Napíš nový príspevok", "navigation_bar.direct": "Súkromné správy", "navigation_bar.discover": "Objavuj", "navigation_bar.domain_blocks": "Skryté domény", - "navigation_bar.edit_profile": "Upraviť profil", + "navigation_bar.edit_profile": "Uprav profil", "navigation_bar.favourites": "Obľúbené", - "navigation_bar.filters": "Utĺmené slová", + "navigation_bar.filters": "Filtrované slová", "navigation_bar.follow_requests": "Žiadosti o sledovanie", "navigation_bar.info": "O tomto serveri", "navigation_bar.keyboard_shortcuts": "Klávesové skratky", @@ -239,7 +240,7 @@ "navigation_bar.logout": "Odhlás sa", "navigation_bar.mutes": "Ignorovaní užívatelia", "navigation_bar.personal": "Osobné", - "navigation_bar.pins": "Pripnuté tooty", + "navigation_bar.pins": "Pripnuté príspevky", "navigation_bar.preferences": "Voľby", "navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.security": "Zabezbečenie", @@ -247,21 +248,21 @@ "notification.follow": "{name} ťa začal/a následovať", "notification.mention": "{name} ťa spomenul/a", "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", - "notification.reblog": "{name} zdieľal/a tvoj status", - "notifications.clear": "Vyčistiť zoznam notifikácii", - "notifications.clear_confirmation": "Naozaj chcete nenávratne prečistiť všetky vaše notifikácie?", - "notifications.column_settings.alert": "Notifikácie na ploche", + "notification.reblog": "{name} zdieľal/a tvoj príspevok", + "notifications.clear": "Vyčistiť zoznam oboznámení", + "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", + "notifications.column_settings.alert": "Oboznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", "notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie", "notifications.column_settings.filter_bar.category": "Rýchle triedenie", "notifications.column_settings.filter_bar.show": "Ukáž", - "notifications.column_settings.follow": "Noví následujúci:", + "notifications.column_settings.follow": "Noví sledujúci:", "notifications.column_settings.mention": "Zmienenia:", "notifications.column_settings.poll": "Výsledky ankiet:", "notifications.column_settings.push": "Push notifikácie", "notifications.column_settings.reblog": "Vyzdvihnutia:", - "notifications.column_settings.show": "Zobraziť v stĺpci", - "notifications.column_settings.sound": "Prehrať zvuk", + "notifications.column_settings.show": "Zobraz v stĺpci", + "notifications.column_settings.sound": "Prehraj zvuk", "notifications.filter.all": "Všetky", "notifications.filter.boosts": "Vyzdvihnutia", "notifications.filter.favourites": "Obľúbené", @@ -276,13 +277,13 @@ "poll_button.add_poll": "Pridaj anketu", "poll_button.remove_poll": "Odstráň anketu", "privacy.change": "Uprav súkromie príspevku", - "privacy.direct.long": "Pošli iba spomenutým používateľom", + "privacy.direct.long": "Pošli iba spomenutým užívateľom", "privacy.direct.short": "Súkromne", "privacy.private.long": "Pošli iba následovateľom", "privacy.private.short": "Iba pre sledujúcich", - "privacy.public.long": "Poslať všetkým verejne", + "privacy.public.long": "Pošli všetkým verejne", "privacy.public.short": "Verejné", - "privacy.unlisted.long": "Neposielať do verejných časových osí", + "privacy.unlisted.long": "Neposielaj do verejných časových osí", "privacy.unlisted.short": "Verejne, ale nezobraziť v osi", "regeneration_indicator.label": "Načítava sa…", "regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!", @@ -293,11 +294,11 @@ "relative_time.seconds": "{number}s", "reply_indicator.cancel": "Zrušiť", "report.forward": "Posuň ku {target}", - "report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu reportu aj tam?", + "report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu hlásenia aj tam?", "report.hint": "Toto nahlásenie bude zaslané správcom tvojho servera. Môžeš napísať odvôvodnenie, prečo nahlasuješ tento účet:", "report.placeholder": "Ďalšie komentáre", - "report.submit": "Poslať", - "report.target": "Nahlásenie {target}", + "report.submit": "Odošli", + "report.target": "Nahlás {target}", "search.placeholder": "Hľadaj", "search_popout.search_format": "Pokročilé vyhľadávanie", "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezívky, mená a haštagy.", @@ -327,18 +328,18 @@ "status.more": "Viac", "status.mute": "Utíš @{name}", "status.mute_conversation": "Ignoruj konverzáciu", - "status.open": "Otvoriť tento status", + "status.open": "Otvor tento príspevok", "status.pin": "Pripni na profil", "status.pinned": "Pripnutý príspevok", "status.read_more": "Čítaj ďalej", - "status.reblog": "Povýšiť", + "status.reblog": "Vyzdvihni", "status.reblog_private": "Vyzdvihni k pôvodnému publiku", "status.reblogged_by": "{name} povýšil/a", - "status.reblogs.empty": "Nikto ešte nepovýšil tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.", + "status.reblogs.empty": "Nikto ešte nevyzdvihol tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.", "status.redraft": "Vymaž a prepíš", "status.reply": "Odpovedať", - "status.replyAll": "Odpovedať na diskusiu", - "status.report": "Nahlásiť @{name}", + "status.replyAll": "Odpovedz na diskusiu", + "status.report": "Nahlás @{name}", "status.sensitive_toggle": "Klikni pre zobrazenie", "status.sensitive_warning": "Chúlostivý obsah", "status.share": "Zdieľaj", @@ -352,31 +353,31 @@ "suggestions.dismiss": "Zavrhni návrh", "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", - "tabs_bar.home": "Domov", + "tabs_bar.home": "Domovská", "tabs_bar.local_timeline": "Miestna", "tabs_bar.notifications": "Oboznámenia", "tabs_bar.search": "Hľadaj", - "time_remaining.days": "Zostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}", - "time_remaining.hours": "Zostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", - "time_remaining.minutes": "Zostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", + "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}", + "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", + "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "time_remaining.moments": "Ostáva už iba chviľka", - "time_remaining.seconds": "Zostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}", + "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", "upload_area.title": "Pretiahni a pusť pre nahratie", - "upload_button.label": "Pridať médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.", - "upload_error.poll": "Nahrávanie súborov pri anketách nieje dovolené.", + "upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.", "upload_form.description": "Opis pre slabo vidiacich", "upload_form.focus": "Pozmeň náhľad", "upload_form.undo": "Vymaž", "upload_progress.label": "Nahráva sa...", "video.close": "Zavri video", - "video.exit_fullscreen": "Vpnúť zobrazenie na celú obrazovku", + "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", "video.expand": "Zväčši video", - "video.fullscreen": "Zobraziť na celú obrazovku", - "video.hide": "Skryť video", - "video.mute": "Vypnúť zvuk", + "video.fullscreen": "Zobraz na celú obrazovku", + "video.hide": "Skry video", + "video.mute": "Vypni zvuk", "video.pause": "Pauza", "video.play": "Prehraj", "video.unmute": "Zapni zvuk" diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index bef4efe0e..f7a294cfe 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Potovanja in Kraji", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Niste še blokirali nobenega uporabnika.", "empty_column.community": "Lokalna časovnica je prazna. Napišite nekaj javnega, da se bo žoga zakotalila!", "empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga pošljete ali prejmete, se prikaže tukaj.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index b86c6e2ee..89df633cc 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simbole", "emoji_button.travel": "Udhëtime & Vende", "empty_column.account_timeline": "S’ka mesazhe këtu!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.", "empty_column.community": "Rrjedha kohore vendore është e zbrazët. Shkruani diçka publikisht që t’i hyhet valles!", "empty_column.direct": "S’keni ende ndonjë mesazh të drejtpërdrejt. Kur dërgoni ose merrni një të tillë, ai do të shfaqet këtu.", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 155935306..2fc5f985a 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & mesta", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalna lajna je prazna. Napišite nešto javno da lajna produva!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 1124ed8d5..2ae34adca 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Симболи", "emoji_button.travel": "Путовања и места", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Још увек немате блокираних корисника.", "empty_column.community": "Локална временска линија је празна. Напишите нешто јавно да започнете!", "empty_column.direct": "Још увек немате директних порука. Када пошаљете или примите једну, појавиће се овде.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 9093637b3..71264ba52 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symboler", "emoji_button.travel": "Resor & Platser", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!", "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index eedd4c6f3..220cc86f9 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index c93ff63df..7e818c787 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "చిహ్నాలు", "emoji_button.travel": "ప్రయాణం & ప్రదేశాలు", "empty_column.account_timeline": "ఇక్కడ ఏ టూట్లూ లేవు!No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "మీరు ఇంకా ఏ వినియోగదారులనూ బ్లాక్ చేయలేదు.", "empty_column.community": "స్థానిక కాలక్రమం ఖాళీగా ఉంది. మొదలుపెట్టడానికి బహిరంగంగా ఏదో ఒకటి వ్రాయండి!", "empty_column.direct": "మీకు ఇంకా ఏ ప్రత్యక్ష సందేశాలు లేవు. మీరు ఒకదాన్ని పంపినప్పుడు లేదా స్వీకరించినప్పుడు, అది ఇక్కడ చూపబడుతుంది.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index e15382402..630543ada 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -7,7 +7,7 @@ "account.direct": "ส่งข้อความโดยตรงถึง @{name}", "account.domain_blocked": "ซ่อนโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", - "account.endorse": "Feature on profile", + "account.endorse": "แสดงให้เห็นในโปรไฟล์", "account.follow": "ติดตาม", "account.followers": "ผู้ติดตาม", "account.followers.empty": "ยังไม่มีใครติดตามผู้ใช้นี้", @@ -15,7 +15,7 @@ "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร", "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "สื่อ", "account.mention": "กล่าวถึง @{name}", @@ -31,18 +31,18 @@ "account.show_reblogs": "แสดงการดันจาก @{name}", "account.unblock": "เลิกปิดกั้น @{name}", "account.unblock_domain": "เลิกซ่อน {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "ไม่แสดงให้เห็นในโปรไฟล์", "account.unfollow": "เลิกติดตาม", "account.unmute": "เลิกปิดเสียง @{name}", "account.unmute_notifications": "เลิกปิดเสียงการแจ้งเตือนจาก @{name}", "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", "boost_modal.combo": "You can press {combo} to skip this next time", - "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", "bundle_column_error.retry": "ลองอีกครั้ง", "bundle_column_error.title": "ข้อผิดพลาดเครือข่าย", "bundle_modal_error.close": "ปิด", - "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.message": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", "bundle_modal_error.retry": "ลองอีกครั้ง", "column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "column.community": "เส้นเวลาในเว็บ", @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่", "confirmation_modal.cancel": "ยกเลิก", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "ปิดกั้นแล้วรายงาน", "confirmations.block.confirm": "ปิดกั้น", "confirmations.block.message": "คุณแน่ใจหรือไม่ว่าต้องการปิดกั้น {name}?", "confirmations.delete.confirm": "ลบ", @@ -117,6 +117,7 @@ "emoji_button.symbols": "สัญลักษณ์", "emoji_button.travel": "การเดินทางและสถานที่", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -141,7 +142,7 @@ "getting_started.invite": "เชิญผู้คน", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", "getting_started.security": "ความปลอดภัย", - "getting_started.terms": "Terms of service", + "getting_started.terms": "เงื่อนไขการให้บริการ", "hashtag.column_header.tag_mode.all": "และ {additional}", "hashtag.column_header.tag_mode.any": "หรือ {additional}", "hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index cbe1c5726..26eca8239 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -4,7 +4,7 @@ "account.block": "Engelle @{name}", "account.block_domain": "{domain} alanından her şeyi gizle", "account.blocked": "Engellenmiş", - "account.direct": "Direct Message @{name}", + "account.direct": "Mesaj gönder : @{name}", "account.domain_blocked": "Alan adı gizlendi", "account.edit_profile": "Profili düzenle", "account.endorse": "Profildeki özellik", @@ -19,28 +19,28 @@ "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceler.", "account.media": "Medya", "account.mention": "@{name} kullanıcısından bahset", - "account.moved_to": "{name} has moved to:", + "account.moved_to": "{name} şuraya taşındı:", "account.mute": "@{name} kullanıcısını sessize al", "account.mute_notifications": "@{name} kullanıcısının bildirimlerini kapat", - "account.muted": "Sessiz", + "account.muted": "Sesi kısık", "account.posts": "Gönderiler", "account.posts_with_replies": "Gönderiler ve yanıtlar", "account.report": "@{name} kullanıcısını bildir", "account.requested": "Onay bekliyor. Takip isteğini iptal etmek için tıklayın", "account.share": "@{name} kullanıcısının profilini paylaş", - "account.show_reblogs": "@{name} kullanıcısından boost'ları göster", + "account.show_reblogs": "@{name} kullanıcısından boostları göster", "account.unblock": "Engeli kaldır @{name}", "account.unblock_domain": "{domain} göster", "account.unendorse": "Profilde özellik yok", "account.unfollow": "Takipten vazgeç", - "account.unmute": "Sesi aç @{name}", + "account.unmute": "Sesi aç : @{name}", "account.unmute_notifications": "@{name} kullanıcısından bildirimleri aç", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", "boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz", "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_column_error.retry": "Tekrar deneyin", - "bundle_column_error.title": "Network error", + "bundle_column_error.title": "Ağ hatası", "bundle_modal_error.close": "Kapat", "bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_modal_error.retry": "Tekrar deneyin", @@ -54,7 +54,7 @@ "column.lists": "Listeler", "column.mutes": "Susturulmuş kullanıcılar", "column.notifications": "Bildirimler", - "column.pins": "Pinned toot", + "column.pins": "Sabitlenmiş gönderi", "column.public": "Federe zaman tüneli", "column_back_button.label": "Geri", "column_header.hide_settings": "Ayarları gizle", @@ -66,16 +66,16 @@ "column_subheading.settings": "Ayarlar", "community.column_settings.media_only": "Sadece medya", "compose_form.direct_message_warning": "Bu gönderi sadece belirtilen kullanıcılara gönderilecektir.", - "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edin", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin", + "compose_form.hashtag_warning": "Bu paylaşım liste dışı olduğu için hiç bir hashtag'de yer almayacak. Sadece herkese açık gönderiler hashtaglerde bulunabilir.", "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", "compose_form.placeholder": "Aklınızdan ne geçiyor?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.publish": "Toot", + "compose_form.poll.add_option": "Bir seçenek ekleyin", + "compose_form.poll.duration": "Anket süresi", + "compose_form.poll.option_placeholder": "Seçim {number}", + "compose_form.poll.remove_option": "Bu seçimi kaldır", + "compose_form.publish": "Gönder", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "Medya hassas olarak işaretlendi", "compose_form.sensitive.unmarked": "Medya hassas olarak işaretlenmemiş", @@ -83,24 +83,24 @@ "compose_form.spoiler.unmarked": "Metin gizli değil", "compose_form.spoiler_placeholder": "İçerik uyarısı", "confirmation_modal.cancel": "İptal", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Engelle & Bildir", "confirmations.block.confirm": "Engelle", "confirmations.block.message": "{name} kullanıcısını engellemek istiyor musunuz?", "confirmations.delete.confirm": "Sil", "confirmations.delete.message": "Bu gönderiyi silmek istiyor musunuz?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Sil", "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?", "confirmations.domain_block.confirm": "Alan adının tamamını gizle", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.", "confirmations.mute.confirm": "Sessize al", "confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?", "confirmations.redraft.confirm": "Sil ve yeniden tasarla", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", + "confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.", "confirmations.reply.confirm": "Yanıtla", "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?", "confirmations.unfollow.confirm": "Takibi kaldır", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "embed.instructions": "Embed this status on your website by copying the code below.", + "confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?", + "embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.", "embed.preview": "İşte nasıl görüneceği:", "emoji_button.activity": "Aktivite", "emoji_button.custom": "Özel", @@ -112,22 +112,23 @@ "emoji_button.objects": "Nesneler", "emoji_button.people": "İnsanlar", "emoji_button.recent": "Sık kullanılan", - "emoji_button.search": "Emoji ara...", + "emoji_button.search": "Ara...", "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", "empty_column.account_timeline": "Burada hiç gönderi yok!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", "empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.favourited_statuses": "Hiç favori gönderiminiz yok. Bir tane olursa burada görünecek.", + "empty_column.favourites": "Kimse bu gönderiyi favorilerine eklememiş. Biri eklerse burada görünecek.", + "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", "empty_column.home.public_timeline": "herkese açık zaman tüneli", - "empty_column.list": "There is nothing in this list yet.", + "empty_column.list": "Bu listede henüz hiçbir şey yok.", "empty_column.lists": "Henüz hiç listeniz yok. Bir tane oluşturduğunuzda burada görünecek.", "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.", "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", @@ -136,7 +137,7 @@ "follow_request.reject": "Reddet", "getting_started.developers": "Geliştiriciler", "getting_started.directory": "Profil dizini", - "getting_started.documentation": "Documentation", + "getting_started.documentation": "Belgeler", "getting_started.heading": "Başlangıç", "getting_started.invite": "İnsanları davet edin", "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.", @@ -145,12 +146,12 @@ "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", "hashtag.column_header.tag_mode.none": "{additional} olmadan", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.select.no_options_message": "Hiç öneri bulunamadı", + "hashtag.column_settings.select.placeholder": "Hashtagler girin…", "hashtag.column_settings.tag_mode.all": "Bunların hepsi", "hashtag.column_settings.tag_mode.any": "Bunların hiçbiri", "hashtag.column_settings.tag_mode.none": "Bunların hiçbiri", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer", "home.column_settings.basic": "Temel", "home.column_settings.show_reblogs": "Boost edilenleri göster", "home.column_settings.show_replies": "Cevapları göster", @@ -159,122 +160,122 @@ "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", "introduction.federation.action": "İleri", "introduction.federation.federated.headline": "Birleşik", - "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel yayınlar, birleşik zaman çizelgesinde görünecektir.", + "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.", "introduction.federation.home.headline": "Ana sayfa", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", "introduction.federation.local.headline": "Yerel", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", "introduction.interactions.action": "Öğreticiyi bitirin!", "introduction.interactions.favourite.headline": "Favori", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.favourite.text": "Bir gönderiyi favorilerinize alarak sonrası için saklayabilirsiniz ve yazara gönderiyi beğendiğinizi söyleyebilirsiniz.", "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reblog.text": "Başkalarının gönderilerini boostlayarak kendi takipçilerinizle paylaşabillirsiniz.", "introduction.interactions.reply.headline": "Yanıt", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.interactions.reply.text": "Başkalarının gönderilerini ve kendi gönderilerinizi yanıtlayabilirsiniz. Bir konuşmada zincirli bir şekilde olacaklardır.", "introduction.welcome.action": "Hadi gidelim!", "introduction.welcome.headline": "İlk adımlar", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", + "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", + "keyboard_shortcuts.back": "geriye gitmek için", + "keyboard_shortcuts.blocked": "engelli kullanıcılar listesini açmak için", + "keyboard_shortcuts.boost": "boostlamak için", + "keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için", + "keyboard_shortcuts.compose": "yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için", + "keyboard_shortcuts.down": "listede aşağıya inmek için", + "keyboard_shortcuts.enter": "durumu açmak için", + "keyboard_shortcuts.favourite": "favorilere eklemek için", + "keyboard_shortcuts.favourites": "favoriler listesini açmak için", + "keyboard_shortcuts.federated": "federe edilmiş zaman tünelini açmak için", "keyboard_shortcuts.heading": "Klavye kısayolları", - "keyboard_shortcuts.home": "Ana sayfa zaman çizelgesini açmak için", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.home": "ana sayfa zaman çizelgesini açmak için", + "keyboard_shortcuts.hotkey": "Kısatuş", + "keyboard_shortcuts.legend": "bu efsaneyi görüntülemek için", + "keyboard_shortcuts.local": "yerel zaman tünelini açmak için", + "keyboard_shortcuts.mention": "yazardan bahsetmek için", + "keyboard_shortcuts.muted": "susturulmuş kullanıcı listesini açmak için", + "keyboard_shortcuts.my_profile": "profilinizi açmak için", + "keyboard_shortcuts.notifications": "bildirimler sütununu açmak için", + "keyboard_shortcuts.pinned": "sabitlenmiş gönderiler listesini açmak için", + "keyboard_shortcuts.profile": "yazarın profilini açmak için", + "keyboard_shortcuts.reply": "cevaplamak için", + "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", + "keyboard_shortcuts.search": "aramaya odaklanmak için", + "keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için", + "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", + "keyboard_shortcuts.toot": "yeni bir gönderiye başlamak için", + "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", + "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lightbox.next": "Sonraki", + "lightbox.previous": "Önceli", + "lists.account.add": "Listeye ekle", + "lists.account.remove": "Listeden kaldır", + "lists.delete": "Listeyi sil", + "lists.edit": "listeyi düzenle", + "lists.edit.submit": "Başlığı değiştir", + "lists.new.create": "Liste ekle", + "lists.new.title_placeholder": "Yeni liste başlığı", + "lists.search": "Takip ettiğiniz kişiler arasından arayın", + "lists.subheading": "Listeleriniz", "loading_indicator.label": "Yükleniyor...", "media_gallery.toggle_visible": "Görünürlüğü değiştir", "missing_indicator.label": "Bulunamadı", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", + "missing_indicator.sublabel": "Bu kaynak bulunamadı", + "mute_modal.hide_notifications": "Bu kullanıcıdan bildirimler gizlensin mı?", + "navigation_bar.apps": "Mobil uygulamalar", "navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.community_timeline": "Yerel zaman tüneli", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.compose": "Yeni bir gönderi yazın", + "navigation_bar.direct": "Direkt Mesajlar", + "navigation_bar.discover": "Keşfet", + "navigation_bar.domain_blocks": "Gizli alan adları", "navigation_bar.edit_profile": "Profili düzenle", "navigation_bar.favourites": "Favoriler", - "navigation_bar.filters": "Muted words", + "navigation_bar.filters": "Susturulmuş kelimeler", "navigation_bar.follow_requests": "Takip istekleri", "navigation_bar.info": "Genişletilmiş bilgi", - "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", + "navigation_bar.keyboard_shortcuts": "Klavye kısayolları", + "navigation_bar.lists": "Listeler", "navigation_bar.logout": "Çıkış", "navigation_bar.mutes": "Sessize alınmış kullanıcılar", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.personal": "Kişisel", + "navigation_bar.pins": "Sabitlenmiş gönderiler", "navigation_bar.preferences": "Tercihler", "navigation_bar.public_timeline": "Federe zaman tüneli", - "navigation_bar.security": "Security", + "navigation_bar.security": "Güvenlik", "notification.favourite": "{name} senin durumunu favorilere ekledi", "notification.follow": "{name} seni takip ediyor", "notification.mention": "{name} mentioned you", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Oy verdiğiniz bir anket bitti", "notification.reblog": "{name} senin durumunu boost etti", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.alert": "Masaüstü bildirimleri", "notifications.column_settings.favourite": "Favoriler:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri göster", + "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", + "notifications.column_settings.filter_bar.show": "Göster", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.mention": "Bahsedilenler:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boost’lar:", + "notifications.column_settings.poll": "Anket sonuçları:", + "notifications.column_settings.push": "Push bildirimleri", + "notifications.column_settings.reblog": "Boostlar:", "notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.sound": "Ses çal", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "notifications.filter.all": "Tümü", + "notifications.filter.boosts": "Boostlar", + "notifications.filter.favourites": "Favoriler", + "notifications.filter.follows": "Takip edilenler", + "notifications.filter.mentions": "Bahsetmeler", + "notifications.filter.polls": "Anket sonuçları", + "notifications.group": "{count} bildirim", + "poll.closed": "Kapandı", + "poll.refresh": "Yenile", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.vote": "Oy ver", + "poll_button.add_poll": "Bir anket ekleyin", + "poll_button.remove_poll": "Anket kaldır", "privacy.change": "Gönderi gizliliğini ayarla", "privacy.direct.long": "Sadece bahsedilen kişilere gönder", "privacy.direct.short": "Direkt", @@ -284,100 +285,100 @@ "privacy.public.short": "Herkese açık", "privacy.unlisted.long": "Herkese açık zaman tüneline gönderme", "privacy.unlisted.short": "Listelenmemiş", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "regeneration_indicator.label": "Yükleniyor…", + "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!", + "relative_time.days": "{number}g", + "relative_time.hours": "{number}s", + "relative_time.just_now": "şimdi", + "relative_time.minutes": "{number}dk", + "relative_time.seconds": "{number}sn", "reply_indicator.cancel": "İptal", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.forward": "Şu kişiye ilet : {target}", + "report.forward_hint": "Bu hesap başka bir sunucudan. Anonimleştirilmiş bir rapor oraya da gönderilsin mi?", + "report.hint": "Bu rapor sunucu moderatörlerine gönderilecek. Bu hesabı neden bildirdiğiniz hakkında bilgi verebirsiniz:", "report.placeholder": "Ek yorumlar", "report.submit": "Gönder", "report.target": "Raporlama", "search.placeholder": "Ara", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Gelişmiş arama formatı", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.status": "durum", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_popout.tips.user": "kullanıcı", + "search_results.accounts": "İnsanlar", + "search_results.hashtags": "Hashtagler", + "search_results.statuses": "Gönderiler", "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu durumu açın", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", + "status.block": "Engelle : @{name}", + "status.cancel_reblog_private": "Boost'u geri al", "status.cannot_reblog": "Bu gönderi boost edilemez", "status.copy": "Bağlantı durumunu kopyala", "status.delete": "Sil", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", + "status.detailed_status": "Detaylı yazışma dökümü", + "status.direct": "@{name}'e gönder", + "status.embed": "Gömülü", "status.favourite": "Favorilere ekle", - "status.filtered": "Filtered", + "status.filtered": "Filtrelenmiş", "status.load_more": "Daha fazla", "status.media_hidden": "Gizli görsel", - "status.mention": "Bahset @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", + "status.mention": "Bahset : @{name}", + "status.more": "Daha fazla", + "status.mute": "Sustur : @{name}", + "status.mute_conversation": "Yazışmayı sustur", "status.open": "Bu gönderiyi genişlet", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Boost'la", + "status.pin": "Profile sabitle", + "status.pinned": "Sabitlenmiş gönderi", + "status.read_more": "Daha dazla oku", + "status.reblog": "Boostla", "status.reblog_private": "Boost to original audience", "status.reblogged_by": "{name} boost etti", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.reblogs.empty": "Kimse bu gönderiyi boostlamadı. Biri yaptığında burada gözükecek.", + "status.redraft": "Sil & tekrar taslakla", "status.reply": "Cevapla", "status.replyAll": "Konuşmayı cevapla", "status.report": "@{name}'i raporla", "status.sensitive_toggle": "Görmek için tıklayınız", "status.sensitive_warning": "Hassas içerik", - "status.share": "Share", - "status.show_less": "Daha azı", - "status.show_less_all": "Show less for all", - "status.show_more": "Daha fazlası", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", + "status.share": "Paylaş", + "status.show_less": "Daha az göster", + "status.show_less_all": "Hepsi için daha az göster", + "status.show_more": "Daha fazla göster", + "status.show_more_all": "Hepsi için daha fazla göster", + "status.show_thread": "Başlığı göster", "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "status.unpin": "Profilden sabitlemeyi kaldır", + "suggestions.dismiss": "Öneriyi görmezden gel", + "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", "tabs_bar.federated_timeline": "Federe", "tabs_bar.home": "Ana sayfa", "tabs_bar.local_timeline": "Yerel", "tabs_bar.notifications": "Bildirimler", - "tabs_bar.search": "Search", + "tabs_bar.search": "Ara", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", - "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", - "upload_area.title": "Upload için sürükle bırak yapınız", + "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.", + "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız", "upload_button.label": "Görsel ekle", "upload_error.limit": "Dosya yükleme sınırı aşıldı.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.focus": "Kırp", "upload_form.undo": "Geri al", "upload_progress.label": "Yükleniyor...", - "video.close": "Close video", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.close": "Videoyu kapat", + "video.exit_fullscreen": "Tam ekrandan çık", + "video.expand": "Videoyu genişlet", + "video.fullscreen": "Tam ekran", + "video.hide": "Videoyu gizle", + "video.mute": "Sesi kıs", + "video.pause": "Duraklat", + "video.play": "Oynat", + "video.unmute": "Sesi aç" } diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index fc1c4f5d5..51a48a2b2 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!", "empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 702be0ded..f9c6b4d41 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "符号", "emoji_button.travel": "旅行和地点", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!", "empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 5ea738bc9..ed448f65a 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊景物", "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!", "empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 6d33ef070..b43a0b72c 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", "empty_column.account_timeline": "這裡還沒有嘟文!", + "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "你還沒有封鎖任何使用者。", "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index f4f458cf4..a790251f4 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -292,3 +292,29 @@ .directory__tag .trends__item__current { width: auto; } + +.pending-account { + &__header { + color: $darker-text-color; + + a { + color: $ui-secondary-color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + text-decoration: underline; + } + } + + strong { + color: $primary-text-color; + font-weight: 700; + } + } + + &__body { + margin-top: 10px; + } +} diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index 307e509d5..e736d7a7e 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -377,6 +377,10 @@ border: 0; } + strong { + font-weight: 700; + } + thead th { text-align: center; text-transform: uppercase; @@ -414,6 +418,11 @@ } } + &__comment { + width: 50%; + vertical-align: initial !important; + } + @media screen and (max-width: $no-gap-breakpoint) { tbody td.optional { display: none; diff --git a/app/lib/proof_provider/keybase.rb b/app/lib/proof_provider/keybase.rb index 628972e9d..9680b90ee 100644 --- a/app/lib/proof_provider/keybase.rb +++ b/app/lib/proof_provider/keybase.rb @@ -2,7 +2,7 @@ class ProofProvider::Keybase BASE_URL = ENV.fetch('KEYBASE_BASE_URL', 'https://keybase.io') - DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.local_domain) + DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.local_domain) class Error < StandardError; end @@ -50,12 +50,20 @@ class ProofProvider::Keybase end def badge - @badge ||= ProofProvider::Keybase::Badge.new(@proof.account.username, @proof.provider_username, @proof.token) + @badge ||= ProofProvider::Keybase::Badge.new(@proof.account.username, @proof.provider_username, @proof.token, domain) + end + + def verifier + @verifier ||= ProofProvider::Keybase::Verifier.new(@proof.account.username, @proof.provider_username, @proof.token, domain) end private - def verifier - @verifier ||= ProofProvider::Keybase::Verifier.new(@proof.account.username, @proof.provider_username, @proof.token) + def domain + if @proof.account.local? + DOMAIN + else + @proof.account.domain + end end end diff --git a/app/lib/proof_provider/keybase/badge.rb b/app/lib/proof_provider/keybase/badge.rb index 3aa067ecf..f587b1cc7 100644 --- a/app/lib/proof_provider/keybase/badge.rb +++ b/app/lib/proof_provider/keybase/badge.rb @@ -3,10 +3,11 @@ class ProofProvider::Keybase::Badge include RoutingHelper - def initialize(local_username, provider_username, token) + def initialize(local_username, provider_username, token, domain) @local_username = local_username @provider_username = provider_username @token = token + @domain = domain end def proof_url @@ -18,7 +19,7 @@ class ProofProvider::Keybase::Badge end def icon_url - "#{ProofProvider::Keybase::BASE_URL}/#{@provider_username}/proof_badge/#{@token}?username=#{@local_username}&domain=#{domain}" + "#{ProofProvider::Keybase::BASE_URL}/#{@provider_username}/proof_badge/#{@token}?username=#{@local_username}&domain=#{@domain}" end def avatar_url @@ -41,8 +42,4 @@ class ProofProvider::Keybase::Badge def default_avatar_url asset_pack_path('media/images/proof_providers/keybase.png') end - - def domain - Rails.configuration.x.local_domain - end end diff --git a/app/lib/proof_provider/keybase/verifier.rb b/app/lib/proof_provider/keybase/verifier.rb index ab1422323..af69b1bfc 100644 --- a/app/lib/proof_provider/keybase/verifier.rb +++ b/app/lib/proof_provider/keybase/verifier.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true class ProofProvider::Keybase::Verifier - def initialize(local_username, provider_username, token) + def initialize(local_username, provider_username, token, domain) @local_username = local_username @provider_username = provider_username @token = token + @domain = domain end def valid? @@ -49,7 +50,7 @@ class ProofProvider::Keybase::Verifier def query_params { - domain: ProofProvider::Keybase::DOMAIN, + domain: @domain, kb_username: @provider_username, username: @local_username, sig_hash: @token, diff --git a/app/lib/proof_provider/keybase/worker.rb b/app/lib/proof_provider/keybase/worker.rb index 2872f59c1..bcdd18cc5 100644 --- a/app/lib/proof_provider/keybase/worker.rb +++ b/app/lib/proof_provider/keybase/worker.rb @@ -19,9 +19,8 @@ class ProofProvider::Keybase::Worker end def perform(proof_id) - proof = proof_id.is_a?(AccountIdentityProof) ? proof_id : AccountIdentityProof.find(proof_id) - verifier = ProofProvider::Keybase::Verifier.new(proof.account.username, proof.provider_username, proof.token) - status = verifier.status + proof = proof_id.is_a?(AccountIdentityProof) ? proof_id : AccountIdentityProof.find(proof_id) + status = proof.provider_instance.verifier.status # If Keybase thinks the proof is valid, and it exists here in Mastodon, # then it should be live. Keybase just has to notice that it's here diff --git a/app/models/account_identity_proof.rb b/app/models/account_identity_proof.rb index 1ac234735..10b66cccf 100644 --- a/app/models/account_identity_proof.rb +++ b/app/models/account_identity_proof.rb @@ -18,7 +18,7 @@ class AccountIdentityProof < ApplicationRecord belongs_to :account validates :provider, inclusion: { in: ProofProvider::SUPPORTED_PROVIDERS } - validates :provider_username, format: { with: /\A[a-z0-9_]+\z/i }, length: { minimum: 2, maximum: 15 } + validates :provider_username, format: { with: /\A[a-z0-9_]+\z/i }, length: { minimum: 2, maximum: 30 } validates :provider_username, uniqueness: { scope: [:account_id, :provider] } validates :token, format: { with: /\A[a-f0-9]+\z/ }, length: { maximum: 66 } @@ -30,12 +30,12 @@ class AccountIdentityProof < ApplicationRecord delegate :refresh!, :on_success_path, :badge, to: :provider_instance - private - def provider_instance @provider_instance ||= ProofProvider.find(provider, self) end + private + def queue_worker provider_instance.worker_class.perform_async(id) end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 5b71dfad5..83d303c33 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -57,7 +57,8 @@ class Form::AdminSettings attr_accessor(*KEYS) - validates :site_short_description, :site_description, :site_extended_description, :site_terms, :closed_registrations_message, html: true + validates :site_short_description, :site_description, html: { wrap_with: :p } + validates :site_extended_description, :site_terms, :closed_registrations_message, html: true validates :registrations_mode, inclusion: { in: %w(open approved none) } validates :min_invite_role, inclusion: { in: %w(disabled user moderator admin) } validates :site_contact_email, :site_contact_username, presence: true diff --git a/app/models/user.rb b/app/models/user.rb index 66c1543ff..b2fb820af 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -74,6 +74,9 @@ class User < ApplicationRecord has_many :applications, class_name: 'Doorkeeper::Application', as: :owner has_many :backups, inverse_of: :user + has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy + accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? } + validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? validates_with BlacklistedEmailValidator, if: :email_changed? validates_with EmailMxValidator, if: :validate_email_dns? @@ -188,6 +191,10 @@ class User < ApplicationRecord settings.notification_emails['report'] end + def allows_pending_account_emails? + settings.notification_emails['pending_account'] + end + def hides_network? @hides_network ||= settings.hide_network end @@ -292,7 +299,7 @@ class User < ApplicationRecord def notify_staff_about_pending_account! User.staff.includes(:account).each do |u| - next unless u.allows_report_emails? + next unless u.allows_pending_account_emails? AdminMailer.new_pending_account(u.account, self).deliver_later end end diff --git a/app/models/user_invite_request.rb b/app/models/user_invite_request.rb new file mode 100644 index 000000000..2b76c88b9 --- /dev/null +++ b/app/models/user_invite_request.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: user_invite_requests +# +# id :bigint(8) not null, primary key +# user_id :bigint(8) +# text :text +# created_at :datetime not null +# updated_at :datetime not null +# + +class UserInviteRequest < ApplicationRecord + belongs_to :user, inverse_of: :invite_request + validates :text, presence: true, length: { maximum: 420 } +end diff --git a/app/validators/html_validator.rb b/app/validators/html_validator.rb index b7caee5a9..1c9cd303c 100644 --- a/app/validators/html_validator.rb +++ b/app/validators/html_validator.rb @@ -1,18 +1,20 @@ # frozen_string_literal: true class HtmlValidator < ActiveModel::EachValidator + ERROR_RE = /Opening and ending tag mismatch|Unexpected end tag/ + def validate_each(record, attribute, value) return if value.blank? + errors = html_errors(value) - unless errors.empty? - record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s)) - end + + record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s)) unless errors.empty? end private def html_errors(str) - fragment = Nokogiri::HTML.fragment(str) - fragment.errors + fragment = Nokogiri::HTML.fragment(options[:wrap_with] ? "<#{options[:wrap_with]}>#{str}</#{options[:wrap_with]}>" : str) + fragment.errors.select { |error| ERROR_RE =~ error.message } end end diff --git a/app/validators/poll_validator.rb b/app/validators/poll_validator.rb index fd497c8d0..9d7321cad 100644 --- a/app/validators/poll_validator.rb +++ b/app/validators/poll_validator.rb @@ -14,6 +14,6 @@ class PollValidator < ActiveModel::Validator poll.errors.add(:options, I18n.t('polls.errors.over_character_limit', max: MAX_OPTION_CHARS)) if poll.options.any? { |option| option.mb_chars.grapheme_length > MAX_OPTION_CHARS } poll.errors.add(:options, I18n.t('polls.errors.duplicate_options')) unless poll.options.uniq.size == poll.options.size poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at.nil? || poll.expires_at - current_time > MAX_EXPIRATION - poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_short')) if poll.expires_at.present? && poll.expires_at - current_time < MIN_EXPIRATION + poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_short')) if poll.expires_at.present? && (poll.expires_at - current_time).ceil < MIN_EXPIRATION end end diff --git a/app/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index 09cbe2e28..ff32ec8c4 100644 --- a/app/views/about/_registration.html.haml +++ b/app/views/about/_registration.html.haml @@ -10,6 +10,11 @@ = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations? = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations? + - if approved_registrations? + .fields-group + = f.simple_fields_for :invite_request do |invite_request_fields| + = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: false + .fields-group = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), disabled: closed_registrations? diff --git a/app/views/admin/pending_accounts/_account.html.haml b/app/views/admin/pending_accounts/_account.html.haml index c520dc065..1ed5dafdd 100644 --- a/app/views/admin/pending_accounts/_account.html.haml +++ b/app/views/admin/pending_accounts/_account.html.haml @@ -1,14 +1,14 @@ .batch-table__row %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id - .batch-table__row__content.batch-table__row__content--unpadded - %table.accounts-table - %tbody - %tr - %td - = account.user_email - = "(@#{account.username})" - %br/ - = account.user_current_sign_in_ip - %td.accounts-table__count - = table_link_to 'pencil', t('admin.accounts.edit'), admin_account_path(account.id) + .batch-table__row__content.pending-account + .pending-account__header + = link_to admin_account_path(account.id) do + %strong= account.user_email + = "(@#{account.username})" + %br/ + = account.user_current_sign_in_ip + + - if account.user&.invite_request&.text&.present? + .pending-account__body + %p= account.user&.invite_request&.text diff --git a/app/views/admin/pending_accounts/index.html.haml b/app/views/admin/pending_accounts/index.html.haml index 1bfd3824f..171976e33 100644 --- a/app/views/admin/pending_accounts/index.html.haml +++ b/app/views/admin/pending_accounts/index.html.haml @@ -1,7 +1,7 @@ - content_for :page_title do = t('admin.pending_accounts.title', count: User.pending.count) -= form_for(@form, url: admin_pending_accounts_path, method: :patch) do |f| += form_for(@form, url: batch_admin_pending_accounts_path) do |f| = hidden_field_tag :page, params[:page] || 1 .batch-table diff --git a/app/views/admin_mailer/new_pending_account.text.erb b/app/views/admin_mailer/new_pending_account.text.erb index ed31ae2eb..a466ee2de 100644 --- a/app/views/admin_mailer/new_pending_account.text.erb +++ b/app/views/admin_mailer/new_pending_account.text.erb @@ -2,7 +2,11 @@ <%= raw t('admin_mailer.new_pending_account.body') %> -<%= raw t('admin.accounts.email') %>: <%= @account.user_email %> -<%= raw t('admin.accounts.most_recent_ip') %>: <%= @account.user_current_sign_in_ip %> +<%= @account.user_email %> (@<%= @account.username %>) +<%= @account.user_current_sign_in_ip %> +<% if @account.user&.invite_request&.text.present? %> -<%= raw t('application_mailer.view')%> <%= admin_account_url(@account.id) %> +<%= quote_wrap(@account.user&.invite_request&.text) %> +<% end %> + +<%= raw t('application_mailer.view')%> <%= admin_pending_accounts_url %> diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 1caf2b401..bd6e3a13f 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -21,12 +21,19 @@ .fields-group = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' } + .fields-group = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' } + - if approved_registrations? && !@invite.present? + .fields-group + = f.simple_fields_for :invite_request do |invite_request_fields| + = invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: false + = f.input :invite_code, as: :hidden - %p.hint= t('auth.agreement_html', rules_path: about_more_path, terms_path: terms_path) + .fields-group + = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path) .actions = f.button :button, sign_up_message, type: :submit diff --git a/app/views/settings/notifications/show.html.haml b/app/views/settings/notifications/show.html.haml index 8aaac043b..6ec57b502 100644 --- a/app/views/settings/notifications/show.html.haml +++ b/app/views/settings/notifications/show.html.haml @@ -14,6 +14,7 @@ - if current_user.staff? = ff.input :report, as: :boolean, wrapper: :with_label + = ff.input :pending_account, as: :boolean, wrapper: :with_label .fields-group = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff| diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml index c666bafb5..a50f33517 100644 --- a/app/views/settings/preferences/show.html.haml +++ b/app/views/settings/preferences/show.html.haml @@ -6,6 +6,7 @@ %li= link_to t('preferences.publishing'), '#settings_publishing' %li= link_to t('preferences.other'), '#settings_other' %li= link_to t('preferences.web'), '#settings_web' + %li= link_to t('settings.notifications'), settings_notifications_path = simple_form_for current_user, url: settings_preferences_path, html: { method: :put } do |f| = render 'shared/error_messages', object: current_user diff --git a/babel.config.js b/babel.config.js index a506ad8ce..55efafc40 100644 --- a/babel.config.js +++ b/babel.config.js @@ -17,7 +17,7 @@ module.exports = (api) => { ['@babel/proposal-object-rest-spread', { useBuiltIns: true }], ['@babel/proposal-decorators', { legacy: true }], '@babel/proposal-class-properties', - ['react-intl', { messagesDir: './build/messages' }], + ['react-intl', { messagesDir: './build/messages/' }], 'preval', ], }; diff --git a/config/locales/activerecord.de.yml b/config/locales/activerecord.de.yml index 19267cc4c..ce465545b 100644 --- a/config/locales/activerecord.de.yml +++ b/config/locales/activerecord.de.yml @@ -2,6 +2,9 @@ de: activerecord: attributes: + poll: + expires_at: Frist + options: Wahlen status: owned_poll: Umfrage errors: diff --git a/config/locales/activerecord.el.yml b/config/locales/activerecord.el.yml index e396860ea..abeca78ac 100644 --- a/config/locales/activerecord.el.yml +++ b/config/locales/activerecord.el.yml @@ -2,6 +2,9 @@ el: activerecord: attributes: + poll: + expires_at: Προθεσμία + options: Επιλογές status: owned_poll: Ψηφοφορία errors: diff --git a/config/locales/activerecord.fr.yml b/config/locales/activerecord.fr.yml index c4b04c73a..e26e02592 100644 --- a/config/locales/activerecord.fr.yml +++ b/config/locales/activerecord.fr.yml @@ -1,6 +1,10 @@ --- fr: activerecord: + attributes: + poll: + expires_at: Date butoir + options: Choix errors: models: account: diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index 65a83fbee..3792f3476 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -2,6 +2,9 @@ gl: activerecord: attributes: + poll: + expires_at: Caducidade + options: Opcións status: owned_poll: Sondaxe errors: diff --git a/config/locales/activerecord.kk.yml b/config/locales/activerecord.kk.yml index 41d3b2525..fba2e6054 100644 --- a/config/locales/activerecord.kk.yml +++ b/config/locales/activerecord.kk.yml @@ -1,6 +1,10 @@ --- kk: activerecord: + attributes: + poll: + expires_at: Дедлайн + options: Таңдаулар errors: models: account: diff --git a/config/locales/activerecord.nl.yml b/config/locales/activerecord.nl.yml index bdb87e8e5..31348b18f 100644 --- a/config/locales/activerecord.nl.yml +++ b/config/locales/activerecord.nl.yml @@ -2,6 +2,9 @@ nl: activerecord: attributes: + poll: + expires_at: Deadline + options: Keuzes status: owned_poll: Poll errors: diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 2a2d62a7e..d4529428a 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -1,6 +1,10 @@ --- ru: activerecord: + attributes: + poll: + expires_at: Крайний срок + options: Варианты errors: models: account: diff --git a/config/locales/activerecord.sk.yml b/config/locales/activerecord.sk.yml index bba7c66f2..9d59edd5b 100644 --- a/config/locales/activerecord.sk.yml +++ b/config/locales/activerecord.sk.yml @@ -2,6 +2,9 @@ sk: activerecord: attributes: + poll: + expires_at: Uzávierka + options: Voľby status: owned_poll: Anketa errors: @@ -13,4 +16,4 @@ sk: status: attributes: reblog: - taken: status už existuje + taken: príspevku už existuje diff --git a/config/locales/ar.yml b/config/locales/ar.yml index d409ad99a..fe49ac7f6 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -498,7 +498,6 @@ ar: warning: كن حذرا مع هذه البيانات. لا تقم أبدا بمشاركتها مع الآخَرين ! your_token: رمز نفاذك auth: - agreement_html: بمجرد النقر على "التسجيل" أسفله، فإنك تُصرِّح قبول <a href="%{rules_path}">قواعد مثيل الخادوم</a> و <a href="%{terms_path}">شروط الخدمة التي نوفرها لك</a>. change_password: الكلمة السرية confirm_email: تأكيد عنوان البريد الإلكتروني delete_account: حذف حساب @@ -813,9 +812,7 @@ ar: migrate: تهجير الحساب notifications: الإخطارات preferences: التفضيلات - settings: الإعدادات two_factor_authentication: المُصادقة بخُطوَتَيْن - your_apps: تطبيقاتك statuses: attached: description: 'مُرفَق : %{attached}' diff --git a/config/locales/ast.yml b/config/locales/ast.yml index cbfd27b04..7a51be7cf 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -123,7 +123,6 @@ ast: invalid_url: La URL apurrida nun ye válida warning: Ten curiáu con estos datos, ¡enxamás nun los compartas con naide! auth: - agreement_html: Faciendo clic en «Aniciar sesión» aceutes siguir <a href="%{rules_path}"> les regles de la instancia</a> y <a href="%{terms_path}">los nuesos términos del serviciu</a>. change_password: Contraseña delete_account: Desaniciu de la cuenta delete_account_html: Si deseyes desaniciar la to cuenta, pues <a href="%{path}">siguir equí</a>. Va pidísete la confirmación. @@ -301,7 +300,6 @@ ast: import: Importación notifications: Avisos preferences: Preferencies - settings: Axustes two_factor_authentication: Autenticación en dos pasos statuses: attached: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 2424d9399..57aa6f87e 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -122,7 +122,6 @@ bg: export: Експортиране на данни import: Импортиране preferences: Предпочитания - settings: Настройки two_factor_authentication: Двустепенно удостоверяване statuses: open_in_web: Отвори в уеб diff --git a/config/locales/ca.yml b/config/locales/ca.yml index c6ab35cb6..17a5d9d0c 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -507,7 +507,6 @@ ca: warning: Aneu amb compte amb aquestes dades. No les compartiu mai amb ningú! your_token: El teu identificador d'accés auth: - agreement_html: Al fer clic en "Registre" acceptes respectar <a href="%{rules_path}">les normes del servidor</a> i <a href="%{terms_path}">els nostres termes del servei</a>. apply_for_account: Demana una invitació change_password: Contrasenya checkbox_agreement_html: Estic d'acord amb les <a href="%{rules_path}" target="_blank">normes del servidor</a> i <a href="%{terms_path}" target="_blank"> els termes del servei</a> @@ -868,9 +867,7 @@ ca: notifications: Notificacions preferences: Preferències relationships: Seguits i seguidors - settings: Configuració two_factor_authentication: Autenticació de dos factors - your_apps: Les teves aplicacions statuses: attached: description: 'Adjunt: %{attached}' diff --git a/config/locales/co.yml b/config/locales/co.yml index 7fcb087cf..1b0d8ff6a 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -134,6 +134,7 @@ co: moderation_notes: Note di muderazione most_recent_activity: Attività più ricente most_recent_ip: IP più ricente + no_account_selected: Nisun contu hè statu cambiatu postu ch'ùn c'eranu micca selezziunati no_limits_imposed: Nisuna limita imposta not_subscribed: Micca abbunatu outbox_url: URL di l’outbox @@ -512,7 +513,6 @@ co: warning: Abbadate à quessi dati. Ùn i date à nisunu! your_token: Rigenerà a fiscia d’accessu auth: - agreement_html: Cliccà "Arregistrassi" quì sottu vole dì chì site d’accunsentu per siguità <a href="%{rules_path}">e regule di u servore</a> è <a href="%{terms_path}">e cundizione d’usu</a>. apply_for_account: Dumandà un'invitazione change_password: Chjave d’accessu checkbox_agreement_html: Sò d'accunsentu cù e <a href="%{rules_path}" target="_blank">regule di u servore</a> è i <a href="%{terms_path}" target="_blank">termini di u serviziu</a> @@ -860,6 +860,8 @@ co: revoke_success: Sessione rivucata title: Sessioni settings: + account: Contu + account_settings: Parametri di u contu authorized_apps: Applicazione auturizate back: Ritornu nant’à Mastodon delete: Suppressione di u contu @@ -869,13 +871,12 @@ co: featured_tags: Hashtag in vista identity_proofs: Prove d'identità import: Impurtazione + import_and_export: Impurtazione è spurtazione migrate: Migrazione di u contu notifications: Nutificazione preferences: Priferenze relationships: Abbunamenti è abbunati - settings: Parametri two_factor_authentication: Identificazione à dui fattori - your_apps: E vostre applicazione statuses: attached: description: 'Aghjuntu: %{attached}' diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 15cc025f2..ca456b7ef 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -138,6 +138,7 @@ cs: moderation_notes: Moderátorské poznámky most_recent_activity: Nejnovější aktivita most_recent_ip: Nejnovější IP + no_account_selected: Nebyl změněn žádný účet, neboť žádný nebyl zvolen no_limits_imposed: Nejsou nastavena žádná omezení not_subscribed: Neodebírá outbox_url: URL odchozí schránky @@ -518,7 +519,6 @@ cs: warning: Buďte s těmito daty velmi opatrní. Nikdy je s nikým nesdílejte! your_token: Váš přístupový token auth: - agreement_html: Kliknutím na tlačítko „Registrovat“ souhlasíte s následováním <a href="%{rules_path}">pravidel tohoto serveru</a> a <a href="%{terms_path}">našich podmínek používání</a>. apply_for_account: Vyžádat si pozvánku change_password: Heslo checkbox_agreement_html: Souhlasím s <a href="%{rules_path}" target="_blank">pravidly serveru</a> a <a href="%{terms_path}" target="_blank">podmínkami používání</a> @@ -871,6 +871,9 @@ cs: revoke_success: Relace úspěšně zamítnuta title: Relace settings: + account: Účet + account_settings: Nastavení účtu + appearance: Vzhled authorized_apps: Autorizované aplikace back: Zpět na Mastodon delete: Smazání účtu @@ -880,13 +883,13 @@ cs: featured_tags: Zvýrazněné hashtagy identity_proofs: Důkazy identity import: Import + import_and_export: Import a export migrate: Přesunutí účtu notifications: Oznámení preferences: Předvolby + profile: Profil relationships: Sledovaní a sledující - settings: Nastavení two_factor_authentication: Dvoufázové ověřování - your_apps: Vaše aplikace statuses: attached: description: 'Přiloženo: %{attached}' diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 68a445e4c..f365f7173 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -506,7 +506,6 @@ cy: warning: Byddwch yn ofalus a'r data hyn. Peidiwch a'i rannu byth! your_token: Eich tocyn mynediad auth: - agreement_html: Wrth glicio "Cofrestru" isod yr ydych yn cytuno i ddilyn <a href="%{rules_path}">y rheolau ar gyfer yr achos hwn</a> a <a href="%{terms_path}">ein termau gwasanaeth</a>. change_password: Cyfrinair confirm_email: Cadarnhau e-bost delete_account: Dileu cyfrif @@ -813,9 +812,7 @@ cy: migrate: Mudo cyfrif notifications: Hysbysiadau preferences: Dewisiadau - settings: Gosodiadau two_factor_authentication: Awdurdodi dau-gam - your_apps: Eich rhaglenni statuses: attached: description: 'Ynghlwm: %{attached}' diff --git a/config/locales/da.yml b/config/locales/da.yml index 88bf05d17..0787db621 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -432,7 +432,6 @@ da: warning: Vær meget forsigtig med disse data. Del dem aldrig med nogen! your_token: Din adgangs token auth: - agreement_html: Ved at oprette dig erklærer du dig enig i at følge <a href="%{rules_path}">serverens regler</a> og <a href="%{terms_path}">vores servicevilkår</a>. change_password: Kodeord confirm_email: Bekræft email delete_account: Slet konto @@ -701,9 +700,7 @@ da: migrate: Konto migrering notifications: Notifikationer preferences: Præferencer - settings: Indstillinger two_factor_authentication: To-faktor godkendelse - your_apps: Dine applikationer statuses: attached: description: 'Vedhæftede: %{attached}' diff --git a/config/locales/de.yml b/config/locales/de.yml index 5b51f9d85..7138b7269 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -134,6 +134,7 @@ de: moderation_notes: Moderationsnotizen most_recent_activity: Letzte Aktivität most_recent_ip: Letzte IP-Adresse + no_account_selected: Keine Konten wurden verändert, da keine ausgewählt wurden no_limits_imposed: Keine Limits eingesetzt not_subscribed: Nicht abonniert outbox_url: Postausgangs-URL @@ -248,6 +249,7 @@ de: feature_profile_directory: Profilverzeichnis feature_registrations: Registrierung feature_relay: Föderations-Relay + feature_timeline_preview: Zeitleistenvorschau features: Eigenschaften hidden_service: Föderation mit versteckten Diensten open_reports: Offene Meldungen @@ -511,7 +513,6 @@ de: warning: Sei mit diesen Daten sehr vorsichtig. Teile sie mit niemandem! your_token: Dein Zugangs-Token auth: - agreement_html: Indem du dich registrierst, erklärst du dich mit den untenstehenden <a href="%{rules_path}">Regeln des Servers</a> und der <a href="%{terms_path}">Datenschutzerklärung</a> einverstanden. apply_for_account: Eine Einladung anfragen change_password: Passwort checkbox_agreement_html: Ich akzeptiere die <a href="%{rules_path}" target="_blank">Server-Regeln</a> und die <a href="%{terms_path}" target="_blank">Nutzungsbedingungen</a> @@ -653,10 +654,13 @@ de: keybase: invalid_token: Keybase-Tokens sind Hashsignaturen und müssen 66 Hexadezimalzeichen lang sein verification_failed: Keybase nimmt dieses Token nicht als Signatur für Keybase-Benutzer %{kb_username} an. Bitte versuche es nochmal über Keybase. + wrong_user: Kann keinen Beweis für %{proving} erstellen während du als %{current} angemeldet bist. Melde dich als %{proving} an und versuche es noch einmal. explanation_html: Hier kannst du kryptographisch deine anderen Identitäten wie dein Keybase-Profil verbinden. Dadurch können andere Leute dir verschlüsselte Nachrichten senden und dem Inhalt, den sie dir senden, vertrauen. i_am_html: Ich bin %{username} auf %{service}. identity: Identität inactive: Inaktiv + publicize_checkbox: 'Und poste das:' + publicize_toot: 'Es ist offiziell! Ich bin %{username} auf %{service}: %{url}' status: Verifizierungsstatus view_proof: Zeige Nachweis imports: @@ -856,6 +860,9 @@ de: revoke_success: Sitzung erfolgreich geschlossen title: Sitzungen settings: + account: Konto + account_settings: Konto & Sicherheit + appearance: Bearbeiten authorized_apps: Autorisierte Anwendungen back: Zurück zu Mastodon delete: Konto löschen @@ -865,13 +872,13 @@ de: featured_tags: Empfohlene Hashtags identity_proofs: Identitätsnachweise import: Datenimport + import_and_export: Importieren und Exportieren migrate: Konto-Umzug notifications: Benachrichtigungen preferences: Einstellungen + profile: Profil relationships: Folgende und Follower - settings: Einstellungen two_factor_authentication: Zwei-Faktor-Auth - your_apps: Deine Anwendungen statuses: attached: description: 'Angehängt: %{attached}' diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 944f9b556..2d3c86c1f 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -12,6 +12,7 @@ fr: last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. not_found_in_database: "%{authentication_keys} ou mot de passe invalide." + pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. unconfirmed: Vous devez valider votre compte pour continuer. @@ -20,6 +21,7 @@ fr: action: Vérifier l’adresse courriel action_with_app: Confirmer et retourner à %{app} explanation: Vous avez créé un compte sur %{host} avec cette adresse courriel. Vous êtes à un clic de l’activer. Si ce n’était pas vous, veuillez ignorer ce courriel. + explanation_when_pending: Vous avez demandé à vous inscrire à %{host} avec cette adresse courriel. Une fois que vous aurez confirmé cette adresse, nous étudierons votre demande. Vous ne pourrez pas vous connecté d'ici-là. Si votre demande est refusée, vos données seront supprimées du serveur, aucune action supplémentaire de votre part n'est donc requise. Si vous n'êtes pas à l'origine de cette demande, veuillez ignorer ce courriel. extra_html: Merci de consultez également <a href="%{terms_path}">les règles du serveur</a> et <a href="%{policy_path}">nos conditions d’utilisation</a>. subject: 'Mastodon : Merci de confirmer votre inscription sur %{instance}' title: Vérifier l’adresse courriel @@ -60,6 +62,7 @@ fr: signed_up: Bienvenue ! Vous êtes connecté⋅e. signed_up_but_inactive: Vous êtes bien enregistré⋅e. Vous ne pouvez cependant pas vous connecter car votre compte n’est pas encore activé. signed_up_but_locked: Vous êtes bien enregistré⋅e. Vous ne pouvez cependant pas vous connecter car votre compte est verrouillé. + signed_up_but_pending: Un message avec un lien de confirmation a été envoyé à votre adresse courriel. Après avoir cliqué sur le lien, nous étudierons votre demande. Vous serez informé·e si elle a été approuvée. signed_up_but_unconfirmed: Un message contenant un lien de confirmation a été envoyé à votre adresse courriel. Ouvrez ce lien pour activer votre compte. Veuillez vérifier votre dossier d'indésirables si vous ne recevez pas le courriel. update_needs_confirmation: Votre compte a bien été mis à jour, mais nous devons vérifier votre nouvelle adresse courriel. Merci de vérifier vos courriels et de cliquer sur le lien de confirmation pour finaliser la validation de votre nouvelle adresse. Si vous n'avez pas reçu le courriel, vérifiez votre dossier d'indésirables. updated: Votre compte a été modifié avec succès. diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index 2186066c9..65441f24b 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -3,8 +3,8 @@ ru: devise: confirmations: confirmed: Ваш адрес e-mail был успешно подтвержден. - send_instructions: Вы получите e-mail с инструкцией по подтверждению Вашего адреса e-mail в течение нескольких минут. - send_paranoid_instructions: Если Ваш адрес e-mail есть в нашей базе данных, вы получите e-mail с инструкцией по подтверждению Вашего адреса в течение нескольких минут. + send_instructions: Вы получите e-mail с инструкцией по подтверждению вашего адреса e-mail в течение нескольких минут. + send_paranoid_instructions: Если Ваш адрес e-mail есть в нашей базе данных, вы получите e-mail с инструкцией по подтверждению вашего адреса в течение нескольких минут. failure: already_authenticated: Вы уже авторизованы. inactive: Ваш аккаунт еще не активирован. @@ -12,63 +12,67 @@ ru: last_attempt: У Вас есть последняя попытка, после чего вход будет заблокирован. locked: Ваш аккаунт заблокирован. not_found_in_database: Неверно введены %{authentication_keys} или пароль. + pending: Ваша заявка на вступление всё ещё рассматривается. timeout: Ваша сессия истекла. Пожалуйста, войдите снова, чтобы продолжить. unauthenticated: Вам необходимо войти или зарегистрироваться. unconfirmed: Вам необходимо подтвердить ваш адрес e-mail для продолжения. mailer: confirmation_instructions: action: Подтвердите e-mail адрес + action_with_app: Подтвердить и вернуться в %{app} explanation: Вы создали учётную запись на сайте %{host}, используя этот e-mail адрес. Остался лишь один шаг для активации. Если это были не вы, просто игнорируйте письмо. + explanation_when_pending: Вы подали заявку на %{host}, используя этот адрес e-mail. Как только вы его подтвердите, мы начнём изучать вашу заявку. До тех пор вы не сможете войти на сайт. Если ваша заявка будет отклонена, все данные будут автоматически удалены, от вас не потребуется никаких дополнительных действий. Если это были не вы, пожалуйста, проигнорируйте данное письмо. extra_html: Пожалуйста, ознакомьтесь <a href="%{terms_path}">правилами узла</a> and <a href="%{policy_path}">условиями пользования Сервисом</a>. subject: 'Mastodon: Инструкция по подтверждению на узле %{instance}' title: Подтвердите e-mail адрес email_changed: - explanation: 'E-mail адрес Вашей учётной записи будет изменён на:' - extra: Если Вы не меняли адрес e-mail, возможно кто-то получил доступ к Вашей учётной записи. Пожалуйста, срочно смените пароль или свяжитесь с администратором узла, если у Вас нет доступа к учётной записи. + explanation: 'E-mail адрес вашей учётной записи будет изменён на:' + extra: Если Вы не меняли адрес e-mail, возможно кто-то получил доступ к вашей учётной записи. Пожалуйста, срочно смените пароль или свяжитесь с администратором узла, если у вас нет доступа к учётной записи. subject: 'Mastodon: Адрес e-mail изменён' title: Новый адрес e-mail password_change: explanation: Пароль Вашей учётной записи был изменён. - extra: Если Вы не меняли пароль, возможно кто-то получил доступ к Вашей учётной записи. Пожалуйста, срочно смените пароль или свяжитесь с администратором узла, если у Вас нет доступа к учётной записи. + extra: Если Вы не меняли пароль, возможно кто-то получил доступ к вашей учётной записи. Пожалуйста, срочно смените пароль или свяжитесь с администратором узла, если у вас нет доступа к учётной записи. subject: 'Mastodon: Пароль изменен' title: Пароль изменён reconfirmation_instructions: explanation: Подтвердите новый адрес для смены e-mail. - extra: Если смену e-mail инициировали не Вы, пожалуйста, игнорируйте это письмо. Адрес e-mail для учётной записи Mastodon не будет изменён, пока Вы не перейдёте по ссылке выше. + extra: Если смену e-mail инициировали не вы, пожалуйста, игнорируйте это письмо. Адрес e-mail для учётной записи Mastodon не будет изменён, пока вы не перейдёте по ссылке выше. subject: 'Mastodon: Подтверждение e-mail для узла %{instance}' title: Подтвердите e-mail адрес reset_password_instructions: action: Смена пароля - explanation: Вы запросили новый пароль для Вашей учётной записи. - extra: Если это сделали не Вы, пожалуйста, игнорируйте письмо. Ваш пароль не будет изменён, пока Вы не перейдёте по ссылке выше и не создадите новый пароль. + explanation: Вы запросили новый пароль для вашей учётной записи. + extra: Если это сделали не вы, пожалуйста, игнорируйте письмо. Ваш пароль не будет изменён, пока вы не перейдёте по ссылке выше и не создадите новый пароль. subject: 'Mastodon: инструкция по смене пароля' title: Сброс пароля unlock_instructions: subject: 'Mastodon: Инструкция по разблокировке' omniauth_callbacks: - failure: Не получилось аутентифицировать Вас с помощью %{kind} по следующей причине - "%{reason}". + failure: Не получилось аутентифицировать вас с помощью %{kind} по следующей причине - "%{reason}". success: Аутентификация с помощью аккаунта %{kind} прошла успешно. passwords: - no_token: Вы можете получить доступ к этой странице, только перейдя по ссылке в e-mail для сброса пароля. Если Вы действительно перешли по такой ссылке, пожалуйста, удостоверьтесь, что ссылка была введена полностью и без изменений. + no_token: Вы можете получить доступ к этой странице, только перейдя по ссылке в e-mail для сброса пароля. Если вы действительно перешли по такой ссылке, пожалуйста, удостоверьтесь, что ссылка была введена полностью и без изменений. send_instructions: Вы получите e-mail с инструкцией по сбросу пароля в течение нескольких минут. - send_paranoid_instructions: Если Ваш адрес e-mail есть в нашей базе данных, Вы получите e-mail со ссылкой для сброса пароля в течение нескольких минут. + send_paranoid_instructions: Если Ваш адрес e-mail есть в нашей базе данных, вы получите e-mail со ссылкой для сброса пароля в течение нескольких минут. updated: Ваш пароль был успешно изменен. Вход выполнен. updated_not_active: Ваш пароль был успешно изменен. registrations: - destroyed: До свидания! Ваш аккаунт был успешно удален. Мы надеемся скоро увидеть Вас снова. + destroyed: До свидания! Ваш аккаунт был успешно удален. Мы надеемся скоро увидеть вас снова. signed_up: Добро пожаловать! Вы успешно зарегистрировались. - signed_up_but_inactive: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать Вас, поскольку Ваш аккаунт еще не активирован. - signed_up_but_locked: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать Вас, поскольку Ваш аккаунт заблокирован. - signed_up_but_unconfirmed: Сообщение со ссылкой для подтверждения было выслано на Ваш адрес e-mail. Пожалуйста, пройдите по ссылке для активации Вашего аккаунта. - update_needs_confirmation: Вы успешно обновили Ваш аккаунт, но нам нужно подтвердить ваш новый адрес e-mail. Пожалуйста, проверьте почту и пройдите по ссылке для подтверждения Вашего нового адреса. + signed_up_but_inactive: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать вас, поскольку ваш аккаунт еще не активирован. + signed_up_but_locked: Вы успешно зарегистрировались. Тем не менее, мы не можем авторизовать вас, поскольку ваш аккаунт заблокирован. + signed_up_but_pending: На ваш e-mail адрес было отправлено письмо с ссылкой для подтверждения. После перехода по ней, мы начнём рассматривать вашу заявку. В случае подтверждения, мы вас оповестим. + signed_up_but_unconfirmed: Сообщение со ссылкой для подтверждения было выслано на ваш адрес e-mail. Пожалуйста, пройдите по ссылке для активации вашего аккаунта. + update_needs_confirmation: Вы успешно обновили данные учётной записи, но нам нужно подтвердить ваш новый адрес e-mail. Пожалуйста, проверьте почту и перейдите по ссылке из письма для подтверждения вашего нового адреса. updated: Ваш аккаунт был успешно обновлен. sessions: already_signed_out: Выход прошел успешно. signed_in: Вход прошел успешно. signed_out: Выход прошел успешно. unlocks: - send_instructions: Вы получите e-mail с инструкцией по разблокировке Вашего аккаунта в течение нескольких минут. - send_paranoid_instructions: Если Ваш аккаунт существует, Вы получите e-mail с инструкцией по его разблокировке в течение нескольких минут. + send_instructions: Вы получите e-mail с инструкцией по разблокировке вашего аккаунта в течение нескольких минут. + send_paranoid_instructions: Если Ваш аккаунт существует, вы получите e-mail с инструкцией по его разблокировке в течение нескольких минут. unlocked: Ваш аккаунт был успешно разблокирован. пожалуйста, войдите для продолжения. errors: messages: diff --git a/config/locales/el.yml b/config/locales/el.yml index b8fd45a68..f2b6751ff 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -506,7 +506,6 @@ el: warning: Μεγάλη προσοχή με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν! your_token: Το διακριτικό πρόσβασής σου (access token) auth: - agreement_html: Επιλέγοντας το "Εγγραφή", συμφωνείς πως δέχεσαι <a href="%{rules_path}">τους κανόνες αυτού του κόμβου</a> και <a href="%{terms_path}">τους όρους χρήσης του</a>. apply_for_account: Αίτηση πρόσκλησης change_password: Συνθηματικό checkbox_agreement_html: Συμφωνώ με τους <a href="%{rules_path}" target="_blank">κανονισμούς του κόμβου</a> και <a href="%{terms_path}" target="_blank">τους όρους χρήσης</a> @@ -860,9 +859,7 @@ el: notifications: Ειδοποιήσεις preferences: Προτιμήσεις relationships: Ακολουθεί και ακολουθείται - settings: Ρυθμίσεις two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA) - your_apps: Οι εφαρμογές σου statuses: attached: description: 'Συνημμένα: %{attached}' diff --git a/config/locales/en.yml b/config/locales/en.yml index bf06dc9ad..a2cd84fc5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -134,6 +134,7 @@ en: moderation_notes: Moderation notes most_recent_activity: Most recent activity most_recent_ip: Most recent IP + no_account_selected: No accounts were changed as none were selected no_limits_imposed: No limits imposed not_subscribed: Not subscribed outbox_url: Outbox URL @@ -515,7 +516,6 @@ en: warning: Be very careful with this data. Never share it with anyone! your_token: Your access token auth: - agreement_html: By clicking "Sign up" below you agree to follow <a href="%{rules_path}">the rules of the server</a> and <a href="%{terms_path}">our terms of service</a>. apply_for_account: Request an invite change_password: Password checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a> @@ -864,6 +864,9 @@ en: revoke_success: Session successfully revoked title: Sessions settings: + account: Account + account_settings: Account settings + appearance: Appearance authorized_apps: Authorized apps back: Back to Mastodon delete: Account deletion @@ -874,13 +877,13 @@ en: flavours: Flavours identity_proofs: Identity proofs import: Import + import_and_export: Import and export migrate: Account migration notifications: Notifications preferences: Preferences + profile: Profile relationships: Follows and followers - settings: Settings two_factor_authentication: Two-factor Auth - your_apps: Your applications statuses: attached: description: 'Attached: %{attached}' diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 9e6eb5e94..d428a95c3 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -506,7 +506,6 @@ en_GB: warning: Be very careful with this data. Never share it with anyone! your_token: Your access token auth: - agreement_html: By clicking "Sign up" below you agree to follow <a href="%{rules_path}">the rules of the server</a> and <a href="%{terms_path}">our terms of service</a>. apply_for_account: Request an invite change_password: Password checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a> @@ -855,9 +854,7 @@ en_GB: notifications: Notifications preferences: Preferences relationships: Follows and followers - settings: Settings two_factor_authentication: Two-factor Auth - your_apps: Your applications statuses: attached: description: 'Attached: %{attached}' diff --git a/config/locales/eo.yml b/config/locales/eo.yml index dcbf0065b..b85cb1a49 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -507,7 +507,6 @@ eo: warning: Estu tre atenta kun ĉi tiu datumo. Neniam diskonigu ĝin al iu ajn! your_token: Via alira ĵetono auth: - agreement_html: Klakante “Registriĝi” sube, vi konsentas kun <a href="%{rules_path}">la reguloj de la servilo</a> kaj <a href="%{terms_path}">niaj uzkondiĉoj</a>. apply_for_account: Peti inviton change_password: Pasvorto checkbox_agreement_html: Mi samopinii al la <a href="%{rules_path}" target="_blank">Servo reguloj</a> kaj <a href="%{terms_path}" target="_blank">kondiĉo al servadon</a> @@ -870,9 +869,7 @@ eo: notifications: Sciigoj preferences: Preferoj relationships: Follows and followers - settings: Agordoj two_factor_authentication: Dufaktora aŭtentigo - your_apps: Viaj aplikaĵoj statuses: attached: description: 'Ligita: %{attached}' diff --git a/config/locales/es.yml b/config/locales/es.yml index bcc3fe62c..3a8e8dc0b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -437,7 +437,6 @@ es: warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie! your_token: Tu token de acceso auth: - agreement_html: Al hacer click en "Registrarse" acepta seguir <a href="%{rules_path}">las reglas de la instancia</a> y <a href="%{terms_path}">nuestros términos de servicio</a>. change_password: Contraseña confirm_email: Confirmar email delete_account: Borrar cuenta @@ -706,9 +705,7 @@ es: migrate: Migración de cuenta notifications: Notificaciones preferences: Preferencias - settings: Ajustes two_factor_authentication: Autenticación de dos factores - your_apps: Tus aplicaciones statuses: attached: description: 'Adjunto: %{attached}' diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 187a5325b..5ae664cad 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -481,7 +481,6 @@ eu: warning: Kontuz datu hauekin, ez partekatu inoiz inorekin! your_token: Zure sarbide token-a auth: - agreement_html: '"Izena eman" botoia sakatzean <a href="%{rules_path}">zerbitzariaren arauak</a> eta <a href="%{terms_path}">erabilera baldintzak</a> onartzen dituzu.' change_password: Pasahitza confirm_email: Berretsi e-mail helbidea delete_account: Ezabatu kontua @@ -788,9 +787,7 @@ eu: migrate: Kontuaren migrazioa notifications: Jakinarazpenak preferences: Hobespenak - settings: Ezarpenak two_factor_authentication: Bi faktoreetako autentifikazioa - your_apps: Zure aplikazioak statuses: attached: description: 'Erantsita: %{attached}' diff --git a/config/locales/fa.yml b/config/locales/fa.yml index d4ec320cb..3a3455c6d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -506,7 +506,6 @@ fa: warning: خیلی مواظب این اطلاعات باشید و آن را به هیچ کس ندهید! your_token: کد دسترسی شما auth: - agreement_html: با کلیک روی دکمهٔ عضو شدن، شما <a href="%{rules_path}">قوانین این سرور</a> و <a href="%{terms_path}">شرایط استفادهٔ</a> ما را میپذیرید. apply_for_account: درخواست دعوتنامه change_password: رمز checkbox_agreement_html: من <a href="%{rules_path}" target="_blank">قانونهای این سرور</a> و <a href="%{terms_path}" target="_blank">شرایط کاربری</a> را میپذیرم @@ -861,9 +860,7 @@ fa: notifications: اعلانها preferences: ترجیحات relationships: پیگیریها و پیگیران - settings: تنظیمات two_factor_authentication: ورود دومرحلهای - your_apps: برنامهٔ شما statuses: attached: description: 'پیوستشده: %{attached}' diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 029696f7d..e4a0ed22c 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -370,7 +370,6 @@ fi: warning: Säilytä tietoa hyvin. Älä milloinkaan jaa sitä muille! your_token: Pääsytunnus auth: - agreement_html: Rekisteröityessäsi sitoudut noudattamaan <a href="%{rules_path}">instanssin sääntöjä</a> ja <a href="%{terms_path}">käyttöehtoja</a>. change_password: Salasana confirm_email: Vahvista sähköpostiosoite delete_account: Poista tili @@ -614,9 +613,7 @@ fi: migrate: Tilin muutto muualle notifications: Ilmoitukset preferences: Ominaisuudet - settings: Asetukset two_factor_authentication: Kaksivaiheinen todentaminen - your_apps: Omat sovellukset statuses: attached: description: 'Liitetty: %{attached}' diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 421ba1da9..a6c806de3 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -482,7 +482,6 @@ fr: warning: Soyez prudent⋅e avec ces données. Ne les partagez pas ! your_token: Votre jeton d’accès auth: - agreement_html: En cliquant sur "S'inscrire" ci-dessous, vous souscrivez <a href="%{rules_path}">aux règles du serveur</a> et à <a href="%{terms_path}">nos conditions d’utilisation</a>. change_password: Mot de passe confirm_email: Confirmer mon adresse mail delete_account: Supprimer le compte @@ -799,9 +798,7 @@ fr: migrate: Migration de compte notifications: Notifications preferences: Préférences - settings: Réglages two_factor_authentication: Identification à deux facteurs - your_apps: Vos applications statuses: attached: description: 'Attaché : %{attached}' diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 32f642e16..9c4673186 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -506,7 +506,6 @@ gl: warning: Teña moito tino con estos datos. Nunca os comparta con ninguén! your_token: O seu testemuño de acceso auth: - agreement_html: Ao pulsar "Rexistrar" vostede acorda seguir <a href="%{rules_path}">as normas do servidor</a> e <a href="%{terms_path}">os termos do servizo</a>. apply_for_account: Solicite un convite change_password: Contrasinal checkbox_agreement_html: Acepto as <a href="%{rules_path}" target="_blank">regras do servidor</a> e os <a href="%{terms_path}" target="_blank">termos do servizo</a> @@ -856,9 +855,7 @@ gl: notifications: Notificacións preferences: Preferencias relationships: Seguindo e seguidoras - settings: Axustes two_factor_authentication: Validar Doble Factor - your_apps: As súas aplicacións statuses: attached: description: 'Axenado: %{attached}' diff --git a/config/locales/he.yml b/config/locales/he.yml index 089af2beb..e471c4d02 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -310,7 +310,6 @@ he: export: יצוא מידע import: יבוא preferences: העדפות - settings: הגדרות two_factor_authentication: אימות דו-שלבי statuses: open_in_web: פתח ברשת diff --git a/config/locales/hr.yml b/config/locales/hr.yml index f53515d7a..f9c552bce 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -115,7 +115,6 @@ hr: export: Izvoz podataka import: Uvezi preferences: Postavke - settings: Podešenja two_factor_authentication: Dvo-faktorska Autentifikacija statuses: open_in_web: Otvori na webu diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 04318f5e4..b6029eeca 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -309,7 +309,6 @@ hu: warning: Ez érzékeny adat. Soha ne oszd meg másokkal! your_token: Hozzáférési kulcsod auth: - agreement_html: A feliratkozással elfogatod az <a href="%{rules_path}">instancia szabályzatát</a> és a <a href="%{terms_path}">felhasználási feltételeket</a>. delete_account: Felhasználói fiók törlése delete_account_html: Felhasználói fiókod törléséhez <a href="%{path}">kattints ide</a>. A rendszer újbóli megerősítést fog kérni. didnt_get_confirmation: Nem kaptad meg a megerősítési lépéseket? @@ -534,9 +533,7 @@ hu: migrate: Fiók átirányítása notifications: Értesítések preferences: Általános beállítások - settings: Beállítások two_factor_authentication: Kétlépcsős azonosítás - your_apps: Alkalmazásaid statuses: open_in_web: Megnyitás a weben over_character_limit: Túllépted a maximális %{max} karakteres keretet diff --git a/config/locales/id.yml b/config/locales/id.yml index a27f1f008..4323c145f 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -334,7 +334,6 @@ id: export: Expor data import: Impor preferences: Pilihan - settings: Pengaturan two_factor_authentication: Autentikasi Two-factor statuses: open_in_web: Buka di web diff --git a/config/locales/io.yml b/config/locales/io.yml index b926fe641..b5edb2aa3 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -235,7 +235,6 @@ io: export: Exportacar datumi import: Importacar preferences: Preferi - settings: Settings two_factor_authentication: Dufaktora autentikigo statuses: open_in_web: Apertar retnavigile diff --git a/config/locales/it.yml b/config/locales/it.yml index 384ba918b..508b8a0dc 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -467,7 +467,6 @@ it: token_regenerated: Token di accesso rigenerato warning: Fa' molta attenzione con questi dati. Non fornirli mai a nessun altro! auth: - agreement_html: Iscrivendoti, accetti di seguire <a href="%{rules_path}">le regole del server</a> e <a href="%{terms_path}"> le nostre condizioni di servizio</a>. change_password: Password confirm_email: Conferma email delete_account: Elimina account @@ -763,9 +762,7 @@ it: migrate: Migrazione dell'account notifications: Notifiche preferences: Preferenze - settings: Impostazioni two_factor_authentication: Autenticazione a due fattori - your_apps: Le tue applicazioni statuses: attached: description: 'Allegato: %{attached}' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f13dbdb68..a181c76f4 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -9,9 +9,9 @@ ja: administered_by: '管理者:' api: API apps: アプリ - apps_platforms: iOSやAndroid、その他プラットフォームから使用する - browse_directory: ディレクトリで関心を軸に見つける - browse_public_posts: Mastodonの公開ライブストリームを見てみる + apps_platforms: iOSやAndroidなど、各種環境から利用できます + browse_directory: ディレクトリから気になる人を探しましょう + browse_public_posts: Mastodonの公開ライブストリームをご覧ください contact: 連絡先 contact_missing: 未設定 contact_unavailable: N/A @@ -20,13 +20,13 @@ ja: extended_description_html: | <h3>ルールを書くのに適した場所</h3> <p>詳細説明が設定されていません。</p> - federation_hint_html: "%{instance} にアカウントを作ればどこのMastodonや互換性のあるサーバーのユーザーでもフォローできます。" + federation_hint_html: "%{instance} にアカウントがあればどの互換性のあるサーバーのユーザーでもフォローできるでしょう。" generic_description: "%{domain} は、Mastodon サーバーの一つです" get_apps: モバイルアプリを試す hosted_on: Mastodon hosted on %{domain} learn_more: もっと詳しく privacy_policy: プライバシーポリシー - see_whats_happening: 何が起きているのか見てみる + see_whats_happening: やりとりを見てみる server_stats: 'サーバー統計:' source_code: ソースコード status_count_after: @@ -134,6 +134,7 @@ ja: moderation_notes: モデレーションメモ most_recent_activity: 直近の活動 most_recent_ip: 直近のIP + no_account_selected: 何も選択されていないため、変更されていません no_limits_imposed: 制限なし not_subscribed: 購読していない outbox_url: Outbox URL @@ -512,7 +513,6 @@ ja: warning: このデータは気をつけて取り扱ってください。他の人と共有しないでください! your_token: アクセストークン auth: - agreement_html: 登録するをクリックすると <a href="%{rules_path}">サーバーのルール</a> と <a href="%{terms_path}">プライバシーポリシー</a> に従うことに同意したことになります。 apply_for_account: 登録を申請する change_password: パスワード checkbox_agreement_html: <a href="%{rules_path}" target="_blank">サーバーのルール</a> と <a href="%{terms_path}" target="_blank">プライバシーポリシー</a> に同意します @@ -531,7 +531,7 @@ ja: cas: CAS saml: SAML register: 登録する - registration_closed: "%{instance} は現在新しいメンバーを受け入れていません" + registration_closed: "%{instance} は現在、新規登録停止中です" resend_confirmation: 確認メールを再送する reset_password: パスワードを再発行 security: セキュリティ @@ -860,6 +860,9 @@ ja: revoke_success: セッションを削除しました title: セッション settings: + account: アカウント + account_settings: セキュリティ + appearance: プロフィールを編集 authorized_apps: 認証済みアプリ back: Mastodon に戻る delete: アカウントの削除 @@ -870,13 +873,13 @@ ja: flavours: フレーバー identity_proofs: Identity proofs import: データのインポート + import_and_export: インポート・エクスポート migrate: アカウントの引っ越し notifications: 通知 preferences: ユーザー設定 + profile: プロフィール relationships: フォロー・フォロワー - settings: 設定 two_factor_authentication: 二段階認証 - your_apps: アプリ statuses: attached: description: '添付: %{attached}' diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 8e537c745..9781fc5be 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -401,7 +401,6 @@ ka: warning: იყავით ძალიან ფრთხილად ამ მონაცემთან. არასდროს გააზიაროთ ეს! your_token: თქვენი წვდომის ტოკენი auth: - agreement_html: რეგისტრაციით თქვენ ეთანხმებით <a href="%{rules_path}">ინსტანციის წესებს</a> და <a href="%{terms_path}">ჩვენ მომსახურების პირობებს</a>. change_password: პაროლი confirm_email: ელ-ფოსტის დამოწმება delete_account: ანგარიშის გაუქმება @@ -669,9 +668,7 @@ ka: migrate: ანგარიშის მიგრაცია notifications: შეტყობინებები preferences: პრეფერენციები - settings: პარამეტრები two_factor_authentication: მეორე-ფაქტორის აუტენტიფიკაცია - your_apps: თქვენი აპლიკაციები statuses: attached: description: 'თან დართული: %{attached}' diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 4ac4c08b9..84bd71081 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -482,7 +482,6 @@ kk: warning: Be very carеful with this data. Never share it with anyone! your_token: Your access tokеn auth: - agreement_html: '"Тіркелу" батырмасын басу арқылы <a href="%{rules_path}">сервер ережелері</a> мен <a href="%{terms_path}">қолдану шарттарына</a> келісесіз.' change_password: Құпиясөз confirm_email: Еmаil құптау delete_account: Аккаунт өшіру @@ -798,9 +797,7 @@ kk: migrate: Аккаунт көшіру notifications: Ескертпелер preferences: Таңдаулар - settings: Баптаулар two_factor_authentication: Екі-факторлы авторизация - your_apps: Қосымшалар statuses: attached: description: 'Жүктелді: %{attached}' diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 90996b466..6334ad30b 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -134,6 +134,7 @@ ko: moderation_notes: 모더레이션 기록 most_recent_activity: 최근 활동 most_recent_ip: 최근 IP + no_account_selected: 아무 계정도 선택 되지 않아 아무 것도 변경 되지 않았습니다 no_limits_imposed: 제한 없음 not_subscribed: 구독하지 않음 outbox_url: 발신함 URL @@ -514,7 +515,6 @@ ko: warning: 이 데이터를 조심히 다뤄 주세요. 다른 사람들과 절대로 공유하지 마세요! your_token: 액세스 토큰 auth: - agreement_html: 이 등록으로 이 서버의 <a href="%{rules_path}">이용규약</a> 과 <a href="%{terms_path}">약관</a>에 동의하는 것으로 간주됩니다. apply_for_account: 가입 요청하기 change_password: 패스워드 checkbox_agreement_html: <a href="%{rules_path}" target="_blank">서버 규칙</a>과 <a href="%{terms_path}" target="_blank">이용약관</a>에 동의합니다 @@ -862,6 +862,9 @@ ko: revoke_success: 세션이 성공적으로 삭제되었습니다 title: 세션 settings: + account: 계정 + account_settings: 계정 설정 + appearance: 외관 authorized_apps: 인증된 애플리케이션 back: 돌아가기 delete: 계정 삭제 @@ -871,13 +874,13 @@ ko: featured_tags: 추천 해시태그 identity_proofs: 신원 증명 import: 데이터 가져오기 + import_and_export: 가져오기 / 내보내기 migrate: 계정 이동 notifications: 알림 preferences: 사용자 설정 + profile: 프로필 relationships: 팔로잉과 팔로워 - settings: 설정 two_factor_authentication: 2단계 인증 - your_apps: 애플리케이션 statuses: attached: description: '첨부: %{attached}' diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 0f5ca3091..7ea8dc76b 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -490,7 +490,6 @@ lt: warning: Būkite atsargūs su šia informacija. Niekada jos nesidalinkite! your_token: Jūsų prieigos žetonas auth: - agreement_html: Paspaudus "Sign up" Jūs sutinkate sekti <a href="%{rules_path}">serverio taisykles</a> bei <a href="%{terms_path}">naudojimo sąlygas</a>. change_password: Slaptažodis confirm_email: Patvirtinti el paštą delete_account: Ištrinti paskyrą @@ -801,9 +800,7 @@ lt: migrate: Paskyros migracija notifications: Pranešimai preferences: Preferencijos - settings: Nustatymai two_factor_authentication: Dviejų veiksnių autentikacija - your_apps: Jūsų aplikacijos statuses: attached: description: 'Pridėta: %{attached}' diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 2bfab2454..ae274ad70 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -506,7 +506,6 @@ nl: warning: Wees voorzichtig met deze gegevens. Deel het nooit met iemand anders! your_token: Jouw toegangscode auth: - agreement_html: Wanneer je op registreren klikt ga je akkoord met het opvolgen van <a href="%{rules_path}">de regels van deze server</a> en <a href="%{terms_path}">onze gebruiksvoorwaarden</a>. apply_for_account: Een uitnodiging aanvragen change_password: Wachtwoord checkbox_agreement_html: Ik ga akkoord met de <a href="%{rules_path}" target="_blank">regels van deze server</a> en de <a href="%{terms_path}" target="_blank">gebruiksvoorwaarden</a> @@ -857,9 +856,7 @@ nl: notifications: Meldingen preferences: Voorkeuren relationships: Volgers en gevolgden - settings: Instellingen two_factor_authentication: Tweestapsverificatie - your_apps: Jouw toepassingen statuses: attached: description: 'Bijlagen: %{attached}' diff --git a/config/locales/no.yml b/config/locales/no.yml index 773f2d060..f16b314cb 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -309,7 +309,6 @@ warning: Vær veldig forsiktig med denne data. Aldri del den med noen! your_token: Din tilgangsnøkkel auth: - agreement_html: Ved å registrere deg godtar du å følge <a href="%{rules_path}">instansens regler</a> og <a href="%{terms_path}">våre brukervilkår</a>. delete_account: Slett konto delete_account_html: Hvis du ønsker å slette din konto kan du <a href="%{path}">fortsette her</a>. Du vil bli spurt om bekreftelse. didnt_get_confirmation: Mottok du ikke instruksjoner om bekreftelse? @@ -534,9 +533,7 @@ migrate: Kontomigrering notifications: Varslinger preferences: Preferanser - settings: Innstillinger two_factor_authentication: Tofaktorautentisering - your_apps: Dine applikasjoner statuses: open_in_web: Åpne i nettleser over_character_limit: grense på %{max} tegn overskredet diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 85df11cf6..81f17cd3d 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -498,7 +498,6 @@ oc: warning: Mèfi ! Agachatz de partejar aquela donada amb degun ! your_token: Vòstre geton d’accès auth: - agreement_html: En vos marcar acceptatz <a href="%{rules_path}">las règlas del servidor</a> e <a href="%{terms_path}">politica de confidencialitat</a>. apply_for_account: Demandar una invitacion change_password: Senhal checkbox_agreement_html: Accepti las <a href="%{rules_path}" target="_blank">règlas del servidor</a> e <a href="%{terms_path}" target="_blank">los tèrmes del servici</a> @@ -891,9 +890,7 @@ oc: notifications: Notificacions preferences: Preferéncias relationships: Abonaments e seguidors - settings: Paramètres two_factor_authentication: Autentificacion en dos temps - your_apps: Vòstras aplicacions statuses: attached: description: 'Ajustat : %{attached}' diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e67a55edb..d4e07f6e8 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -519,7 +519,6 @@ pl: warning: Przechowuj te dane ostrożnie. Nie udostępniaj ich nikomu! your_token: Twój token dostępu auth: - agreement_html: Rejestrując się, oświadczasz, że zapoznałeś(-aś) się z <a href="%{rules_path}">informacjami o serwerze</a> i <a href="%{terms_path}">zasadami korzystania z usługi</a>. apply_for_account: Poproś o zaproszenie change_password: Hasło checkbox_agreement_html: Zgadzam się z <a href="%{rules_path}" target="_blank">regułami serwera</a> i <a href="%{terms_path}" target="_blank">zasadami korzystania z usługi</a> @@ -892,9 +891,7 @@ pl: notifications: Powiadomienia preferences: Preferencje relationships: Śledzeni i śledzący - settings: Ustawienia two_factor_authentication: Uwierzytelnianie dwuetapowe - your_apps: Twoje aplikacje statuses: attached: description: 'Załączono: %{attached}' diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 6a82a41b1..2d1171288 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -507,7 +507,6 @@ pt-BR: warning: Tenha cuidado com estes dados. Nunca compartilhe com alguém! your_token: Seu token de acesso auth: - agreement_html: Ao se cadastrar você concorda em seguir <a href="%{rules_path}">as regras da instância</a> e <a href="%{terms_path}">os nossos termos de serviço</a>. apply_for_account: Pedir um convite change_password: Senha checkbox_agreement_html: Eu concordo com <a href="%{rules_path}" target="_blank">as regras do servidor</a> e com <a href="%{terms_path}" target="_blank">os termos de serviço</a> @@ -868,9 +867,7 @@ pt-BR: notifications: Notificações preferences: Preferências relationships: Seguindo e seguidores - settings: Configurações two_factor_authentication: Autenticação em dois passos - your_apps: Seus aplicativos statuses: attached: description: 'Anexado: %{attached}' diff --git a/config/locales/pt.yml b/config/locales/pt.yml index d943d6511..b827184e9 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -482,7 +482,6 @@ pt: warning: Cuidado com estes dados. Não partilhar com ninguém! your_token: O teu token de acesso auth: - agreement_html: Registando-te concordas em seguir <a href="%{rules_path}">as regras da instância</a> e <a href="%{terms_path}">os nossos termos de serviço</a>. change_password: Palavra-passe confirm_email: Confirmar e-mail delete_account: Eliminar conta @@ -801,9 +800,7 @@ pt: migrate: Migração de conta notifications: Notificações preferences: Preferências - settings: Configurações two_factor_authentication: Autenticação em dois passos - your_apps: As tuas aplicações statuses: attached: description: 'Anexadas: %{attached}' diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 0331f002f..cdb68c72a 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -8,7 +8,6 @@ ro: one: Toot other: Toots auth: - agreement_html: Prin apăsarea butonului Înscriere de mai jos ești deacord cu <a href="%{rules_path}">regulile acestei instanțe</a> și <a href="%{terms_path}">termenii de utilizare al acestui serviciu</a>. change_password: Parolă confirm_email: Confirmă email delete_account: Șterge contul diff --git a/config/locales/ru.yml b/config/locales/ru.yml index ffc9471cd..edccd9e7c 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -4,19 +4,30 @@ ru: about_hashtag_html: Это публичные статусы, отмеченные хэштегом <strong>#%{hashtag}</strong>. Вы можете взаимодействовать с ними при наличии у Вас аккаунта в глобальной сети Mastodon. about_mastodon_html: Mastodon - это <em>свободная</em> социальная сеть с <em>открытым исходным кодом</em>. Как <em>децентрализованная</em> альтернатива коммерческим платформам, Mastodon предотвращает риск монополизации Вашего общения одной компанией. Выберите сервер, которому Вы доверяете — что бы Вы ни выбрали, Вы сможете общаться со всеми остальными. Любой может запустить свой собственный узел Mastodon и участвовать в <em>социальной сети</em> совершенно бесшовно. about_this: Об этом узле + active_count_after: активных + active_footnote: Ежемесячно активные пользователи (MAU) administered_by: 'Администратор узла:' api: API apps: Приложения + apps_platforms: Используйте Mastodon на iOS, Android и других платформах + browse_directory: Изучайте каталог профилей и ищите по интересам + browse_public_posts: Просматривайте в реальном времени новые статусы в Mastodon contact: Связаться - contact_missing: Не установлено - contact_unavailable: Недоступен + contact_missing: не указан + contact_unavailable: неизв. + discover_users: Находите пользователей + documentation: Документация extended_description_html: | <h3>Хорошее место для правил</h3> <p>Расширенное описание еще не настроено.</p> + federation_hint_html: С учётной записью на %{instance} вы сможете подписываться на людей с любого сервера Mastodon и не только. generic_description: "%{domain} - один из серверов сети" + get_apps: Попробуйте мобильное приложение hosted_on: Mastodon размещен на %{domain} learn_more: Узнать больше privacy_policy: Политика конфиденциальности + see_whats_happening: Узнавайте, что происходит вокруг + server_stats: 'Статистика сервера:' source_code: Исходный код status_count_after: few: статуса @@ -24,6 +35,7 @@ ru: one: статус other: статусов status_count_before: Опубликовано + tagline: Подписывайтесь на друзей и заводите новые знакомства terms: Условия использования user_count_after: few: пользователя @@ -42,6 +54,8 @@ ru: other: подписчиков following: подписки joined: 'Дата регистрации: %{date}' + last_active: последняя активность + link_verified_on: Владение этой ссылкой было проверено %{date} media: Медиа moved_html: "%{name} переехал(а) на %{new_profile_link}:" network_hidden: Эта информация недоступна @@ -62,14 +76,20 @@ ru: admin: Администратор bot: Бот moderator: Модератор + unavailable: Профиль недоступен unfollow: Отписаться admin: + account_actions: + action: Выполнить действие + title: Произвести модерацию аккаунта %{acct} account_moderation_notes: create: Создать created_msg: Заметка модератора успешно создана! delete: Удалить destroyed_msg: Заметка модератора успешно удалена! accounts: + approve: Подтвердить + approve_all: Подтвердить все are_you_sure: Вы уверены? avatar: Аватар by_domain: Домен @@ -83,6 +103,7 @@ ru: confirm: Подтвердить confirmed: Подтверждено confirming: Подтверждение + deleted: Удалён demote: Разжаловать disable: Отключить disable_two_factor_authentication: Отключить 2FA @@ -98,8 +119,11 @@ ru: followers: Подписчики followers_url: URL подписчиков follows: Подписки + header: Заголовок inbox_url: URL входящих + invited_by: Приглашение выдал(а) ip: IP + joined: Дата регистрации location: all: Все local: Локальные @@ -109,15 +133,20 @@ ru: media_attachments: Мультимедийные вложения memorialize: Превратить в Памятник moderation: + active: Действующие all: Все + pending: В ожидании silenced: Заглушенные suspended: Заблокированные title: Модерация moderation_notes: Заметки модератора most_recent_activity: Последняя активность most_recent_ip: Последний IP + no_account_selected: Ничего не выбрано, никакие аккаунты не изменены + no_limits_imposed: Без ограничений not_subscribed: Не подписаны outbox_url: URL исходящих + pending: Ожидает рассмотрения perform_full_suspension: Полная блокировка profile_url: URL профиля promote: Повысить @@ -125,7 +154,10 @@ ru: public: Публичный push_subscription_expires: Подписка PuSH истекает redownload: Обновить аватар + reject: Отклонить + reject_all: Отклонить все remove_avatar: Удалить аватар + remove_header: Удалить шапку resend_confirmation: already_confirmed: Этот пользователь уже подтвержден send: Повторно отправить подтверждение по электронной почте @@ -145,25 +177,30 @@ ru: show: created_reports: Жалобы, отправленные этим аккаунтом targeted_reports: Жалобы на этот аккаунт - silence: Глушение + silence: Заглушить + silenced: Заглушен statuses: Статусы subscribe: Подписаться + suspended: Заморожен title: Аккаунты unconfirmed_email: Неподтверждённый e-mail undo_silenced: Снять глушение undo_suspension: Снять блокировку unsubscribe: Отписаться username: Имя пользователя + warn: Предупредить web: Веб action_logs: actions: assigned_to_self_report: "%{name} назначил(а) жалобу %{target} на себя" change_email_user: "%{name} сменил(а) e-mail пользователя %{target}" confirm_user: "%{name} подтвердил(а) e-mail адрес пользователя %{target}" + create_account_warning: "%{name} отправил(а) предупреждение для %{target}" create_custom_emoji: "%{name} загрузил(а) новый эмодзи %{target}" create_domain_block: "%{name} заблокировал(а) домен %{target}" create_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в чёрный список" demote_user: "%{name} разжаловал(а) пользователя %{target}" + destroy_custom_emoji: "%{name} удалил(а) эмодзи %{target}" destroy_domain_block: "%{name} разблокировал(а) домен %{target}" destroy_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в белый список" destroy_status: "%{name} удалил(а) статус пользователя %{target}" @@ -217,8 +254,10 @@ ru: config: Конфигурация feature_deletions: Удаление аккаунтов feature_invites: Пригласительные ссылки + feature_profile_directory: Каталог профилей feature_registrations: Регистрация feature_relay: Ретрансляторы + feature_timeline_preview: Предпросмотр ленты features: Возможности hidden_service: Федерация со скрытыми сервисами open_reports: открытых жалоб @@ -234,7 +273,7 @@ ru: week_users_active: активно на этой неделе week_users_new: пользователей на этой неделе domain_blocks: - add_new: Добавить новую + add_new: Заблокировать домен created_msg: Блокировка домена обрабатывается destroyed_msg: Блокировка домена снята domain: Домен @@ -248,7 +287,14 @@ ru: suspend: Блокировка title: Новая доменная блокировка reject_media: Запретить медиаконтент - reject_media_hint: Удаляет локально хранимый медиаконтент и запрещает его загрузку в будущем. Не имеет значения в случае блокировки + reject_media_hint: Удаляет локально хранимый медиаконтент и запрещает его загрузку в будущем. Не имеет значения в случае блокировки. + reject_reports: Отклонять жалобы + reject_reports_hint: Игнорировать все жалобы с этого домена. Не имеет значения в случае блокировки. + rejecting_media: отклонение медиафайлов + rejecting_reports: отклонение жалоб + severity: + silence: заглушен + suspend: заморожен show: affected_accounts: few: Влияет на %{count} аккаунта в базе данных @@ -260,7 +306,7 @@ ru: suspend: Снять блокировку со всех существующих аккаунтов этого домена title: Снять блокировку с домена %{domain} undo: Отменить - undo: Отменить + undo: Отменить блокировку домена email_domain_blocks: add_new: Добавить новую created_msg: Доменная блокировка еmail успешно создана @@ -271,8 +317,27 @@ ru: create: Создать блокировку title: Новая доменная блокировка еmail title: Доменная блокировка email + followers: + back_to_account: Вернуться к аккаунту + title: Подписчики пользователя %{acct} instances: + by_domain: Домен + delivery_available: Доставка возможна + known_accounts: + few: "%{count} известных аккаунта" + many: "%{count} известных аккаунтов" + one: "%{count} известный аккаунт" + other: "%{count} известных аккаунтов" + moderation: + all: Все + limited: Ограниченные + title: Модерация title: Известные узлы + total_blocked_by_us: Заблокировано нами + total_followed_by_them: Заблокировано ими + total_followed_by_us: Наших подписчиков + total_reported: Жалобы на них + total_storage: Медиафайлы invites: deactivate_all: Отключить все filter: @@ -281,10 +346,17 @@ ru: expired: Истёкшие title: Фильтр title: Приглашения + pending_accounts: + title: Ожидающие аккаунты (%{count}) relays: add_new: Добавить ретранслятор + delete: Удалить description_html: "<strong>Федеративный ретранслятор</strong> – это промежуточный сервер, который передаёт большие объёмы публичных статусов между серверами, которые подписываются и публикуют туда. <strong>Это может помочь небольшим и средним серверам находить записи со всей федерации</strong>, ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов." + disable: Отключить + disabled: Отключено + enable: Включить enable_hint: Если включено, ваш сервер будет подписан на все публичные статусы с этого ретранслятора и начнёт туда отправлять публичные статусы со своего узла. + enabled: Включено inbox_url: URL ретранслятора pending: Ожидание подтверждения ретранслятора save_and_enable: Сохранить и включить @@ -296,8 +368,8 @@ ru: destroyed_msg: Примечание жалобы удалено! reports: account: - note: заметка - report: жалоба + note: заметок + report: жалоб action_taken_by: 'Действие предпринято:' are_you_sure: Вы уверены? assign_to_self: Назначить себе @@ -317,7 +389,7 @@ ru: report: 'Жалоба #%{id}' reported_account: Аккаунт нарушителя reported_by: Отправитель жалобы - resolved: Разрешено + resolved: Разрешенные resolved_msg: Жалоба успешно обработана! status: Статус title: Жалобы @@ -340,12 +412,18 @@ ru: hero: desc_html: Отображается на главной странице. Рекомендуется разрешение не менее 600х100px. Если не установлено, используется изображение узла title: Баннер узла + mascot: + desc_html: Отображается на различных страницах. Рекомендуется размер не менее 293×205px. Если ничего не выбрано, используется персонаж по умолчанию + title: Персонаж сервера peers_api_enabled: desc_html: Домены, которые были замечены этим узлом среди всей федерации title: Публикация списка обнаруженных узлов preview_sensitive_media: desc_html: Предпросмотр ссылок с остальных веб-сайтов будет показан даже если медиаконтент отмечен как чувствительный title: Показывать чувствительный медиаконтент в предпросмотре OpenGraph + profile_directory: + desc_html: Позволять находить пользователей + title: Включить каталог профилей registrations: closed_message: desc_html: Отображается на титульной странице, когда закрыта регистрация<br>Можно использовать HTML-теги @@ -356,6 +434,12 @@ ru: min_invite_role: disabled: Никого title: Разрешать приглашения от + registrations_mode: + modes: + approved: Для регистрации требуется подтверждение + none: Никто не может регистрироваться + open: Все могут регистрироваться + title: Режим регистраций show_known_fediverse_at_about_page: desc_html: Если включено, показывает посты со всех известных узлов в предпросмотре ленты. В противном случае отображаются только локальные посты. title: Показывать известные узлы в предпросмотре ленты @@ -402,8 +486,25 @@ ru: last_delivery: Последняя доставка title: WebSub topic: Тема + tags: + accounts: Аккаунты + hidden: Скрыты + hide: Скрыть из каталога + name: Хэштег + title: Хэштеги + unhide: Показывать в каталоге + visible: Видны title: Администрирование + warning_presets: + add_new: Добавить + delete: Удалить + edit: Изменить + edit_preset: Удалить шаблон предупреждения + title: Управление шаблонами предупреждений admin_mailer: + new_pending_account: + body: Ниже указана информация об аккаунте. Вы можете одобрить или отклонить заявку. + subject: Новый аккаунт для рассмотрения на %{instance} (%{username}) new_report: body: "%{reporter} подал(а) жалобу на %{target}" body_remote: Кто-то с узла %{domain} пожаловался на %{target} @@ -424,8 +525,9 @@ ru: warning: Будьте очень внимательны с этими данными. Не делитесь ими ни с кем! your_token: Ваш токен доступа auth: - agreement_html: Создавая аккаунт, вы соглашаетесь с <a href="%{rules_path}">правилами узла</a> и <a href="%{terms_path}">нашими условиями обслуживания</a>. + apply_for_account: Запросить приглашение change_password: Пароль + checkbox_agreement_html: Я соглашаюсь с <a href="%{rules_path}" target="_blank">правилами сервера</a> и <a href="%{terms_path}" target="_blank">Условиями использования</a> confirm_email: Подтвердите email delete_account: Удалить аккаунт delete_account_html: Если Вы хотите удалить свой аккаунт, вы можете <a href="%{path}">перейти сюда</a>. У Вас будет запрошено подтверждение. @@ -441,10 +543,12 @@ ru: cas: CAS saml: SAML register: Зарегистрироваться + registration_closed: "%{instance} не принимает новых участников" resend_confirmation: Повторить отправку инструкции для подтверждения reset_password: Сбросить пароль security: Безопасность set_new_password: Задать новый пароль + trouble_logging_in: Не удаётся войти? authorize_follow: already_following: Вы уже подписаны на этот аккаунт error: К сожалению, при поиске удаленного аккаунта возникла ошибка @@ -478,6 +582,18 @@ ru: success_msg: Ваш аккаунт был успешно удален warning_html: Гарантируется удаление контента только на этом узле. Широко распространившийся контент, скорее всего, оставит следы. Сервера, отключенные от сети или отписавшиеся от Ваших обновлений, не обновят свои базы данных. warning_title: О доступности распространившегося контента + directories: + directory: Каталог профилей + enabled: В настоящий момент вы указаны в каталоге. + enabled_but_waiting: Вы согласились находиться в каталоге, но у вас ещё нет необходимого количества подписчиков (%{min_followers}), чтобы оказаться в каталоге. + explanation: Находите пользователей по интересам + explore_mastodon: Изучайте %{title} + how_to_enable: Вы ещё не находитесь в каталоге. Можете добавиться ниже. Используйте хэштеги в разделе "о себе", чтобы вас находили по этим хэштегам! + people: + few: "%{count} человека" + many: "%{count} человек" + one: "%{count} человек" + other: "%{count} человек" errors: '403': У Вас нет доступа к просмотру этой страницы. '404': Страница, которую Вы искали, не существует. @@ -490,6 +606,9 @@ ru: content: Приносим извинения, но на нашей стороне что-то пошло не так. title: Страница неверна noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript. Кроме того, вы можете использовать одно из <a href="%{apps_path}">приложений</a> Mastodon для Вашей платформы. + existing_username_validator: + not_found: не удалось найти локального пользователя с таким именем + not_found_multiple: не удалось найти %{usernames} exports: archive_takeout: date: Дата @@ -500,9 +619,15 @@ ru: size: Размер blocks: Список блокировки csv: CSV + domain_blocks: Доменные блокировки follows: Подписки + lists: Списки mutes: Список глушения storage: Ваш медиаконтент + featured_tags: + add_new: Добавить + errors: + limit: Вы уже добавили максимальное число хэштегов filters: contexts: home: Домашняя лента @@ -524,18 +649,47 @@ ru: more: Ещё… resources: Ссылки generic: + all: Все changes_saved_msg: Изменения успешно сохранены! + copy: Копировать + order_by: Сортировать по save_changes: Сохранить изменения validation_errors: few: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже many: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже one: Что-то здесь не так! Пожалуйста, прочитайте об ошибке ниже other: Что-то здесь не так! Пожалуйста, прочитайте о %{count} ошибках ниже + html_validator: + invalid_markup: 'contains invalid HTML markup: %{error}' + identity_proofs: + active: Активно + authorize: Да, авторизовать + authorize_connection_prompt: Авторизовать эту криптографическую связь? + errors: + failed: Криптографическое соединение не установлено. Попробуйте ещё раз на %{provider}. + keybase: + invalid_token: Токены Keybase — это хэши от подписей и должны быть по длине в 66 hex-символов + verification_failed: Keybase не распознаёт этот токен как подпись пользователя %{kb_username}. Пожалуйста, повторите на Keybase. + wrong_user: Невозможно подтвердить пользователя %{proving}, будучи залогиненным как %{current}. Выполните вход как %{proving} и попробуйте ещё раз. + explanation_html: Здесь вы можете криптографически связать свои остальные идентификаторы, такие как профиль Keybase. Это позволит другим дюдям отправлять вам зашифрованные сообщения и верить отправляемым вами сообщениям. + i_am_html: Я %{username} на %{service}. + identity: Идентификатор + inactive: Неактивно + publicize_checkbox: 'И опубликуйте текст:' + publicize_toot: 'Подтверждено! Я %{username} на %{service}: %{url}' + status: Статус подтверждения + view_proof: Посмотреть доказательство личности imports: + modes: + merge: Объединить + merge_long: Сохранить имеющиеся данные и добавить новые + overwrite: Перезаписать + overwrite_long: Перезаписать имеющиеся данные новыми preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Ваш аккаунт на этом узле из файлов, экспортированных с другого узла. success: Ваши данные были успешно загружены и будут обработаны с должной скоростью types: blocking: Список блокировки + domain_blocking: Список доменных блокировок following: Подписки muting: Список глушения upload: Загрузить @@ -552,6 +706,7 @@ ru: '86400': 1 день expires_in_prompt: Никогда generate: Сгенерировать + invited_by: 'Вас пригласил(а):' max_uses: few: "%{count} исп." many: "%{count} исп." @@ -574,7 +729,7 @@ ru: acct: имя@домен нового аккаунта currently_redirecting: 'Ваш профиль будет перенаправлен на:' proceed: Сохранить - updated_msg: Настройки миграции Вашего аккаунта обновлены! + updated_msg: Настройки миграции вашего аккаунта обновлены! moderation: title: Модерация notification_mailer: @@ -583,28 +738,28 @@ ru: body: Кратко о пропущенных Вами сообщениях с Вашего последнего захода %{since} mention: "%{name} упомянул(а) Вас в:" new_followers_summary: - few: У Вас появилось %{count} новых подписчика! Отлично! - many: У Вас появилось %{count} новых подписчиков! Отлично! - one: Также, пока вас не было, у Вас появился новый подписчик! Ура! - other: Также, пока вас не было, у Вас появилось %{count} новых подписчиков! Отлично! + few: У вас появилось %{count} новых подписчика! Отлично! + many: У вас появилось %{count} новых подписчиков! Отлично! + one: Также, пока вас не было, у вас появился новый подписчик! Ура! + other: Также, пока вас не было, у вас появилось %{count} новых подписчиков! Отлично! subject: - few: "%{count} новых уведомления с Вашего последнего захода \U0001F418" - many: "%{count} новых уведомлений с Вашего последнего захода \U0001F418" - one: "1 новое уведомление с Вашего последнего захода \U0001F418" - other: "%{count} новых уведомлений с Вашего последнего захода \U0001F418" + few: "%{count} новых уведомления с вашего последнего захода \U0001F418" + many: "%{count} новых уведомлений с вашего последнего захода \U0001F418" + one: "1 новое уведомление с вашего последнего захода \U0001F418" + other: "%{count} новых уведомлений с вашего последнего захода \U0001F418" title: В ваше отсутствие… favourite: body: 'Ваш статус понравился %{name}:' - subject: "%{name} понравился Ваш статус" + subject: "%{name} понравился ваш статус" title: Понравившийся статус follow: - body: "%{name} теперь подписан(а) на Вас!" - subject: "%{name} теперь подписан(а) на Вас" + body: "%{name} теперь подписан(а) на вас!" + subject: "%{name} теперь подписан(а) на вас" title: Новый подписчик follow_request: action: Управление запросами на подписку - body: "%{name} запросил Вас о подписке" - subject: "%{name} хочет подписаться на Вас" + body: "%{name} запросил вас о подписке" + subject: "%{name} хочет подписаться на вас" title: Новый запрос о подписке mention: action: Ответить @@ -613,7 +768,7 @@ ru: title: Новое упоминание reblog: body: 'Ваш статус был продвинут %{name}:' - subject: "%{name} продвинул(а) Ваш статус" + subject: "%{name} продвинул(а) ваш статус" title: Новое продвижение number: human: @@ -632,21 +787,59 @@ ru: older: Старше prev: Пред truncate: "…" + polls: + errors: + already_voted: Вы уже голосовали в этом опросе + duplicate_options: содержит одинаковые варианты + duration_too_long: слишком далеко в будущем + duration_too_short: слишком короткий срок + expired: Опрос уже завершился + over_character_limit: каждый не вариант не может быть длиннее %{max} символов + too_few_options: должно быть больше 1 варианта + too_many_options: может содержать не больше %{max} вариантов preferences: languages: Языки other: Другое publishing: Публикация web: WWW + relationships: + activity: Активность аккаунта + dormant: Заброшенные + last_active: Недавно активные + most_recent: Новые + moved: Переехавший + mutual: Общие + primary: Основной + relationship: Связь + remove_selected_domains: Удалить всех подписчиков для выбранных доменов + remove_selected_followers: Удалить выбранных подписчиков + remove_selected_follows: Отписаться от выбранных пользователей + status: Статус аккаунта remote_follow: acct: Введите свой username@domain для продолжения missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей no_account_html: Нет учётной записи? Вы можете <a href='%{sign_up_path}' target='_blank'>зарегистрироваться здесь</a> proceed: Продолжить подписку prompt: 'Вы хотите подписаться на:' + reason_html: "<strong>Почему это необходимо?</strong> <code>%{instance}</code> может не являться сервером, на котором вы зарегистрированы, поэтому нам сперва нужно перенаправить вас на домашний сервер." + remote_interaction: + favourite: + proceed: Отметить как "нравится" + prompt: 'Вы собираетесь поставить отметку "нравится" этому статусу:' + reblog: + proceed: Продвинуть статус + prompt: 'Вы хотите продвинуть этот статус:' + reply: + proceed: Ответить + prompt: 'Вы собираетесь ответить на этот статус:' remote_unfollow: error: Ошибка title: Заголовок unfollowed: Отписаны + scheduled_statuses: + over_daily_limit: Вы превысили лимит в %{limit} запланированных постов на указанный день + over_total_limit: Вы превысили лимит на %{limit} запланированных постов + too_soon: Запланированная дата должна быть в будущем sessions: activity: Последняя активность browser: Браузер @@ -689,19 +882,25 @@ ru: revoke_success: Сессия завершена успешно title: Сессии settings: + account: Учётная запись + account_settings: Настройки учётной записи + appearance: Внешний вид authorized_apps: Авторизованные приложения back: Назад в Mastodon delete: Удаление аккаунта development: Разработка edit_profile: Изменить профиль export: Экспорт данных + featured_tags: Особенные хэштеги + identity_proofs: Подтверждения личности import: Импорт + import_and_export: Импорт и экспорт migrate: Перенос аккаунта notifications: Уведомления preferences: Настройки - settings: Опции + profile: Профиль + relationships: Подписки и подписчики two_factor_authentication: Двухфакторная аутентификация - your_apps: Ваши приложения statuses: attached: description: 'Вложение: %{attached}' @@ -730,6 +929,13 @@ ru: ownership: Нельзя закрепить чужой статус private: Нельзя закрепить непубличный статус reblog: Нельзя закрепить продвинутый статус + poll: + total_votes: + few: "%{count} голоса" + many: "%{count} голосов" + one: "%{count} голос" + other: "%{count} голосов" + vote: Голосовать show_more: Ещё sign_in_to_participate: Войдите, чтобы принять участие в дискуссии title: '%{name}: "%{quote}"' @@ -824,12 +1030,13 @@ ru: <p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p> title: Условия обслуживания и политика конфиденциальности %{instance} themes: - contrast: Высококонтрастная - default: Mastodon + contrast: Mastodon (высококонтрастная) + default: Mastodon (тёмная) mastodon-light: Mastodon (светлая) time: formats: - default: "%b %d, %Y, %H:%M" + default: "%d %b %Y, %H:%M" + month: "%m.%Y" two_factor_authentication: code_hint: Для подтверждения введите код, сгенерированный приложением аутентификатора description_html: При включении <strong>двухфакторной аутентификации</strong>, вход потребует от Вас использования Вашего телефона, который сгенерирует входные токены. @@ -851,26 +1058,46 @@ ru: explanation: Вы запросили полный архив вашего аккаунта Mastodon. Он готов к загрузке! subject: Ваш архив готов к загрузке title: Вынос архива + warning: + explanation: + disable: Пока ваш аккаунт заморожен, ваши данные остаются нетронутыми, но вы не можете производить никаких действий до разблокировки. + silence: Пока ваш аккаунт ограничен, ваши посты на этом сервере увидят только ваши действующие подписчики, а ваш аккаунт может быть исключён из различных каталогов. Впрочем, остальные могут подписаться на вас вручную. + suspend: Ваш аккаунт заблокирован и все ваши посты и загруженные медиафайлы безвозвратно удалены с этого сервера и других серверов, где у вас были подписчики. + review_server_policies: Посмотреть правила сервера + subject: + disable: Ваш аккаунт %{acct} заморожен + none: "%{acct}, вам вынесено предупреждение" + silence: Ваш аккаунт %{acct} был ограничен + suspend: Ваш аккаунт %{acct} был заблокирован + title: + disable: Аккаунт заморожен + none: Предупреждение + silence: Аккаунт ограничен + suspend: Аккаунт заблокирован welcome: edit_profile_action: Настроить профиль - edit_profile_step: Вы можете настроить свой профиль, загрузив аватар, обложку, сменив имя и много чего ещё. Если Вы хотите фильтровать подписчиков до того, как они смогут на Вас подписаться, Вы можете закрыть свой аккаунт. + edit_profile_step: Вы можете настроить свой профиль, загрузив аватар, обложку, сменив имя и много чего ещё. Если вы хотите фильтровать подписчиков до того, как они смогут на вас подписаться, вы можете закрыть свой аккаунт. explanation: Несколько советов для новичков final_action: Начать постить - final_step: 'Начните постить! Ваши публичные посты могут видеть другие, например, в локальной ленте или по хэштегам, даже если у Вас нет подписчиков. Вы также можете поздороваться с остальными и представиться, используя хэштек #приветствие.' + final_step: 'Начните постить! Ваши публичные посты могут видеть другие, например, в локальной ленте или по хэштегам, даже если у вас нет подписчиков. Вы также можете поздороваться с остальными и представиться, используя хэштег #приветствие.' full_handle: Ваше обращение full_handle_hint: То, что Вы хотите сообщить своим друзьям, чтобы они могли написать Вам или подписаться с другого узла. review_preferences_action: Изменить настройки - review_preferences_step: Проверьте все настройки, например, какие письма Вы хотите получать или уровень приватности статусов по умолчанию. Если Вы не страдаете морской болезнь, можете включить автовоспроизведение GIF. + review_preferences_step: Проверьте все настройки, например, какие письма вы хотите получать или уровень приватности статусов по умолчанию. Если вы не страдаете морской болезнью, можете включить автовоспроизведение GIF. subject: Добро пожаловать в Mastodon - tip_federated_timeline: В глобальной ленте отображается сеть Mastodon. Но в ней показаны посты только от людей, на которых подписаны Вы и Ваши соседи, поэтому лента может быть неполной. - tip_following: По умолчанию Вы подписаны на администратора(-ов) Вашего узла. Чтобы найти других интересных людей, проверьте локальную и глобальную ленты. - tip_local_timeline: В локальной ленте показаны посты от людей с %{instance}. Это Ваши непосредственные соседи! - tip_mobile_webapp: Если Ваш мобильный браузер предлагает добавить иконку Mastodon на домашний экран, то Вы можете получать push-уведомления. Прямо как полноценное приложение! + tip_federated_timeline: В глобальной ленте отображается сеть Mastodon. Но в ней показаны посты только от людей, на которых подписаны вы и ваши соседи, поэтому лента может быть неполной. + tip_following: По умолчанию вы подписаны на администратора(-ов) вашего узла. Чтобы найти других интересных людей, проверьте локальную и глобальную ленты. + tip_local_timeline: В локальной ленте показаны посты от людей с %{instance}. Это ваши непосредственные соседи! + tip_mobile_webapp: Если ваш мобильный браузер предлагает добавить иконку Mastodon на домашний экран, то вы можете получать push-уведомления. Прямо как полноценное приложение! tips: Советы title: Добро пожаловать на борт, %{name}! users: + follow_limit_reached: Вы не можете подписаться больше, чем на %{limit} человек invalid_email: Введенный e-mail неверен invalid_otp_token: Введен неверный код двухфакторной аутентификации otp_lost_help_html: Если Вы потеряли доступ к обоим, свяжитесь с %{email} seamless_external_login: Вы залогинены через сторонний сервис, поэтому настройки e-mail и пароля недоступны. signed_in_as: 'Выполнен вход под именем:' + verification: + explanation_html: 'Вы можете <strong>подтвердить себя как владельца ссылок в вашем профиле</strong>. Для этого указанный веб-сайт должен содержать обратную ссылку на ваш профиль в Mastodon. У обратной ссылки <strong>должен</strong> быть атрибут <code>rel="me"</code>. Сам текст ссылки не имеет значения. Пример:' + verification: Подтверждение diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 53e48d758..3a521e85e 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -41,6 +41,8 @@ co: name: 'Pudete vulè utilizà unu di quelli:' imports: data: Un fugliale CSV da un’altru servore di Mastodon + invite_request: + text: Quessu ci aiutarà à valutà a vostra dumanda sessions: otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:' user: @@ -118,12 +120,15 @@ co: must_be_follower: Piattà e nutificazione di quelli·e ch’ùn vi seguitanu must_be_following: Piattà e nutificazione di quelli·e ch’ùn seguitate must_be_following_dm: Bluccà e missaghji diretti di quelli·e ch’ùn seguitate + invite_request: + text: Perchè vulete ghjunghje? notification_emails: digest: Mandà e-mail di ricapitulazione favourite: Mandà un’e-mail quandu qualch’unu aghjunghje i mo statuti à i so favuriti follow: Mandà un’e-mail quandu qualch’unu mi seguita follow_request: Mandà un’e-mail quandu qualch’unu vole seguitami mention: Mandà un’e-mail quandu qualch’unu mi mintuva + pending_account: Mandà un'e-mail quandu un novu contu hà bisognu d'esse valutatu reblog: Mandà un’e-mail quandu qualch’unu sparte i mo statuti report: Mandà un'e-mail quandu c'hè un novu signalamentu 'no': Nò diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 579f627d7..2b4888424 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -41,6 +41,8 @@ cs: name: 'Nejspíš budete chtít použít jeden z těchto:' imports: data: Soubor CSV exportovaný z jiného serveru Mastodon + invite_request: + text: To nám pomůže posoudit váš požadavek sessions: otp: 'Napište dvoufázový kód vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:' user: @@ -118,12 +120,15 @@ cs: must_be_follower: Blokovat oznámení od lidí, kteří vás nesledují must_be_following: Blokovat oznámení od lidí, které nesledujete must_be_following_dm: Blokovat přímé zprávy od lidí, které nesledujete + invite_request: + text: Proč se chcete připojit? notification_emails: digest: Posílat e-maily s přehledem favourite: Posílat e-maily, když si někdo oblíbí váš toot follow: Posílat e-maily, když vás někdo začne sledovat follow_request: Posílat e-maily, když vás někdo požádá o sledování mention: Posílat e-maily, když vás někdo zmíní + pending_account: Posílat e-maily, když je třeba posoudit nový účet reblog: Posílat e-maily, když někdo boostne váš toot report: Posílat e-maily, je-li odesláno nové nahlášení 'no': Ne diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 6dbfd17c0..779476069 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -41,6 +41,8 @@ de: name: 'Du möchtest vielleicht einen von diesen benutzen:' imports: data: CSV-Datei, die aus einem anderen Mastodon-Server exportiert wurde + inivte_request: + text: Dies wird uns helfen deine Anfrage besser zu verstehen sessions: otp: 'Gib den Zwei-Faktor-Authentisierungscode von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:' user: @@ -118,12 +120,15 @@ de: must_be_follower: Benachrichtigungen von Nicht-Folgenden blockieren must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge must_be_following_dm: Private Nachrichten von Profilen, denen ich nicht folge, blockieren + invite_request: + text: Warum möchtest du beitreten? notification_emails: digest: Schicke Übersichts-E-Mails favourite: E-Mail senden, wenn jemand meinen Beitrag favorisiert follow: E-Mail senden, wenn mir jemand folgt follow_request: E-Mail senden, wenn mir jemand folgen möchte mention: E-Mail senden, wenn mich jemand erwähnt + pending_account: E-Mail senden, wenn ein Benutzerkonto zur Überprüfung aussteht reblog: E-Mail senden, wenn jemand meinen Beitrag teilt report: E-Mail senden, wenn ein neuer Bericht vorliegt 'no': Nein diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index ad9ae7417..ba0e403e4 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -41,6 +41,8 @@ en: name: 'You might want to use one of these:' imports: data: CSV file exported from another Mastodon server + invite_request: + text: This will help us review your application sessions: otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' user: @@ -120,12 +122,15 @@ en: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow must_be_following_dm: Block direct messages from people you don't follow + invite_request: + text: Why do you want to join? notification_emails: digest: Send digest e-mails favourite: Send e-mail when someone favourites your status follow: Send e-mail when someone follows you follow_request: Send e-mail when someone requests to follow you mention: Send e-mail when someone mentions you + pending_account: Send e-mail when a new account needs review reblog: Send e-mail when someone boosts your status report: Send e-mail when a new report is submitted 'no': 'No' diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 2cade4301..c82f1943f 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -41,6 +41,8 @@ ja: name: 'これらを使うといいかもしれません:' imports: data: 他の Mastodon サーバーからエクスポートしたCSVファイルを選択して下さい + invite_request: + text: このサーバーは現在承認制です。申請を承認する際に役立つメッセージを添えてください sessions: otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' user: @@ -119,12 +121,15 @@ ja: must_be_follower: フォロワー以外からの通知をブロック must_be_following: フォローしていないユーザーからの通知をブロック must_be_following_dm: フォローしていないユーザーからのダイレクトメッセージをブロック + invite_request: + text: 意気込みをお聞かせください notification_emails: digest: タイムラインからピックアップしてメールで通知する favourite: お気に入りに登録された時にメールで通知する follow: フォローされた時にメールで通知する follow_request: フォローリクエストを受けた時にメールで通知する mention: 返信が来た時にメールで通知する + pending_account: 新しいアカウントの承認が必要な時にメールで通知する reblog: トゥートがブーストされた時にメールで通知する report: 通報を受けた時にメールで通知する 'no': いいえ diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 81392c8be..9c5fc413d 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -41,6 +41,8 @@ ko: name: '이것들을 사용하면 좋을 것 같습니다:' imports: data: 다른 마스토돈 서버에서 추출된 CSV 파일 + invite_request: + text: 이 정보는 우리가 심사를 하는 데에 참고할 수 있습니다 sessions: otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' user: @@ -118,12 +120,15 @@ ko: must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following_dm: 내가 팔로우 하지 않은 사람에게서 오는 다이렉트메시지를 차단 + invite_request: + text: 가입하려는 이유가 무엇인가요? notification_emails: digest: 요약 이메일 보내기 favourite: 누군가 내 상태를 즐겨찾기로 등록했을 때 이메일 보내기 follow: 누군가 나를 팔로우 했을 때 이메일 보내기 follow_request: 누군가 나를 팔로우 하길 원할 때 이메일 보내기 mention: 누군가 나에게 답장했을 때 이메일 보내기 + pending_account: 새 계정이 심사가 필요할 때 이메일 보내기 reblog: 누군가 내 툿을 부스트 했을 때 이메일 보내기 report: 새 신고 등록시 이메일로 알리기 'no': 아니오 diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 44cd7ccd6..4196076a9 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -2,29 +2,47 @@ ru: simple_form: hints: + account_warning_preset: + text: Вы можете использовать всё, что в обычных постах — ссылки, хэштеги, упоминания и т.д. + admin_account_action: + send_email_notification: Пользователь получит сообщение о том, что случилось с его/её аккаунтом + text_html: (Необязательно) Можно использовать обычный синтаксис. Для экономии времени <a href="%{path}">добавьте шаблоны предупреждений</a> + type_html: Выберите, что делать с аккаунтом <strong>%{acct}</strong> + warning_preset_id: Необязательно. Вы можете добавить собственный текст в конце шаблона defaults: autofollow: Люди, пришедшие по этому приглашению автоматически будут подписаны на Вас avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем context: Один или несколько контекстов, к которым должны быть применены фильтры - digest: Отсылается лишь после длительной неактивности, если Вы в это время получали личные сообщения + digest: Отсылается лишь после длительной неактивности, если вы в это время получали личные сообщения + discoverable_html: <a href="%{path}" target="_blank">Каталог</a> позволяет пользователям искать людей по интересам и активности. Необходимо наличие не менее %{min_followers} подписчиков + email: Вам будет отправлено электронное письмо с подтверждением fields: В профиле можно отобразить до 4 пунктов как таблицу header: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px - inbox_url: Копировать URL с главной страницы ретранслятора, который Вы хотите использовать + inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать irreversible: Отфильтрованные статусы будут утеряны навсегда, даже если в будущем фильтр будет убран locale: Язык интерфейса, e-mail писем и push-уведомлений - locked: Потребует от Вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков" + locked: Потребует от вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков" + password: Укажите не менее 8 символов phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании статуса - scopes: Какие API приложению будет позволено использовать. Если Вы выберите самый верхний, нижестоящие будут выбраны автоматически. - setting_default_language: Язык Ваших статусов может быть определён автоматически, но не всегда правильно - setting_hide_network: Те, на кого Вы подписаны и кто подписан на Вас, не будут отображены в Вашем профиле - setting_noindex: Относится к Вашему публичному профилю и страницам статусов + scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически. + setting_aggregate_reblogs: Не показывать новые продвижения статусов, которые уже были недавно продвинуты (относится только к новым продвижениям) + setting_default_language: Язык ваших статусов может быть определён автоматически, но не всегда правильно + setting_display_media_default: Скрывать чувствительные медиафайлы + setting_display_media_hide_all: Всегда скрывать любые медиафайлы + setting_display_media_show_all: Всегда показывать чувствительные медиафайлы + setting_hide_network: Те, на кого вы подписаны и кто подписан на Вас, не будут отображены в вашем профиле + setting_noindex: Относится к вашему публичному профилю и страницам статусов + setting_show_application: В окне просмотра вашего статуса будет видно, с какого приложения он был отправлен setting_theme: Влияет на внешний вид Mastodon при выполненном входе в аккаунт. + username: Ваш юзернейм будет уникальным на %{domain} whole_word: Если слово или фраза состоит только из букв и цифр, сопоставление произойдёт только по полному совпадению + featured_tag: + name: 'Возможно, вы захотите выбрать из них:' imports: data: Файл CSV, экспортированный с другого узла Mastodon sessions: - otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из Ваших кодов восстановления:' + otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:' user: chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках labels: @@ -32,6 +50,18 @@ ru: fields: name: Пункт value: Значение + account_warning_preset: + text: Текст шаблона + admin_account_action: + send_email_notification: Уведомить юзера по e-mail + text: Свой текст предупреждения + type: Действие + types: + disable: Заморозить + none: Ничего не делать + silence: Заглушить + suspend: Заблокировать и безвозвратно удалить все данные аккаунта + warning_preset_id: Использовать шаблон defaults: autofollow: Пригласите подписаться на Ваш аккаунт avatar: Аватар @@ -42,6 +72,7 @@ ru: context: Контекст фильтра current_password: Текущий пароль data: Данные + discoverable: Показывать этот аккаунт в каталоге display_name: Показываемое имя email: Адрес e-mail expires_in: Истекает через @@ -57,15 +88,22 @@ ru: otp_attempt: Двухфакторный код password: Пароль phrase: Слово или фраза + setting_aggregate_reblogs: Группировать продвижения в лентах setting_auto_play_gif: Автоматически проигрывать анимированные GIF setting_boost_modal: Показывать диалог подтверждения перед продвижением setting_default_language: Язык отправляемых статусов setting_default_privacy: Видимость постов setting_default_sensitive: Всегда отмечать медиаконтент как чувствительный setting_delete_modal: Показывать диалог подтверждения перед удалением + setting_display_media: Отображение медиафайлов + setting_display_media_default: По умолчанию + setting_display_media_hide_all: Скрывать все + setting_display_media_show_all: Показывать все + setting_expand_spoilers: Всегда раскрывать статусы, имеющие предупреждение о содержании setting_hide_network: Скрыть свои связи setting_noindex: Отказаться от индексации в поисковых машинах setting_reduce_motion: Уменьшить движение в анимации + setting_show_application: Раскрывать приложение, с которого отправляются статусы setting_system_font_ui: Использовать шрифт системы по умолчанию setting_theme: Тема сайта setting_unfollow_modal: Показывать диалог подтверждения перед тем, как отписаться от аккаунта @@ -74,17 +112,19 @@ ru: username: Имя пользователя username_or_email: Имя пользователя или e-mail whole_word: Слово целиком + featured_tag: + name: Хэштег interactions: must_be_follower: Заблокировать уведомления не от подписчиков - must_be_following: Заблокировать уведомления от людей, на которых Вы не подписаны - must_be_following_dm: Заблокировать личные сообщения от людей, на которых Вы не подписаны + must_be_following: Заблокировать уведомления от людей, на которых вы не подписаны + must_be_following_dm: Заблокировать личные сообщения от людей, на которых вы не подписаны notification_emails: digest: Присылать дайджест по e-mail - favourite: Уведомлять по e-mail, когда кому-то нравится Ваш статус - follow: Уведомлять по e-mail, когда кто-то подписался на Вас + favourite: Уведомлять по e-mail, когда кому-то нравится ваш статус + follow: Уведомлять по e-mail, когда кто-то подписался на вас follow_request: Уведомлять по e-mail, когда кто-то запрашивает разрешение на подписку - mention: Уведомлять по e-mail, когда кто-то упомянул Вас - reblog: Уведомлять по e-mail, когда кто-то продвинул Ваш статус + mention: Уведомлять по e-mail, когда кто-то упомянул вас + reblog: Уведомлять по e-mail, когда кто-то продвинул ваш статус report: Уведомлять по e-mail при создании жалобы 'no': Нет required: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d1ff178fd..bf7898ed7 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -511,7 +511,6 @@ sk: warning: Na tieto údaje dávajte ohromný pozor. Nikdy ich s nikým nezďieľajte! your_token: Váš prístupový token auth: - agreement_html: V rámci registrácie súhlasíš, že sa budeš riadiť <a href="%{rules_path}"> pravidlami tohto servera</a>, a taktiež <a href="%{terms_path}"> našími prevádzkovými podmienkami</a>. change_password: Heslo confirm_email: Potvrdiť email delete_account: Vymaž účet @@ -832,9 +831,7 @@ sk: migrate: Presunutie účtu notifications: Oznámenia preferences: Voľby - settings: Nastavenia two_factor_authentication: Dvoj-faktorové overenie - your_apps: Tvoje aplikácie statuses: attached: description: 'Priložené: %{attached}' diff --git a/config/locales/sq.yml b/config/locales/sq.yml index f02c994eb..ea36a2189 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -479,7 +479,6 @@ sq: warning: Hapni sytë me ato të dhëna. Mos ia jepni kurrë njeriu! your_token: Token-i juaj për hyrje auth: - agreement_html: Duke klikuar mbi "Regjistrohuni" më poshtë, pajtoheni të ndiqni <a href="%{rules_path}">rregullat e shërbyesit</a> dhe <a href="%{terms_path}">kushtet tona të shërbimit</a>. change_password: Fjalëkalim confirm_email: Ripohoni email-in delete_account: Fshije llogarinë @@ -785,9 +784,7 @@ sq: migrate: Migrim llogarie notifications: Njoftime preferences: Parapëlqime - settings: Rregullime two_factor_authentication: Mirëfilltësim Dyfaktorësh - your_apps: Aplikacionet tuaja statuses: attached: description: 'Bashkëngjitur: %{attached}' diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a2d57ce29..2292b6a7f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -302,7 +302,6 @@ sr-Latn: warning: Oprezno sa ovim podacima. Nikad je ne delite ni sa kim! your_token: Vaš pristupni token auth: - agreement_html: Pristupanjem instanci se slažete sa <a href="%{rules_path}">pravilima instance</a> i <a href="%{terms_path}">uslovima korišćenja</a>. delete_account: Obriši nalog delete_account_html: Ako želite da obrišete Vaš nalog, možete <a href="%{path}">nastaviti ovde</a>. Bićete upitani da potvrdite. didnt_get_confirmation: Niste dobili poruku sa uputstvima za potvrdu naloga? @@ -524,9 +523,7 @@ sr-Latn: migrate: Prebacivanje naloga notifications: Obaveštenja preferences: Podešavanja - settings: Postavke two_factor_authentication: Dvofaktorska identifikacija - your_apps: Vaše aplikacije statuses: open_in_web: Otvori u vebu over_character_limit: ograničenje od %{max} karaktera prekoračeno diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 45a59bcb1..2bf9001ce 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -492,7 +492,6 @@ sr: warning: Опрезно са овим подацима. Никад је не делите ни са ким! your_token: Ваш приступни токен auth: - agreement_html: Приступањем инстанци се слажете са <a href="%{rules_path}">правилима инстанце</a> и <a href="%{terms_path}">условима коришћења</a>. change_password: Лозинка confirm_email: Потврдите адресу е-поште delete_account: Обриши налог @@ -793,9 +792,7 @@ sr: migrate: Пребацивање налога notifications: Обавештења preferences: Подешавања - settings: Поставке two_factor_authentication: Двофакторска идентификација - your_apps: Ваше апликације statuses: attached: description: 'У прилогу: %{attached}' diff --git a/config/locales/sv.yml b/config/locales/sv.yml index b0c04329a..91d4c2496 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -354,7 +354,6 @@ sv: warning: Var mycket försiktig med denna data. Dela aldrig den med någon! your_token: Din access token auth: - agreement_html: Genom att registrera dig godkänner du att följa <a href="%{rules_path}">instansens regler</a> och <a href="%{terms_path}">våra användarvillkor</a>. change_password: Lösenord confirm_email: Bekräfta e-postadress delete_account: Ta bort konto @@ -601,9 +600,7 @@ sv: migrate: Kontoflytt notifications: Meddelanden preferences: Inställningar - settings: Inställningar two_factor_authentication: Tvåstegsautentisering - your_apps: Dina applikationer statuses: attached: description: 'Bifogad: %{attached}' diff --git a/config/locales/th.yml b/config/locales/th.yml index 729865c83..2ebd6c7f1 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -590,9 +590,7 @@ th: notifications: การแจ้งเตือน preferences: การกำหนดลักษณะ relationships: การติดตามและผู้ติดตาม - settings: การตั้งค่า two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย - your_apps: แอปพลิเคชันของคุณ statuses: attached: description: 'แนบ: %{attached}' diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 14e7f34df..e3e27e3ef 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -347,7 +347,6 @@ tr: export: Dışa aktar import: İçe aktar preferences: Tercihler - settings: Ayarlar two_factor_authentication: İki-faktörlü doğrulama statuses: open_in_web: Web sayfasında aç diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e72e2f461..a582b2385 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -386,7 +386,6 @@ uk: warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким! your_token: Ваш токен доступу auth: - agreement_html: Реєструючись, ви погоджуєтеся виконувати <a href="%{rules_path}">правила інстанції</a> та <a href="%{terms_path}">наші умови використання</a>. change_password: Пароль confirm_email: Підтвердьте e-mail адресу delete_account: Видалити аккаунт @@ -649,9 +648,7 @@ uk: migrate: Міграція акаунту notifications: Сповіщення preferences: Налаштування - settings: Опції two_factor_authentication: Двофакторна авторизація - your_apps: Ваші затосунки statuses: attached: description: 'Прикріплено: %{attached}' diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index bfacc86fc..ae49c0537 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -410,7 +410,6 @@ zh-CN: warning: 一定小心,千万不要把它分享给任何人! your_token: 你的访问令牌 auth: - agreement_html: 点击注册即表示你同意遵守<a href="%{rules_path}">本站的相关规定</a>和<a href="%{terms_path}">我们的使用条款</a>。 change_password: 密码 confirm_email: 确认电子邮件地址 delete_account: 删除帐户 @@ -671,9 +670,7 @@ zh-CN: migrate: 帐户迁移 notifications: 通知 preferences: 首选项 - settings: 设置 two_factor_authentication: 双重认证 - your_apps: 你的应用 statuses: attached: description: 附加媒体:%{attached} diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 7b200e91a..aade1debb 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -352,7 +352,6 @@ zh-HK: warning: 警告,不要把它分享給任何人! your_token: token auth: - agreement_html: 登記即表示你同意遵守<a href="%{rules_path}">本服務站的規則</a>和<a href="%{terms_path}">使用條款</a>。 change_password: 密碼 confirm_email: 確認電郵 delete_account: 刪除帳戶 @@ -598,9 +597,7 @@ zh-HK: migrate: 帳戶遷移 notifications: 通知 preferences: 偏好設定 - settings: 設定 two_factor_authentication: 雙重認證 - your_apps: 你的應用程式 statuses: attached: description: 附件: %{attached} diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 913442e17..988357e1b 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -436,7 +436,6 @@ zh-TW: warning: 警告,不要把它分享給任何人! your_token: 你的 token auth: - agreement_html: 按下下方的「註冊」即代表同意遵守 <a href="%{rules_path}">此伺服器的規則</a> 以及 <a href="%{terms_path}">使用條款</a>。 change_password: 密碼 confirm_email: 確認電子信箱位址 delete_account: 刪除帳戶 @@ -667,9 +666,7 @@ zh-TW: migrate: 帳戶搬遷 notifications: 通知 preferences: 偏好設定 - settings: 設定 two_factor_authentication: 兩階段認證 - your_apps: 你的應用程式 statuses: attached: description: 附件: %{attached} diff --git a/config/navigation.rb b/config/navigation.rb index 553a672ed..16a99731a 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -1,56 +1,60 @@ # frozen_string_literal: true SimpleNavigation::Configuration.run do |navigation| - navigation.items do |primary| - primary.item :web, safe_join([fa_icon('chevron-left fw'), t('settings.back')]), root_url - - primary.item :settings, safe_join([fa_icon('cog fw'), t('settings.settings')]), settings_profile_url do |settings| - settings.item :profile, safe_join([fa_icon('user fw'), t('settings.edit_profile')]), settings_profile_url, highlights_on: %r{/settings/profile|/settings/migration} - settings.item :featured_tags, safe_join([fa_icon('hashtag fw'), t('settings.featured_tags')]), settings_featured_tags_url - settings.item :preferences, safe_join([fa_icon('sliders fw'), t('settings.preferences')]), settings_preferences_url - settings.item :notifications, safe_join([fa_icon('bell fw'), t('settings.notifications')]), settings_notifications_url - settings.item :password, safe_join([fa_icon('lock fw'), t('auth.security')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete} - settings.item :two_factor_authentication, safe_join([fa_icon('mobile fw'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_url, highlights_on: %r{/settings/two_factor_authentication} - settings.item :import, safe_join([fa_icon('cloud-upload fw'), t('settings.import')]), settings_import_url - settings.item :export, safe_join([fa_icon('cloud-download fw'), t('settings.export')]), settings_export_url - settings.item :authorized_apps, safe_join([fa_icon('list fw'), t('settings.authorized_apps')]), oauth_authorized_applications_url - settings.item :identity_proofs, safe_join([fa_icon('key fw'), t('settings.identity_proofs')]), settings_identity_proofs_path, highlights_on: %r{/settings/identity_proofs*}, if: proc { current_account.identity_proofs.exists? } + navigation.items do |n| + n.item :web, safe_join([fa_icon('chevron-left fw'), t('settings.back')]), root_url + + n.item :profile, safe_join([fa_icon('user fw'), t('settings.profile')]), settings_profile_url do |s| + s.item :profile, safe_join([fa_icon('pencil fw'), t('settings.appearance')]), settings_profile_url, highlights_on: %r{/settings/profile|/settings/migration} + s.item :featured_tags, safe_join([fa_icon('hashtag fw'), t('settings.featured_tags')]), settings_featured_tags_url + s.item :identity_proofs, safe_join([fa_icon('key fw'), t('settings.identity_proofs')]), settings_identity_proofs_path, highlights_on: %r{/settings/identity_proofs*}, if: proc { current_account.identity_proofs.exists? } end - primary.item :flavours, safe_join([fa_icon('paint-brush fw'), t('settings.flavours')]), settings_flavours_url do |flavours| + n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_url, highlights_on: %r{/settings/preferences|/settings/notifications} + + n.item :flavours, safe_join([fa_icon('paint-brush fw'), t('settings.flavours')]), settings_flavours_url do |flavours| Themes.instance.flavours.each do |flavour| flavours.item flavour.to_sym, safe_join([fa_icon('star fw'), t("flavours.#{flavour}.name", default: flavour)]), settings_flavour_url(flavour) end end - primary.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url - primary.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters} - primary.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: proc { Setting.min_invite_role == 'user' } + n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url + n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters} + + n.item :security, safe_join([fa_icon('lock fw'), t('settings.account')]), edit_user_registration_url do |s| + s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete} + s.item :two_factor_authentication, safe_join([fa_icon('mobile fw'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_url, highlights_on: %r{/settings/two_factor_authentication} + s.item :authorized_apps, safe_join([fa_icon('list fw'), t('settings.authorized_apps')]), oauth_authorized_applications_url + end - primary.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url do |development| - development.item :your_apps, safe_join([fa_icon('list fw'), t('settings.your_apps')]), settings_applications_url, highlights_on: %r{/settings/applications} + n.item :data, safe_join([fa_icon('cloud-download fw'), t('settings.import_and_export')]), settings_export_url do |s| + s.item :import, safe_join([fa_icon('cloud-upload fw'), t('settings.import')]), settings_import_url + s.item :export, safe_join([fa_icon('cloud-download fw'), t('settings.export')]), settings_export_url end - primary.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), admin_reports_url, if: proc { current_user.staff? } do |admin| - admin.item :action_logs, safe_join([fa_icon('bars fw'), t('admin.action_logs.title')]), admin_action_logs_url - admin.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports} - admin.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts} - admin.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path - admin.item :tags, safe_join([fa_icon('tag fw'), t('admin.tags.title')]), admin_tags_path - admin.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks}, if: -> { current_user.admin? } - admin.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? } + n.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: proc { Setting.min_invite_role == 'user' } + n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url + + n.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), admin_reports_url, if: proc { current_user.staff? } do |s| + s.item :action_logs, safe_join([fa_icon('bars fw'), t('admin.action_logs.title')]), admin_action_logs_url + s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports} + s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts} + s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path + s.item :tags, safe_join([fa_icon('tag fw'), t('admin.tags.title')]), admin_tags_path + s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks}, if: -> { current_user.admin? } + s.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? } end - primary.item :admin, safe_join([fa_icon('cogs fw'), t('admin.title')]), admin_dashboard_url, if: proc { current_user.staff? } do |admin| - admin.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url - admin.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} - admin.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} - admin.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/relays} - admin.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url, if: -> { current_user.admin? } - admin.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? } - admin.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } + 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 :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? }, highlights_on: %r{/admin/relays} + s.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url, if: -> { current_user.admin? } + s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? } + s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } end - primary.item :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } + n.item :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } end end diff --git a/config/routes.rb b/config/routes.rb index 260ea63ab..5614a7cdc 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -217,10 +217,11 @@ Rails.application.routes.draw do end end - resources :pending_accounts, only: [:index, :update] do + resources :pending_accounts, only: [:index] do collection do post :approve_all post :reject_all + post :batch end end diff --git a/config/settings.yml b/config/settings.yml index c4359f573..4aa52dbf2 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -42,6 +42,7 @@ defaults: &defaults follow_request: true digest: true report: true + pending_account: true interactions: must_be_follower: false must_be_following: false diff --git a/db/migrate/20190409054914_create_user_invite_requests.rb b/db/migrate/20190409054914_create_user_invite_requests.rb new file mode 100644 index 000000000..974e0f69f --- /dev/null +++ b/db/migrate/20190409054914_create_user_invite_requests.rb @@ -0,0 +1,10 @@ +class CreateUserInviteRequests < ActiveRecord::Migration[5.2] + def change + create_table :user_invite_requests do |t| + t.belongs_to :user, foreign_key: { on_delete: :cascade } + t.text :text + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 7e5f06c38..5ffec228d 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_03_17_135723) do +ActiveRecord::Schema.define(version: 2019_04_09_054914) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -691,6 +691,14 @@ ActiveRecord::Schema.define(version: 2019_03_17_135723) do t.index ["uri"], name: "index_tombstones_on_uri" end + create_table "user_invite_requests", force: :cascade do |t| + t.bigint "user_id" + t.text "text" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_user_invite_requests_on_user_id" + end + create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.datetime "created_at", null: false @@ -830,6 +838,7 @@ ActiveRecord::Schema.define(version: 2019_03_17_135723) do add_foreign_key "stream_entries", "accounts", name: "fk_5659b17554", on_delete: :cascade add_foreign_key "subscriptions", "accounts", name: "fk_9847d1cbb5", on_delete: :cascade add_foreign_key "tombstones", "accounts", on_delete: :cascade + add_foreign_key "user_invite_requests", "users", on_delete: :cascade add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade add_foreign_key "users", "invites", on_delete: :nullify add_foreign_key "users", "oauth_applications", column: "created_by_application_id", on_delete: :nullify diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index c728b3ab2..8499dde96 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def flags - 'rc1' + 'rc3' end def to_a diff --git a/spec/controllers/settings/identity_proofs_controller_spec.rb b/spec/controllers/settings/identity_proofs_controller_spec.rb index 5c05eb83c..2a0f91088 100644 --- a/spec/controllers/settings/identity_proofs_controller_spec.rb +++ b/spec/controllers/settings/identity_proofs_controller_spec.rb @@ -28,11 +28,11 @@ describe Settings::IdentityProofsController do describe 'new proof creation' do context 'GET #new' do - context 'with all of the correct params' do - before do - allow_any_instance_of(ProofProvider::Keybase::Badge).to receive(:avatar_url) { full_pack_url('media/images/void.png') } - end + before do + allow_any_instance_of(ProofProvider::Keybase::Badge).to receive(:avatar_url) { full_pack_url('media/images/void.png') } + end + context 'with all of the correct params' do it 'renders the template' do get :new, params: new_proof_params expect(response).to render_template(:new) @@ -54,6 +54,15 @@ describe Settings::IdentityProofsController do expect(flash[:alert]).to eq I18n.t('identity_proofs.errors.wrong_user', proving: 'someone_else', current: user.account.username) end end + + context 'with params to prove the same username cased differently' do + let(:capitalized_username) { new_proof_params.merge(username: user.account.username.upcase) } + + it 'renders the new template' do + get :new, params: capitalized_username + expect(response).to render_template(:new) + end + end end context 'POST #create' do diff --git a/spec/fabricators/user_invite_request_fabricator.rb b/spec/fabricators/user_invite_request_fabricator.rb new file mode 100644 index 000000000..5cc6ae56f --- /dev/null +++ b/spec/fabricators/user_invite_request_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:user_invite_request) do + user + text { Faker::Lorem.sentence } +end diff --git a/spec/lib/proof_provider/keybase/verifier_spec.rb b/spec/lib/proof_provider/keybase/verifier_spec.rb index 4ce67da9c..0081a735d 100644 --- a/spec/lib/proof_provider/keybase/verifier_spec.rb +++ b/spec/lib/proof_provider/keybase/verifier_spec.rb @@ -10,7 +10,7 @@ describe ProofProvider::Keybase::Verifier do token: '11111111111111111111111111' ) - described_class.new('alice', 'cryptoalice', '11111111111111111111111111') + described_class.new('alice', 'cryptoalice', '11111111111111111111111111', my_domain) end let(:query_params) do diff --git a/spec/mailers/previews/admin_mailer_preview.rb b/spec/mailers/previews/admin_mailer_preview.rb new file mode 100644 index 000000000..561a56b78 --- /dev/null +++ b/spec/mailers/previews/admin_mailer_preview.rb @@ -0,0 +1,8 @@ +# Preview all emails at http://localhost:3000/rails/mailers/admin_mailer + +class AdminMailerPreview < ActionMailer::Preview + # Preview this email at http://localhost:3000/rails/mailers/admin_mailer/new_pending_account + def new_pending_account + AdminMailer.new_pending_account(Account.first, User.pending.first) + end +end diff --git a/spec/models/user_invite_request_spec.rb b/spec/models/user_invite_request_spec.rb new file mode 100644 index 000000000..1be38d8a4 --- /dev/null +++ b/spec/models/user_invite_request_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe UserInviteRequest, type: :model do +end diff --git a/spec/validators/poll_validator_spec.rb b/spec/validators/poll_validator_spec.rb new file mode 100644 index 000000000..941b83401 --- /dev/null +++ b/spec/validators/poll_validator_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollValidator, type: :validator do + describe '#validate' do + before do + validator.validate(poll) + end + + let(:validator) { described_class.new } + let(:poll) { double(options: options, expires_at: expires_at, errors: errors) } + let(:errors) { double(add: nil) } + let(:options) { %w(foo bar) } + let(:expires_at) { 1.day.from_now } + + it 'have no errors' do + expect(errors).not_to have_received(:add) + end + + context 'expires just 5 min ago' do + let(:expires_at) { 5.minutes.from_now } + it 'not calls errors add' do + expect(errors).not_to have_received(:add) + end + end + end +end |