From 5247ea4efd3683154d52efe4385bdbb63f476943 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 8 Apr 2019 18:35:41 +0200 Subject: [PATCH 01/30] Fix batch actions not working on pending accounts (#10508) --- app/controllers/admin/pending_accounts_controller.rb | 4 ++-- app/views/admin/pending_accounts/index.html.haml | 2 +- config/locales/en.yml | 1 + config/routes.rb | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/pending_accounts_controller.rb b/app/controllers/admin/pending_accounts_controller.rb index 8429d35855a..f145108b340 100644 --- a/app/controllers/admin/pending_accounts_controller.rb +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -8,11 +8,11 @@ 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 diff --git a/app/views/admin/pending_accounts/index.html.haml b/app/views/admin/pending_accounts/index.html.haml index 77b96cbca03..7ce5b8213ae 100644 --- a/app/views/admin/pending_accounts/index.html.haml +++ b/app/views/admin/pending_accounts/index.html.haml @@ -4,7 +4,7 @@ - content_for :header_tags do = javascript_pack_tag 'admin', integrity: true, async: true, crossorigin: 'anonymous' -= 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/config/locales/en.yml b/config/locales/en.yml index e56008a89b5..139803affb3 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 diff --git a/config/routes.rb b/config/routes.rb index 1ea6490b0dd..34d0081e770 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -214,10 +214,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 From 2a168a002c971014093d89bd45486dca9db0b14d Mon Sep 17 00:00:00 2001 From: Alix Rossi Date: Mon, 8 Apr 2019 19:01:41 +0200 Subject: [PATCH 02/30] i18n: Update Corsican translations (#10510) * i18n: Update Corsican translations * i18n: Update Corsican translations --- config/locales/co.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/co.yml b/config/locales/co.yml index 7fcb087cfd0..c751c80f0ec 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 From ba1a78d1687a8e5bd1e969af41852a28192e5231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quent=C3=AD?= <33203663+Quenty31@users.noreply.github.com> Date: Tue, 9 Apr 2019 00:39:50 +0200 Subject: [PATCH 03/30] [i18n] Update and correction (#10511) * [i18n] Update and correction * Update oc.json * Update oc.json --- app/javascript/mastodon/locales/oc.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 8fc8762a48b..c9d896f5b30 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,8 @@ "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", "empty_column.account_timeline": "Cap de tuts aquí !", + "empty_column.account_timeline_blocked": "Sètz blocat", + "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 +360,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", From 56f29c38b603a98e7b9715c48de022106d8da073 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 05:02:48 +0200 Subject: [PATCH 04/30] Fix glitched out "not found" message for non-existing profiles in web UI (#10517) --- app/javascript/mastodon/actions/alerts.js | 5 +++++ .../mastodon/features/account_gallery/index.js | 13 ++++++++++++- .../features/account_timeline/components/header.js | 3 +-- .../mastodon/features/account_timeline/index.js | 13 ++++++++++++- app/javascript/mastodon/features/followers/index.js | 13 ++++++++++++- app/javascript/mastodon/features/following/index.js | 13 ++++++++++++- 6 files changed, 54 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js index 50cd48a9ede..b2c7ab76aad 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 96051818b89..73be58d6a3e 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 ( + + + + ); + } 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 27dfcc516ad..844b8a236a8 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 ; + return null; } return ( diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index a01f1dd9aef..27581bfdc88 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 ( + + + + ); + } if (!statusIds && isLoading) { return ( diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js index ce6357c4cc3..e3387e1be83 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 ( + + + + ); + } if (!accountIds) { return ( diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js index 70e7fde06ab..3bf89fb2bab 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 ( + + + + ); + } if (!accountIds) { return ( From c03f926cf373d68922ea3d3324263d38355befd9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 05:04:11 +0200 Subject: [PATCH 05/30] Bump version to 2.8.0rc2 (#10501) --- CHANGELOG.md | 11 +++++++++-- lib/mastodon/version.rb | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8670c265834..6e163bee293 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,9 @@ 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)) ### Removed diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index d6114320e5b..859850d15f7 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def flags - 'rc1' + 'rc2' end def to_a From 654f79d2b1f70324a756a1d981e48fcaa8245531 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 07:19:52 +0200 Subject: [PATCH 06/30] Fix permission denied bug on approve all/reject all pending accounts (#10519) --- app/controllers/admin/pending_accounts_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/pending_accounts_controller.rb b/app/controllers/admin/pending_accounts_controller.rb index f145108b340..2ea7785fc09 100644 --- a/app/controllers/admin/pending_accounts_controller.rb +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -18,12 +18,12 @@ module Admin 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 From 819d053be8fa3546b7f6dfb21adecf76ed8ed5e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Tue, 9 Apr 2019 17:23:18 +0900 Subject: [PATCH 07/30] Bump bootsnap from 1.4.2 to 1.4.3 (#10523) Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/Shopify/bootsnap/releases) - [Changelog](https://github.com/Shopify/bootsnap/blob/master/CHANGELOG.md) - [Commits](https://github.com/Shopify/bootsnap/compare/v1.4.2...v1.4.3) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ee7e58dd00b..c0cf991f6cc 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) From 0f3719f16fb5a2704416fa3afae00ba767ad2b2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Tue, 9 Apr 2019 17:23:52 +0900 Subject: [PATCH 08/30] Bump hamlit-rails from 0.2.2 to 0.2.3 (#10522) Bumps [hamlit-rails](https://github.com/mfung/hamlit-rails) from 0.2.2 to 0.2.3. - [Release notes](https://github.com/mfung/hamlit-rails/releases) - [Commits](https://github.com/mfung/hamlit-rails/compare/v0.2.2...v0.2.3) Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index c0cf991f6cc..afe403dec52 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) @@ -424,7 +424,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) @@ -595,7 +595,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) From 8b69a66380bbe32127e717ca2d79244392b7d2b6 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 16:06:30 +0200 Subject: [PATCH 09/30] Add "why do you want to join" field to invite requests (#10524) * Add "why do you want to join" field to invite requests Fix #10512 * Remove unused translations * Fix broken registrations when no invite request text is submitted --- app/controllers/about_controller.rb | 5 +++- .../admin/pending_accounts_controller.rb | 2 +- .../auth/registrations_controller.rb | 14 ++++++---- app/javascript/styles/mastodon/accounts.scss | 26 +++++++++++++++++++ app/javascript/styles/mastodon/widgets.scss | 9 +++++++ app/models/user.rb | 3 +++ app/models/user_invite_request.rb | 17 ++++++++++++ app/views/about/_registration.html.haml | 5 ++++ .../admin/pending_accounts/_account.html.haml | 22 ++++++++-------- app/views/auth/registrations/new.html.haml | 9 ++++++- config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/ca.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 1 - config/locales/de.yml | 1 - config/locales/el.yml | 1 - config/locales/en.yml | 1 - config/locales/en_GB.yml | 1 - config/locales/eo.yml | 1 - config/locales/es.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fr.yml | 1 - config/locales/gl.yml | 1 - config/locales/hu.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/ka.yml | 1 - config/locales/kk.yml | 1 - config/locales/ko.yml | 1 - config/locales/lt.yml | 1 - config/locales/nl.yml | 1 - config/locales/no.yml | 1 - config/locales/oc.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt.yml | 1 - config/locales/ro.yml | 1 - config/locales/ru.yml | 1 - config/locales/simple_form.en.yml | 4 +++ config/locales/sk.yml | 1 - config/locales/sq.yml | 1 - config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 1 - config/locales/uk.yml | 1 - config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - config/locales/zh-TW.yml | 1 - ...90409054914_create_user_invite_requests.rb | 10 +++++++ db/schema.rb | 11 +++++++- .../user_invite_request_fabricator.rb | 4 +++ spec/models/user_invite_request_spec.rb | 4 +++ 57 files changed, 125 insertions(+), 62 deletions(-) create mode 100644 app/models/user_invite_request.rb create mode 100644 db/migrate/20190409054914_create_user_invite_requests.rb create mode 100644 spec/fabricators/user_invite_request_fabricator.rb create mode 100644 spec/models/user_invite_request_spec.rb diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index 67bb2c87fa0..52a51fd62ec 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -16,7 +16,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 2ea7785fc09..249525504b3 100644 --- a/app/controllers/admin/pending_accounts_controller.rb +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -30,7 +30,7 @@ module Admin private def set_accounts - @accounts = Account.joins(:user).merge(User.pending).page(params[:page]) + @accounts = Account.joins(:user).merge(User.pending).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 16a3ec67adf..5c1ff769a8f 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -10,6 +10,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 @@ -24,17 +28,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/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index f4f458cf425..a790251f485 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 307e509d596..e736d7a7ef3 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/models/user.rb b/app/models/user.rb index d703f958895..c9309bc2167 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? diff --git a/app/models/user_invite_request.rb b/app/models/user_invite_request.rb new file mode 100644 index 00000000000..2b76c88b944 --- /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/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index 09cbe2e2894..ff32ec8c46c 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 c520dc065a4..1ed5dafdd42 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/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 1caf2b40164..bd6e3a13f75 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/config/locales/ar.yml b/config/locales/ar.yml index d409ad99ac2..e0ccb63a947 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -498,7 +498,6 @@ ar: warning: كن حذرا مع هذه البيانات. لا تقم أبدا بمشاركتها مع الآخَرين ! your_token: رمز نفاذك auth: - agreement_html: بمجرد النقر على "التسجيل" أسفله، فإنك تُصرِّح قبول قواعد مثيل الخادوم و شروط الخدمة التي نوفرها لك. change_password: الكلمة السرية confirm_email: تأكيد عنوان البريد الإلكتروني delete_account: حذف حساب diff --git a/config/locales/ast.yml b/config/locales/ast.yml index cbfd27b047e..f6892923c18 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 les regles de la instancia y los nuesos términos del serviciu. change_password: Contraseña delete_account: Desaniciu de la cuenta delete_account_html: Si deseyes desaniciar la to cuenta, pues siguir equí. Va pidísete la confirmación. diff --git a/config/locales/ca.yml b/config/locales/ca.yml index c6ab35cb6b9..5fd2ff8234e 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 les normes del servidor i els nostres termes del servei. apply_for_account: Demana una invitació change_password: Contrasenya checkbox_agreement_html: Estic d'acord amb les normes del servidor i els termes del servei diff --git a/config/locales/co.yml b/config/locales/co.yml index c751c80f0ec..c4122b6d94c 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -513,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à e regule di u servore è e cundizione d’usu. apply_for_account: Dumandà un'invitazione change_password: Chjave d’accessu checkbox_agreement_html: Sò d'accunsentu cù e regule di u servore è i termini di u serviziu diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 15cc025f230..7917166de7b 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -518,7 +518,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 pravidel tohoto serveru a našich podmínek používání. apply_for_account: Vyžádat si pozvánku change_password: Heslo checkbox_agreement_html: Souhlasím s pravidly serveru a podmínkami používání diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 68a445e4cad..9ab4fc394e1 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 y rheolau ar gyfer yr achos hwn a ein termau gwasanaeth. change_password: Cyfrinair confirm_email: Cadarnhau e-bost delete_account: Dileu cyfrif diff --git a/config/locales/da.yml b/config/locales/da.yml index 88bf05d1720..2156acb4431 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 serverens regler og vores servicevilkår. change_password: Kodeord confirm_email: Bekræft email delete_account: Slet konto diff --git a/config/locales/de.yml b/config/locales/de.yml index 5b51f9d8528..cfe527b0a62 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -511,7 +511,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 Regeln des Servers und der Datenschutzerklärung einverstanden. apply_for_account: Eine Einladung anfragen change_password: Passwort checkbox_agreement_html: Ich akzeptiere die Server-Regeln und die Nutzungsbedingungen diff --git a/config/locales/el.yml b/config/locales/el.yml index b8fd45a6858..8ff42acbfe9 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -506,7 +506,6 @@ el: warning: Μεγάλη προσοχή με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν! your_token: Το διακριτικό πρόσβασής σου (access token) auth: - agreement_html: Επιλέγοντας το "Εγγραφή", συμφωνείς πως δέχεσαι τους κανόνες αυτού του κόμβου και τους όρους χρήσης του. apply_for_account: Αίτηση πρόσκλησης change_password: Συνθηματικό checkbox_agreement_html: Συμφωνώ με τους κανονισμούς του κόμβου και τους όρους χρήσης diff --git a/config/locales/en.yml b/config/locales/en.yml index 139803affb3..60540ecdcec 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -513,7 +513,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 the rules of the server and our terms of service. apply_for_account: Request an invite change_password: Password checkbox_agreement_html: I agree to the server rules and terms of service diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 9e6eb5e949f..743989879e4 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 the rules of the server and our terms of service. apply_for_account: Request an invite change_password: Password checkbox_agreement_html: I agree to the server rules and terms of service diff --git a/config/locales/eo.yml b/config/locales/eo.yml index dcbf0065b0b..cce32cc561b 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 la reguloj de la servilo kaj niaj uzkondiĉoj. apply_for_account: Peti inviton change_password: Pasvorto checkbox_agreement_html: Mi samopinii al la Servo reguloj kaj kondiĉo al servadon diff --git a/config/locales/es.yml b/config/locales/es.yml index bcc3fe62ca9..c0b6cfb3b58 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 las reglas de la instancia y nuestros términos de servicio. change_password: Contraseña confirm_email: Confirmar email delete_account: Borrar cuenta diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 187a5325b1f..50e5b663946 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 zerbitzariaren arauak eta erabilera baldintzak onartzen dituzu.' change_password: Pasahitza confirm_email: Berretsi e-mail helbidea delete_account: Ezabatu kontua diff --git a/config/locales/fa.yml b/config/locales/fa.yml index d4ec320cbfc..0cf38092180 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -506,7 +506,6 @@ fa: warning: خیلی مواظب این اطلاعات باشید و آن را به هیچ کس ندهید! your_token: کد دسترسی شما auth: - agreement_html: با کلیک روی دکمهٔ عضو شدن، شما قوانین این سرور و شرایط استفادهٔ ما را می‌پذیرید. apply_for_account: درخواست دعوت‌نامه change_password: رمز checkbox_agreement_html: من قانون‌های این سرور و شرایط کاربری را می‌پذیرم diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 029696f7dea..47ff00434e7 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 instanssin sääntöjä ja käyttöehtoja. change_password: Salasana confirm_email: Vahvista sähköpostiosoite delete_account: Poista tili diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 421ba1da9f3..f1d81acf02c 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 aux règles du serveur et à nos conditions d’utilisation. change_password: Mot de passe confirm_email: Confirmer mon adresse mail delete_account: Supprimer le compte diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 32f642e16c1..0ee3a329ca9 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 as normas do servidor e os termos do servizo. apply_for_account: Solicite un convite change_password: Contrasinal checkbox_agreement_html: Acepto as regras do servidor e os termos do servizo diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 04318f5e442..f32f6f40790 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 instancia szabályzatát és a felhasználási feltételeket. delete_account: Felhasználói fiók törlése delete_account_html: Felhasználói fiókod törléséhez kattints ide. 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? diff --git a/config/locales/it.yml b/config/locales/it.yml index 384ba918bdd..bb170bc4a2f 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 le regole del server e le nostre condizioni di servizio. change_password: Password confirm_email: Conferma email delete_account: Elimina account diff --git a/config/locales/ja.yml b/config/locales/ja.yml index f68df971061..85e97580e8c 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -512,7 +512,6 @@ ja: warning: このデータは気をつけて取り扱ってください。他の人と共有しないでください! your_token: アクセストークン auth: - agreement_html: 登録するをクリックすると サーバーのルールプライバシーポリシー に従うことに同意したことになります。 apply_for_account: 登録を申請する change_password: パスワード checkbox_agreement_html: サーバーのルールプライバシーポリシー に同意します diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 8e537c745af..758a0429e33 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -401,7 +401,6 @@ ka: warning: იყავით ძალიან ფრთხილად ამ მონაცემთან. არასდროს გააზიაროთ ეს! your_token: თქვენი წვდომის ტოკენი auth: - agreement_html: რეგისტრაციით თქვენ ეთანხმებით ინსტანციის წესებს და ჩვენ მომსახურების პირობებს. change_password: პაროლი confirm_email: ელ-ფოსტის დამოწმება delete_account: ანგარიშის გაუქმება diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 4ac4c08b990..da91ca9c473 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: '"Тіркелу" батырмасын басу арқылы сервер ережелері мен қолдану шарттарына келісесіз.' change_password: Құпиясөз confirm_email: Еmаil құптау delete_account: Аккаунт өшіру diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 90996b46610..c97fd82092d 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -514,7 +514,6 @@ ko: warning: 이 데이터를 조심히 다뤄 주세요. 다른 사람들과 절대로 공유하지 마세요! your_token: 액세스 토큰 auth: - agreement_html: 이 등록으로 이 서버의 이용규약약관에 동의하는 것으로 간주됩니다. apply_for_account: 가입 요청하기 change_password: 패스워드 checkbox_agreement_html: 서버 규칙이용약관에 동의합니다 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 0f5ca3091fb..97994c36278 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 serverio taisykles bei naudojimo sąlygas. change_password: Slaptažodis confirm_email: Patvirtinti el paštą delete_account: Ištrinti paskyrą diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 2bfab24543c..ca0f57ae0bc 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 de regels van deze server en onze gebruiksvoorwaarden. apply_for_account: Een uitnodiging aanvragen change_password: Wachtwoord checkbox_agreement_html: Ik ga akkoord met de regels van deze server en de gebruiksvoorwaarden diff --git a/config/locales/no.yml b/config/locales/no.yml index 773f2d0603f..d6475afd6a7 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 instansens regler og våre brukervilkår. delete_account: Slett konto delete_account_html: Hvis du ønsker å slette din konto kan du fortsette her. Du vil bli spurt om bekreftelse. didnt_get_confirmation: Mottok du ikke instruksjoner om bekreftelse? diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 85df11cf6ea..d1c6d11d9f8 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 las règlas del servidor e politica de confidencialitat. apply_for_account: Demandar una invitacion change_password: Senhal checkbox_agreement_html: Accepti las règlas del servidor e los tèrmes del servici diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f3da82b1c94..192a56dcf69 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 informacjami o serwerze i zasadami korzystania z usługi. apply_for_account: Poproś o zaproszenie change_password: Hasło checkbox_agreement_html: Zgadzam się z regułami serwera i zasadami korzystania z usługi diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 6a82a41b1e9..4fdacf51d47 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 as regras da instância e os nossos termos de serviço. apply_for_account: Pedir um convite change_password: Senha checkbox_agreement_html: Eu concordo com as regras do servidor e com os termos de serviço diff --git a/config/locales/pt.yml b/config/locales/pt.yml index d943d6511ac..92c8ab42f7b 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 as regras da instância e os nossos termos de serviço. change_password: Palavra-passe confirm_email: Confirmar e-mail delete_account: Eliminar conta diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 0331f002f60..cdb68c72ae6 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 regulile acestei instanțe și termenii de utilizare al acestui serviciu. change_password: Parolă confirm_email: Confirmă email delete_account: Șterge contul diff --git a/config/locales/ru.yml b/config/locales/ru.yml index ffc9471cd30..e821502583f 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -424,7 +424,6 @@ ru: warning: Будьте очень внимательны с этими данными. Не делитесь ими ни с кем! your_token: Ваш токен доступа auth: - agreement_html: Создавая аккаунт, вы соглашаетесь с правилами узла и нашими условиями обслуживания. change_password: Пароль confirm_email: Подтвердите email delete_account: Удалить аккаунт diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 3faaa6ac7bf..3317127f3ce 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: @@ -118,6 +120,8 @@ 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 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d1ff178fdb0..9dcb3f4701f 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ť pravidlami tohto servera, a taktiež našími prevádzkovými podmienkami. change_password: Heslo confirm_email: Potvrdiť email delete_account: Vymaž účet diff --git a/config/locales/sq.yml b/config/locales/sq.yml index f02c994ebc1..8303abea807 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 rregullat e shërbyesit dhe kushtet tona të shërbimit. change_password: Fjalëkalim confirm_email: Ripohoni email-in delete_account: Fshije llogarinë diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a2d57ce29a8..468867e6795 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 pravilima instance i uslovima korišćenja. delete_account: Obriši nalog delete_account_html: Ako želite da obrišete Vaš nalog, možete nastaviti ovde. Bićete upitani da potvrdite. didnt_get_confirmation: Niste dobili poruku sa uputstvima za potvrdu naloga? diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 45a59bcb1f5..49252b50002 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -492,7 +492,6 @@ sr: warning: Опрезно са овим подацима. Никад је не делите ни са ким! your_token: Ваш приступни токен auth: - agreement_html: Приступањем инстанци се слажете са правилима инстанце и условима коришћења. change_password: Лозинка confirm_email: Потврдите адресу е-поште delete_account: Обриши налог diff --git a/config/locales/sv.yml b/config/locales/sv.yml index b0c04329a75..ef208aceae3 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 instansens regler och våra användarvillkor. change_password: Lösenord confirm_email: Bekräfta e-postadress delete_account: Ta bort konto diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e72e2f46115..12f2d13a1fb 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -386,7 +386,6 @@ uk: warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким! your_token: Ваш токен доступу auth: - agreement_html: Реєструючись, ви погоджуєтеся виконувати правила інстанції та наші умови використання. change_password: Пароль confirm_email: Підтвердьте e-mail адресу delete_account: Видалити аккаунт diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index bfacc86fc66..4eafa70f4c0 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: 点击注册即表示你同意遵守本站的相关规定我们的使用条款。 change_password: 密码 confirm_email: 确认电子邮件地址 delete_account: 删除帐户 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 7b200e91ac0..9ff97805d6b 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: 登記即表示你同意遵守本服務站的規則使用條款。 change_password: 密碼 confirm_email: 確認電郵 delete_account: 刪除帳戶 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 913442e170b..9a13a602f33 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: 按下下方的「註冊」即代表同意遵守 此伺服器的規則 以及 使用條款。 change_password: 密碼 confirm_email: 確認電子信箱位址 delete_account: 刪除帳戶 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 00000000000..974e0f69feb --- /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 11535d8679f..3060159d25d 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" @@ -679,6 +679,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 @@ -816,6 +824,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/spec/fabricators/user_invite_request_fabricator.rb b/spec/fabricators/user_invite_request_fabricator.rb new file mode 100644 index 00000000000..5cc6ae56fec --- /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/models/user_invite_request_spec.rb b/spec/models/user_invite_request_spec.rb new file mode 100644 index 00000000000..1be38d8a477 --- /dev/null +++ b/spec/models/user_invite_request_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe UserInviteRequest, type: :model do +end From 48f466daf1498173cf6ec36db58562df9a031297 Mon Sep 17 00:00:00 2001 From: Hinaloe Date: Wed, 10 Apr 2019 00:02:12 +0900 Subject: [PATCH 10/30] Allow set the voting period to just 5 minutes (#10525) * Add spec of PollValidator for #10190 * Raise fraction less than 1 second * format * simplify time initialize --- app/validators/poll_validator.rb | 2 +- spec/validators/poll_validator_spec.rb | 28 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 spec/validators/poll_validator_spec.rb diff --git a/app/validators/poll_validator.rb b/app/validators/poll_validator.rb index fd497c8d0b9..9d7321cad62 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/spec/validators/poll_validator_spec.rb b/spec/validators/poll_validator_spec.rb new file mode 100644 index 00000000000..941b83401f5 --- /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 From 2cb16c20a636a364b6d4d17f9588541a0d113731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9F=C4=B1zhan?= <35808275+yagizhan49@users.noreply.github.com> Date: Tue, 9 Apr 2019 21:42:01 +0300 Subject: [PATCH 11/30] Fixed terrible grammar and translated the most (#10527) The translation was written in bad Turkish grammar. I fixed those terrible phrases and translated %93 of Mastodon. I'll come back and finish the translation. --- app/javascript/mastodon/locales/tr.json | 324 ++++++++++++------------ 1 file changed, 162 insertions(+), 162 deletions(-) diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index cbe1c5726b0..ec2d34a2642 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,7 +112,7 @@ "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", @@ -121,13 +121,13 @@ "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 +136,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 +145,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 +159,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 +284,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ç" } From 36b39fbac55a9b141b99b54f193ec2702f8c3c39 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 00:35:49 +0200 Subject: [PATCH 12/30] Add preference to disable e-mails about new pending accounts (#10529) --- app/controllers/settings/preferences_controller.rb | 2 +- app/models/user.rb | 6 +++++- app/views/settings/notifications/show.html.haml | 1 + config/locales/simple_form.en.yml | 1 + config/settings.yml | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index 90967635da5..5afdf0eec0d 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -49,7 +49,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_hide_network, :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/models/user.rb b/app/models/user.rb index c9309bc2167..135baae122b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -191,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 @@ -295,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/views/settings/notifications/show.html.haml b/app/views/settings/notifications/show.html.haml index 8aaac043b71..6ec57b502f7 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/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 3317127f3ce..1a43e19e231 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -128,6 +128,7 @@ en: 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/settings.yml b/config/settings.yml index 4f05519a555..63f7c338038 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -39,6 +39,7 @@ defaults: &defaults follow_request: true digest: true report: true + pending_account: true interactions: must_be_follower: false must_be_following: false From 46cb36fd2cc641ab6c125f7e91140fa1b1d77634 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 00:36:01 +0200 Subject: [PATCH 13/30] Add invite request to pending account notification e-mail (#10528) Fix sorting of the pending accounts page --- app/controllers/admin/pending_accounts_controller.rb | 2 +- app/helpers/application_helper.rb | 5 +++++ app/views/admin_mailer/new_pending_account.text.erb | 10 +++++++--- spec/mailers/previews/admin_mailer_preview.rb | 8 ++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 spec/mailers/previews/admin_mailer_preview.rb diff --git a/app/controllers/admin/pending_accounts_controller.rb b/app/controllers/admin/pending_accounts_controller.rb index 249525504b3..b62a9bc8466 100644 --- a/app/controllers/admin/pending_accounts_controller.rb +++ b/app/controllers/admin/pending_accounts_controller.rb @@ -30,7 +30,7 @@ module Admin private def set_accounts - @accounts = Account.joins(:user).merge(User.pending).includes(user: :invite_request).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/helpers/application_helper.rb b/app/helpers/application_helper.rb index b42b1bbdf76..9d113263dfd 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -117,4 +117,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/views/admin_mailer/new_pending_account.text.erb b/app/views/admin_mailer/new_pending_account.text.erb index ed31ae2eb75..a466ee2de74 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/spec/mailers/previews/admin_mailer_preview.rb b/spec/mailers/previews/admin_mailer_preview.rb new file mode 100644 index 00000000000..561a56b7874 --- /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 From 400397c0c790d7d401d14cea6a0f4c1643af45bc Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 03:34:16 +0200 Subject: [PATCH 14/30] Change HTML validator to ignore all errors except unmatched tags (#10534) --- app/models/form/admin_settings.rb | 3 ++- app/validators/html_validator.rb | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index d3af8c30f52..86a86ec6661 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -49,7 +49,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/validators/html_validator.rb b/app/validators/html_validator.rb index b7caee5a9e4..1c9cd303cf4 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}" : str) + fragment.errors.select { |error| ERROR_RE =~ error.message } end end From 9b0d8f74cbbb04c4b1227293137774db78b67896 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 03:47:11 +0200 Subject: [PATCH 15/30] Change the groupings of menu items in settings navigation (#10533) * Change the groupings of menu items in settings navigation Fix #10307 * Remove unused translations --- app/views/settings/preferences/show.html.haml | 1 + config/locales/ar.yml | 2 - config/locales/ast.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 2 - config/locales/co.yml | 2 - config/locales/cs.yml | 2 - config/locales/cy.yml | 2 - config/locales/da.yml | 2 - config/locales/de.yml | 2 - config/locales/el.yml | 2 - config/locales/en.yml | 6 +- config/locales/en_GB.yml | 2 - config/locales/eo.yml | 2 - config/locales/es.yml | 2 - config/locales/eu.yml | 2 - config/locales/fa.yml | 2 - config/locales/fi.yml | 2 - config/locales/fr.yml | 2 - config/locales/gl.yml | 2 - config/locales/he.yml | 1 - config/locales/hr.yml | 1 - config/locales/hu.yml | 2 - config/locales/id.yml | 1 - config/locales/io.yml | 1 - config/locales/it.yml | 2 - config/locales/ja.yml | 2 - config/locales/ka.yml | 2 - config/locales/kk.yml | 2 - config/locales/ko.yml | 2 - config/locales/lt.yml | 2 - config/locales/nl.yml | 2 - config/locales/no.yml | 2 - config/locales/oc.yml | 2 - config/locales/pl.yml | 2 - config/locales/pt-BR.yml | 2 - config/locales/pt.yml | 2 - config/locales/ru.yml | 2 - config/locales/sk.yml | 2 - config/locales/sq.yml | 2 - config/locales/sr-Latn.yml | 2 - config/locales/sr.yml | 2 - config/locales/sv.yml | 2 - config/locales/th.yml | 2 - config/locales/tr.yml | 1 - config/locales/uk.yml | 2 - config/locales/zh-CN.yml | 2 - config/locales/zh-HK.yml | 2 - config/locales/zh-TW.yml | 2 - config/navigation.rb | 73 ++++++++++--------- 50 files changed, 43 insertions(+), 124 deletions(-) diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml index 3cb91631ede..d81ee61add4 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/config/locales/ar.yml b/config/locales/ar.yml index e0ccb63a947..fe49ac7f6bd 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -812,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 f6892923c18..7a51be7cf44 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -300,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 2424d93991f..57aa6f87e01 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 5fd2ff8234e..17a5d9d0cef 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -867,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 c4122b6d94c..311e3f1427c 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -873,9 +873,7 @@ co: 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 7917166de7b..fdb0252bd45 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -883,9 +883,7 @@ cs: notifications: Oznámení preferences: Předvolby 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 9ab4fc394e1..f365f717336 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -812,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 2156acb4431..0787db621f1 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -700,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 cfe527b0a62..aaf1c30b2c4 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -868,9 +868,7 @@ de: notifications: Benachrichtigungen preferences: Einstellungen 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/el.yml b/config/locales/el.yml index 8ff42acbfe9..f2b6751ff6f 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -859,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 60540ecdcec..838d6adc325 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -860,6 +860,8 @@ en: revoke_success: Session successfully revoked title: Sessions settings: + account: Account + account_settings: Account settings authorized_apps: Authorized apps back: Back to Mastodon delete: Account deletion @@ -869,13 +871,13 @@ en: featured_tags: Featured hashtags 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 743989879e4..d428a95c3f5 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -854,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 cce32cc561b..b85cb1a4912 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -869,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 c0b6cfb3b58..3a8e8dc0b00 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -705,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 50e5b663946..5ae664cadde 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -787,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 0cf38092180..3a3455c6d1f 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -860,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 47ff00434e7..e4a0ed22cb9 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -613,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 f1d81acf02c..a6c806de39a 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -798,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 0ee3a329ca9..9c4673186b5 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -855,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 089af2bebde..e471c4d0252 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 f53515d7aff..f9c552bce14 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 f32f6f40790..b6029eecab7 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -533,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 a27f1f00886..4323c145fc5 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 b926fe64150..b5edb2aa324 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 bb170bc4a2f..508b8a0dc99 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -762,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 85e97580e8c..a4026fcfc03 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -871,9 +871,7 @@ ja: notifications: 通知 preferences: ユーザー設定 relationships: フォロー・フォロワー - settings: 設定 two_factor_authentication: 二段階認証 - your_apps: アプリ statuses: attached: description: '添付: %{attached}' diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 758a0429e33..9781fc5be90 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -668,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 da91ca9c473..84bd710818d 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -797,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 c97fd82092d..cf0a993849a 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -874,9 +874,7 @@ ko: notifications: 알림 preferences: 사용자 설정 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 97994c36278..7ea8dc76b2f 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -800,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 ca0f57ae0bc..ae274ad702a 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -856,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 d6475afd6a7..f16b314cb63 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -533,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 d1c6d11d9f8..81f17cd3dc9 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -890,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 192a56dcf69..1b9bb614c3a 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -889,9 +889,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 4fdacf51d47..2d117128877 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -867,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 92c8ab42f7b..b827184e90b 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -800,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/ru.yml b/config/locales/ru.yml index e821502583f..0d912d3523c 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -698,9 +698,7 @@ ru: migrate: Перенос аккаунта notifications: Уведомления preferences: Настройки - settings: Опции two_factor_authentication: Двухфакторная аутентификация - your_apps: Ваши приложения statuses: attached: description: 'Вложение: %{attached}' diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 9dcb3f4701f..bf7898ed74b 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -831,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 8303abea807..ea36a2189f0 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -784,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 468867e6795..2292b6a7f81 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -523,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 49252b50002..2bf9001ce5a 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -792,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 ef208aceae3..91d4c2496d5 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -600,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 729865c83c1..2ebd6c7f1c0 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 14e7f34df52..e3e27e3ef3a 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 12f2d13a1fb..a582b238535 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -648,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 4eafa70f4c0..ae49c053712 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -670,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 9ff97805d6b..aade1debb45 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -597,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 9a13a602f33..988357e1b1e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -666,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 dd5825867be..c2a8e45cea0 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -1,50 +1,53 @@ # 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 + navigation.items do |n| + n.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? } + 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 :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 :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_url, highlights_on: %r{/settings/preferences|/settings/notifications} + 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} - 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 :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 :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 :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 :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 :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 :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } + 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 + + n.item :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } end end From 830c2a9ccbe98e145640e12637ef3da56f41a7b5 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 04:25:09 +0200 Subject: [PATCH 16/30] Bump version to 2.8.0rc3 (#10535) --- CHANGELOG.md | 1 + lib/mastodon/version.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e163bee293..120ec7407bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ All notable changes to this project will be documented in this file. - 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/lib/mastodon/version.rb b/lib/mastodon/version.rb index 859850d15f7..bc27d06eaf5 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -21,7 +21,7 @@ module Mastodon end def flags - 'rc2' + 'rc3' end def to_a From fa4b51a1100d794f78e895ac692530fb1c4540aa Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 16:06:30 +0200 Subject: [PATCH 17/30] [Glitch] Add "why do you want to join" field to invite requests Port SCSS changes from 8b69a66380bbe32127e717ca2d79244392b7d2b6 to glitch-soc --- .../flavours/glitch/styles/accounts.scss | 26 +++++++++++++++++++ .../flavours/glitch/styles/widgets.scss | 9 +++++++ 2 files changed, 35 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/accounts.scss b/app/javascript/flavours/glitch/styles/accounts.scss index d2ae83b2e07..57451c3a156 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 307e509d596..e736d7a7ef3 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; From 92e19501949bac3825c23087e0aeba3109ea12d0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 9 Apr 2019 05:02:48 +0200 Subject: [PATCH 18/30] [Glitch] Fix glitched out "not found" message for non-existing profiles in web UI Port 56f29c38b603a98e7b9715c48de022106d8da073 to glitch-soc --- app/javascript/flavours/glitch/actions/alerts.js | 5 +++++ .../glitch/features/account_gallery/index.js | 13 ++++++++++++- .../features/account_timeline/components/header.js | 3 +-- .../glitch/features/account_timeline/index.js | 13 ++++++++++++- .../flavours/glitch/features/followers/index.js | 13 ++++++++++++- .../flavours/glitch/features/following/index.js | 13 ++++++++++++- 6 files changed, 54 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/alerts.js b/app/javascript/flavours/glitch/actions/alerts.js index 50cd48a9ede..b2c7ab76aad 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 63c1b2d8676..3b1af108f35 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 ( + + + + ); + } 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 96cabe847c5..0faa8a42454 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 ; + 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 9971c0f4acb..93d8fc9ec76 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 ( + + + + ); + } 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 6bb9f60fd01..2e47ab9b942 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 ( + + + + ); + } let loadMore = null; diff --git a/app/javascript/flavours/glitch/features/following/index.js b/app/javascript/flavours/glitch/features/following/index.js index 3f2f091a1f0..ad1445f3a84 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 ( + + + + ); + } let loadMore = null; From a5c60f87b177c6014d4124be6762dcb6f362b8a0 Mon Sep 17 00:00:00 2001 From: Alix Rossi Date: Wed, 10 Apr 2019 14:49:06 +0200 Subject: [PATCH 19/30] i18n: Update Corsican translations (#10538) --- config/locales/co.yml | 3 +++ config/locales/simple_form.co.yml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/config/locales/co.yml b/config/locales/co.yml index 311e3f1427c..1b0d8ff6aa3 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -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,6 +871,7 @@ 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 diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 53e48d75874..3a521e85e57 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ò From 4595168863700c05fa9d50acd6ba1feba242b0b2 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Wed, 10 Apr 2019 21:49:40 +0900 Subject: [PATCH 20/30] Translation - Korean (#10540) --- config/locales/ko.yml | 6 ++++++ config/locales/simple_form.ko.yml | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index cf0a993849a..6334ad30bbb 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 @@ -861,6 +862,9 @@ ko: revoke_success: 세션이 성공적으로 삭제되었습니다 title: 세션 settings: + account: 계정 + account_settings: 계정 설정 + appearance: 외관 authorized_apps: 인증된 애플리케이션 back: 돌아가기 delete: 계정 삭제 @@ -870,9 +874,11 @@ ko: featured_tags: 추천 해시태그 identity_proofs: 신원 증명 import: 데이터 가져오기 + import_and_export: 가져오기 / 내보내기 migrate: 계정 이동 notifications: 알림 preferences: 사용자 설정 + profile: 프로필 relationships: 팔로잉과 팔로워 two_factor_authentication: 2단계 인증 statuses: diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 81392c8bee6..9c5fc413dc5 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': 아니오 From 64027019655aac2eda7aee320c05f7b40ce98fb9 Mon Sep 17 00:00:00 2001 From: koyu Date: Wed, 10 Apr 2019 14:50:14 +0200 Subject: [PATCH 21/30] Updated German translation (#10539) * Updated German locales * Added account approval locales (German) * Updated JSON locales (German) * Updated German translation * Fixed grammar error (German) * New strings and adjustments (German) --- config/locales/de.yml | 10 ++++++++++ config/locales/simple_form.de.yml | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/config/locales/de.yml b/config/locales/de.yml index aaf1c30b2c4..7138b72697e 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 @@ -652,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: @@ -855,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 @@ -864,9 +872,11 @@ 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 two_factor_authentication: Zwei-Faktor-Auth statuses: diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 6dbfd17c07c..77947606965 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 From 3dea62bfa27b455e6e9a5ed87614a685717fc688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20=C4=BDach?= Date: Wed, 10 Apr 2019 14:50:39 +0200 Subject: [PATCH 22/30] Updates the grammar of the SK translation (#10541) --- app/javascript/mastodon/locales/sk.json | 104 ++++++++++++------------ 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 52c79c0bb05..8640438ffe4 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -159,8 +159,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 +177,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 +239,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 +247,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 +276,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 +293,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 +327,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 +352,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" From 4e59f709aac759a34cc571fdace19189df4d1f59 Mon Sep 17 00:00:00 2001 From: Aditoo17 <42938951+Aditoo17@users.noreply.github.com> Date: Wed, 10 Apr 2019 14:52:08 +0200 Subject: [PATCH 23/30] =?UTF-8?q?I18n:=20Final=20Czech=20translation=20?= =?UTF-8?q?=F0=9F=87=A8=F0=9F=87=BF=20(#10542)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * I18n: Update Czech translation * I18n: Why do you want to join translation * I18n: Translating a bunch of more stuff --- app/javascript/mastodon/locales/cs.json | 2 +- config/locales/cs.yml | 5 +++++ config/locales/simple_form.cs.yml | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 61d8651541c..f98ea7f26a4 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/config/locales/cs.yml b/config/locales/cs.yml index fdb0252bd45..ac3eb528372 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 @@ -870,6 +871,8 @@ cs: revoke_success: Relace úspěšně zamítnuta title: Relace settings: + account: Účet + account_settings: Nastavení účtu authorized_apps: Autorizované aplikace back: Zpět na Mastodon delete: Smazání účtu @@ -879,9 +882,11 @@ 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í two_factor_authentication: Dvoufázové ověřování statuses: diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 579f627d719..2b48884242f 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 From 2e01a9b20de2daad74495c1200244dd232fcfa75 Mon Sep 17 00:00:00 2001 From: Aditoo17 <42938951+Aditoo17@users.noreply.github.com> Date: Wed, 10 Apr 2019 17:17:17 +0200 Subject: [PATCH 24/30] I18n: Add one more string (#10543) --- config/locales/cs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index ac3eb528372..ca456b7efbf 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -873,6 +873,7 @@ cs: settings: account: Účet account_settings: Nastavení účtu + appearance: Vzhled authorized_apps: Autorizované aplikace back: Zpět na Mastodon delete: Smazání účtu From 9e2a1f18380ffb0184513882d8d46c50f17d1312 Mon Sep 17 00:00:00 2001 From: mayaeh Date: Thu, 11 Apr 2019 00:36:45 +0900 Subject: [PATCH 25/30] i18n: Update Japanese translations (#10536) * run i18n-tasks add-missing * Update Japanese translations. --- config/locales/en.yml | 1 + config/locales/ja.yml | 18 ++++++++++++------ config/locales/simple_form.ja.yml | 5 +++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 838d6adc325..405b0eda5a0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -862,6 +862,7 @@ en: settings: account: Account account_settings: Account settings + appearance: Appearance authorized_apps: Authorized apps back: Back to Mastodon delete: Account deletion diff --git a/config/locales/ja.yml b/config/locales/ja.yml index a4026fcfc03..545146145c1 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: |

ルールを書くのに適した場所

詳細説明が設定されていません。

- 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 @@ -530,7 +531,7 @@ ja: cas: CAS saml: SAML register: 登録する - registration_closed: "%{instance} は現在新しいメンバーを受け入れていません" + registration_closed: "%{instance} は現在、新規登録停止中です" resend_confirmation: 確認メールを再送する reset_password: パスワードを再発行 security: セキュリティ @@ -858,6 +859,9 @@ ja: revoke_success: セッションを削除しました title: セッション settings: + account: アカウント + account_settings: セキュリティ + appearance: プロフィールを編集 authorized_apps: 認証済みアプリ back: Mastodon に戻る delete: アカウントの削除 @@ -867,9 +871,11 @@ ja: featured_tags: 注目のハッシュタグ identity_proofs: Identity proofs import: データのインポート + import_and_export: インポート・エクスポート migrate: アカウントの引っ越し notifications: 通知 preferences: ユーザー設定 + profile: プロフィール relationships: フォロー・フォロワー two_factor_authentication: 二段階認証 statuses: diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 87ffe9d1437..05933e01688 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: @@ -118,12 +120,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': いいえ From 154106c0c3b8fdd64f739fc449203b842924df0c Mon Sep 17 00:00:00 2001 From: Alex Gessner Date: Wed, 10 Apr 2019 12:05:11 -0400 Subject: [PATCH 26/30] compare usernames case-insensitively on new proof creation flow (#10544) * compare usernames case-insensitively on new proof creation flow * Fix code style issue --- .../settings/identity_proofs_controller.rb | 2 +- .../settings/identity_proofs_controller_spec.rb | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/controllers/settings/identity_proofs_controller.rb b/app/controllers/settings/identity_proofs_controller.rb index 8f857fdccbd..e22b4d9be97 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/spec/controllers/settings/identity_proofs_controller_spec.rb b/spec/controllers/settings/identity_proofs_controller_spec.rb index 5c05eb83c36..2a0f91088a9 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 From d431c810d34ee9d569e21982fb854b5ac8c61291 Mon Sep 17 00:00:00 2001 From: Alex Gessner Date: Wed, 10 Apr 2019 12:11:53 -0400 Subject: [PATCH 27/30] increase allowable length of remote proof username (#10546) --- app/models/account_identity_proof.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/account_identity_proof.rb b/app/models/account_identity_proof.rb index 1ac2347352d..5871d0e849a 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 } From 793b0513eb14c08443e11202b3ffbee141e33df7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 18:17:24 +0200 Subject: [PATCH 28/30] Weblate translations (2019-04-10) (#10545) * Translated using Weblate (Occitan) Currently translated at 95.7% (780 of 815 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/ * Translated using Weblate (Greek) Currently translated at 100,0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/ * Translated using Weblate (Greek) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/el/ * Translated using Weblate (Greek) Currently translated at 100.0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/el/ * Translated using Weblate (French) Currently translated at 100.0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (French) Currently translated at 100.0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/fr/ * Translated using Weblate (French) Currently translated at 100.0% (66 of 66 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/fr/ * Translated using Weblate (Dutch) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/nl/ * Translated using Weblate (Galician) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/gl/ * Translated using Weblate (Dutch) Currently translated at 100,0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/ * Translated using Weblate (Galician) Currently translated at 100,0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/gl/ * Translated using Weblate (Slovak) Currently translated at 100.0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Arabic) Currently translated at 97.4% (372 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (French) Currently translated at 100.0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Thai) Currently translated at 75.4% (288 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/th/ * Translated using Weblate (Slovak) Currently translated at 100.0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/sk/ * Translated using Weblate (German) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/de/ * Translated using Weblate (Slovak) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/sk/ * Translated using Weblate (Kazakh) Currently translated at 100,0% (4 of 4 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/kk/ * Translated using Weblate (Persian) Currently translated at 100.0% (382 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fa/ * Translated using Weblate (Kazakh) Currently translated at 99.0% (378 of 382 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/kk/ * i18n-tasks normalize * yarn manage:translations * Fix empty string in Occitan --- app/javascript/mastodon/locales/ar.json | 27 ++++++++++---------- app/javascript/mastodon/locales/ast.json | 1 + app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/bn.json | 1 + app/javascript/mastodon/locales/ca.json | 1 + app/javascript/mastodon/locales/cy.json | 1 + app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/el.json | 19 +++++++------- app/javascript/mastodon/locales/eo.json | 1 + app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 1 + app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fr.json | 25 +++++++++--------- app/javascript/mastodon/locales/gl.json | 1 + app/javascript/mastodon/locales/he.json | 1 + app/javascript/mastodon/locales/hr.json | 1 + app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/hy.json | 1 + app/javascript/mastodon/locales/id.json | 1 + app/javascript/mastodon/locales/io.json | 1 + app/javascript/mastodon/locales/it.json | 1 + app/javascript/mastodon/locales/ka.json | 1 + app/javascript/mastodon/locales/kk.json | 9 ++++--- app/javascript/mastodon/locales/lv.json | 1 + app/javascript/mastodon/locales/ms.json | 1 + app/javascript/mastodon/locales/nl.json | 1 + app/javascript/mastodon/locales/no.json | 1 + app/javascript/mastodon/locales/oc.json | 1 - app/javascript/mastodon/locales/pl.json | 2 +- app/javascript/mastodon/locales/pt-BR.json | 1 + app/javascript/mastodon/locales/pt.json | 1 + app/javascript/mastodon/locales/ro.json | 1 + app/javascript/mastodon/locales/ru.json | 1 + app/javascript/mastodon/locales/sk.json | 1 + app/javascript/mastodon/locales/sl.json | 1 + app/javascript/mastodon/locales/sq.json | 1 + app/javascript/mastodon/locales/sr-Latn.json | 1 + app/javascript/mastodon/locales/sr.json | 1 + app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/ta.json | 1 + app/javascript/mastodon/locales/te.json | 1 + app/javascript/mastodon/locales/th.json | 15 ++++++----- app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 1 + app/javascript/mastodon/locales/zh-HK.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 1 + babel.config.js | 2 +- config/locales/activerecord.de.yml | 3 +++ config/locales/activerecord.el.yml | 3 +++ config/locales/activerecord.fr.yml | 4 +++ config/locales/activerecord.gl.yml | 3 +++ config/locales/activerecord.kk.yml | 4 +++ config/locales/activerecord.nl.yml | 3 +++ config/locales/activerecord.sk.yml | 5 +++- config/locales/devise.fr.yml | 3 +++ 57 files changed, 120 insertions(+), 49 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 6ed79994193..e815d54d530 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 a341567a796..a983f63a459 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 49e04358217..36a08b26426 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 0d095bdeb49..338e49f81d2 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 c6b71a4f8ba..18dd56d0df5 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/cy.json b/app/javascript/mastodon/locales/cy.json index f03b547509a..d886b2b54d4 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 1be8d989db7..89096b29bfb 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 701410a81b0..69c0dcbadca 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 ed01136503c..740f2bfaed4 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 97d03d84045..158a116d00f 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 17f84dc279d..bd26ae232ab 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 91a27e36673..6890fa971db 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 68381f6b32f..825cd4a7513 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 4d7451248dd..58f3ce14767 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 3011e7d078e..723328ab467 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 c136c111fa3..c9228cffda6 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 86bd01a7981..55a4ec4eec7 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 507e0440037..c5b0831c3a5 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 a4c8bffba9f..c3971b09e58 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 5319705dc2f..c4610c33054 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 300bc448475..dcdae5771f5 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 d70a88dbbc5..792204830e2 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 fa1d823d06d..ac983a546e0 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 12cdf25c923..ee7bf5d6eb5 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 0fa0c4fdee6..ac33426995d 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 eedd4c6f34a..220cc86f9f0 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 cac676c7b4b..5fb445209cd 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 9556c5ad893..fc2c3c57363 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 c9d896f5b30..4dfb9904e9a 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -117,7 +117,6 @@ "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", "empty_column.account_timeline": "Cap de tuts aquí !", - "empty_column.account_timeline_blocked": "Sètz blocat", "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 !", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index e967170125a..b25a2c5f1fb 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -117,7 +117,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 c2bac0f0768..5b07c22952d 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 001a48b0484..2abc3e2522e 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 7192e10b9dd..c0ec77cc67f 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 09425c32e9b..77559385179 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.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/sk.json b/app/javascript/mastodon/locales/sk.json index 8640438ffe4..c4fcb9f187c 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.", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index bef4efe0ec5..f7a294cfe0a 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 b86c6e2ee50..89df633ccf3 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 155935306e6..2fc5f985acd 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 1124ed8d50b..2ae34adcad8 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 9093637b358..71264ba526f 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 eedd4c6f34a..220cc86f9f0 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 c93ff63df4b..7e818c78785 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 e15382402d3..630543ada70 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 ec2d34a2642..26eca82398b 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -117,6 +117,7 @@ "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.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index fc1c4f5d504..51a48a2b2ef 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 702be0ded60..f9c6b4d4151 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 5ea738bc95f..ed448f65a70 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 6d33ef0709b..b43a0b72c08 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/babel.config.js b/babel.config.js index a506ad8ce6e..55efafc4011 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 19267cc4cf8..ce465545b7b 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 e396860ea9f..abeca78ac62 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 c4b04c73ada..e26e0259230 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 65a83fbee14..3792f347613 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 41d3b2525fa..fba2e60549c 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 bdb87e8e5d4..31348b18f51 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.sk.yml b/config/locales/activerecord.sk.yml index bba7c66f2d3..9d59edd5be1 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/devise.fr.yml b/config/locales/devise.fr.yml index 944f9b556fd..2d3c86c1fb9 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 les règles du serveur et nos conditions d’utilisation. 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. From a9f130b8d8e1d92a10cb92b1295b12d274f3139c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 10 Apr 2019 20:28:43 +0200 Subject: [PATCH 29/30] Fix Keybase verification using wrong domain for remote accounts (#10547) --- app/lib/proof_provider/keybase.rb | 16 ++++++++++++---- app/lib/proof_provider/keybase/badge.rb | 9 +++------ app/lib/proof_provider/keybase/verifier.rb | 5 +++-- app/lib/proof_provider/keybase/worker.rb | 5 ++--- app/models/account_identity_proof.rb | 4 ++-- spec/lib/proof_provider/keybase/verifier_spec.rb | 2 +- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/lib/proof_provider/keybase.rb b/app/lib/proof_provider/keybase.rb index 628972e9d97..9680b90eedc 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 3aa067ecf40..f587b1cc744 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 ab14223239c..af69b1bfc84 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 2872f59c10d..bcdd18cc561 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 5871d0e849a..10b66cccf9b 100644 --- a/app/models/account_identity_proof.rb +++ b/app/models/account_identity_proof.rb @@ -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/spec/lib/proof_provider/keybase/verifier_spec.rb b/spec/lib/proof_provider/keybase/verifier_spec.rb index 4ce67da9c56..0081a735df0 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 From 5dd14dfdede5cfd98551f545336e18ad1c705c21 Mon Sep 17 00:00:00 2001 From: Evgeny Petrov Date: Wed, 10 Apr 2019 21:43:08 +0300 Subject: [PATCH 30/30] i18n: Russian localization update (#10515) * i18n: Updated ru.json for Russian language * i18n: Updated ru.yml * Normalize ru.yml * i18n: Updated simple_form.ru.yml * i18n: Updated activerecord.ru.yml, devise.ru.yml, normalized strings * Added new strings to ru.json * Deleted unused (?) string * i18n: Added recent strings (Settings refactor) --- app/javascript/mastodon/locales/ru.json | 159 ++++++------- config/locales/activerecord.ru.yml | 4 + config/locales/devise.ru.yml | 40 ++-- config/locales/ru.yml | 298 +++++++++++++++++++++--- config/locales/simple_form.ru.yml | 68 ++++-- 5 files changed, 424 insertions(+), 145 deletions(-) diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 77559385179..13f511cbfaa 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,8 +116,9 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "Статусов нет!", + "empty_column.account_unavailable": "Профиль недоступен", + "empty_column.account_timeline_blocked": "Вы заблокированы", "empty_column.blocks": "Вы ещё никого не заблокировали.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.", @@ -136,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": "продвинуть пост", @@ -213,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": "Искать из ваших подписок", @@ -223,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": "Создать новый статус", @@ -247,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": "Направленный", @@ -293,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": "Возвращает посты, которые Вы написали, отметили как 'избранное', продвинули или в которых были упомянуты, а также содержащие юзернейм, имя и хэштеги.", @@ -310,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}", @@ -327,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} продвинул(а)", @@ -347,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/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 2a2d62a7ef5..d4529428a4c 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/devise.ru.yml b/config/locales/devise.ru.yml index 2186066c9dd..65441f24b71 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: Пожалуйста, ознакомьтесь правилами узла and условиями пользования Сервисом. 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/ru.yml b/config/locales/ru.yml index 0d912d3523c..edccd9e7c22 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -4,19 +4,30 @@ ru: about_hashtag_html: Это публичные статусы, отмеченные хэштегом #%{hashtag}. Вы можете взаимодействовать с ними при наличии у Вас аккаунта в глобальной сети Mastodon. about_mastodon_html: Mastodon - это свободная социальная сеть с открытым исходным кодом. Как децентрализованная альтернатива коммерческим платформам, Mastodon предотвращает риск монополизации Вашего общения одной компанией. Выберите сервер, которому Вы доверяете — что бы Вы ни выбрали, Вы сможете общаться со всеми остальными. Любой может запустить свой собственный узел Mastodon и участвовать в социальной сети совершенно бесшовно. 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: |

Хорошее место для правил

Расширенное описание еще не настроено.

+ 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: "Федеративный ретранслятор – это промежуточный сервер, который передаёт большие объёмы публичных статусов между серверами, которые подписываются и публикуют туда. Это может помочь небольшим и средним серверам находить записи со всей федерации, ведь в противном случае пользователям нужно будет вручную подписываться на людей с удалённых узлов." + 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: Отображается на титульной странице, когда закрыта регистрация
Можно использовать 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,7 +525,9 @@ ru: warning: Будьте очень внимательны с этими данными. Не делитесь ими ни с кем! your_token: Ваш токен доступа auth: + apply_for_account: Запросить приглашение change_password: Пароль + checkbox_agreement_html: Я соглашаюсь с правилами сервера и Условиями использования confirm_email: Подтвердите email delete_account: Удалить аккаунт delete_account_html: Если Вы хотите удалить свой аккаунт, вы можете перейти сюда. У Вас будет запрошено подтверждение. @@ -440,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: К сожалению, при поиске удаленного аккаунта возникла ошибка @@ -477,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': Страница, которую Вы искали, не существует. @@ -489,6 +606,9 @@ ru: content: Приносим извинения, но на нашей стороне что-то пошло не так. title: Страница неверна noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript. Кроме того, вы можете использовать одно из приложений Mastodon для Вашей платформы. + existing_username_validator: + not_found: не удалось найти локального пользователя с таким именем + not_found_multiple: не удалось найти %{usernames} exports: archive_takeout: date: Дата @@ -499,9 +619,15 @@ ru: size: Размер blocks: Список блокировки csv: CSV + domain_blocks: Доменные блокировки follows: Подписки + lists: Списки mutes: Список глушения storage: Ваш медиаконтент + featured_tags: + add_new: Добавить + errors: + limit: Вы уже добавили максимальное число хэштегов filters: contexts: home: Домашняя лента @@ -523,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: Загрузить @@ -551,6 +706,7 @@ ru: '86400': 1 день expires_in_prompt: Никогда generate: Сгенерировать + invited_by: 'Вас пригласил(а):' max_uses: few: "%{count} исп." many: "%{count} исп." @@ -573,7 +729,7 @@ ru: acct: имя@домен нового аккаунта currently_redirecting: 'Ваш профиль будет перенаправлен на:' proceed: Сохранить - updated_msg: Настройки миграции Вашего аккаунта обновлены! + updated_msg: Настройки миграции вашего аккаунта обновлены! moderation: title: Модерация notification_mailer: @@ -582,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: Ответить @@ -612,7 +768,7 @@ ru: title: Новое упоминание reblog: body: 'Ваш статус был продвинут %{name}:' - subject: "%{name} продвинул(а) Ваш статус" + subject: "%{name} продвинул(а) ваш статус" title: Новое продвижение number: human: @@ -631,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: Нет учётной записи? Вы можете зарегистрироваться здесь proceed: Продолжить подписку prompt: 'Вы хотите подписаться на:' + reason_html: "Почему это необходимо? %{instance} может не являться сервером, на котором вы зарегистрированы, поэтому нам сперва нужно перенаправить вас на домашний сервер." + 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: Браузер @@ -688,16 +882,24 @@ 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: Настройки + profile: Профиль + relationships: Подписки и подписчики two_factor_authentication: Двухфакторная аутентификация statuses: attached: @@ -727,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}"' @@ -821,12 +1030,13 @@ ru:

Originally adapted from the Discourse privacy policy.

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: При включении двухфакторной аутентификации, вход потребует от Вас использования Вашего телефона, который сгенерирует входные токены. @@ -848,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: 'Вы можете подтвердить себя как владельца ссылок в вашем профиле. Для этого указанный веб-сайт должен содержать обратную ссылку на ваш профиль в Mastodon. У обратной ссылки должен быть атрибут rel="me". Сам текст ссылки не имеет значения. Пример:' + verification: Подтверждение diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 44cd7ccd626..4196076a96c 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: (Необязательно) Можно использовать обычный синтаксис. Для экономии времени добавьте шаблоны предупреждений + type_html: Выберите, что делать с аккаунтом %{acct} + warning_preset_id: Необязательно. Вы можете добавить собственный текст в конце шаблона defaults: autofollow: Люди, пришедшие по этому приглашению автоматически будут подписаны на Вас avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем context: Один или несколько контекстов, к которым должны быть применены фильтры - digest: Отсылается лишь после длительной неактивности, если Вы в это время получали личные сообщения + digest: Отсылается лишь после длительной неактивности, если вы в это время получали личные сообщения + discoverable_html: Каталог позволяет пользователям искать людей по интересам и активности. Необходимо наличие не менее %{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: