mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-28 19:10:31 +00:00
Merge pull request #985 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
commit
31e4fcb006
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -11,14 +11,14 @@ All notable changes to this project will be documented in this file.
|
|||
- Add identity proof integration with Keybase ([Gargron](https://github.com/tootsuite/mastodon/pull/10297), [xgess](https://github.com/tootsuite/mastodon/pull/10375), [Gargron](https://github.com/tootsuite/mastodon/pull/10338), [Gargron](https://github.com/tootsuite/mastodon/pull/10350), [Gargron](https://github.com/tootsuite/mastodon/pull/10414))
|
||||
- Add option to overwrite imported data instead of merging ([Gargron](https://github.com/tootsuite/mastodon/pull/9962))
|
||||
- Add featured hashtags to profiles ([Gargron](https://github.com/tootsuite/mastodon/pull/9755), [Gargron](https://github.com/tootsuite/mastodon/pull/10167), [Gargron](https://github.com/tootsuite/mastodon/pull/10249), [ThibG](https://github.com/tootsuite/mastodon/pull/10034))
|
||||
- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349))
|
||||
- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349), [Gargron](https://github.com/tootsuite/mastodon/pull/10469))
|
||||
- Add support for WebP uploads ([acid-chicken](https://github.com/tootsuite/mastodon/pull/9879))
|
||||
- Add "copy link" item to status action bars in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9983))
|
||||
- Add list title editing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9748))
|
||||
- Add a "Block & Report" button to the block confirmation dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10360))
|
||||
- Add disappointed elephant when the page crashes in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10275))
|
||||
- Add ability to upload multiple files at once in web UI ([tmm576](https://github.com/tootsuite/mastodon/pull/9856))
|
||||
- Add indication that you have been blocked when viewing profiles in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420))
|
||||
- Add indication when you are not allowed to follow an account in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420), [Gargron](https://github.com/tootsuite/mastodon/pull/10491))
|
||||
- Add validations to admin settings to catch common mistakes ([Gargron](https://github.com/tootsuite/mastodon/pull/10348), [ThibG](https://github.com/tootsuite/mastodon/pull/10354))
|
||||
- Add `type`, `limit`, `offset`, `min_id`, `max_id`, `account_id` to search API ([Gargron](https://github.com/tootsuite/mastodon/pull/10091))
|
||||
- Add a preferences API so apps can share basic behaviours ([Gargron](https://github.com/tootsuite/mastodon/pull/10109))
|
||||
|
@ -32,6 +32,10 @@ All notable changes to this project will be documented in this file.
|
|||
- Add `DB_SSLMODE` configuration variable ([sascha-sl](https://github.com/tootsuite/mastodon/pull/10210))
|
||||
- Add click-to-copy UI to invites page ([Gargron](https://github.com/tootsuite/mastodon/pull/10259))
|
||||
- Add self-replies fetching ([ThibG](https://github.com/tootsuite/mastodon/pull/10106), [ThibG](https://github.com/tootsuite/mastodon/pull/10128), [ThibG](https://github.com/tootsuite/mastodon/pull/10175), [ThibG](https://github.com/tootsuite/mastodon/pull/10201))
|
||||
- Add rate limit for media proxy requests ([Gargron](https://github.com/tootsuite/mastodon/pull/10490))
|
||||
- Add `tootctl emoji purge` ([Gargron](https://github.com/tootsuite/mastodon/pull/10481))
|
||||
- Add `tootctl accounts approve` ([Gargron](https://github.com/tootsuite/mastodon/pull/10480))
|
||||
- Add `tootctl accounts reset-relationships` ([noellabo](https://github.com/tootsuite/mastodon/pull/10483))
|
||||
|
||||
### Changed
|
||||
|
||||
|
@ -51,6 +55,10 @@ All notable changes to this project will be documented in this file.
|
|||
- Change web UI to use new Web Share Target API ([gol-cha](https://github.com/tootsuite/mastodon/pull/9963))
|
||||
- Change ActivityPub reports to have persistent URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/10303))
|
||||
- Change `tootctl accounts cull --dry-run` to list accounts that would be deleted ([BenLubar](https://github.com/tootsuite/mastodon/pull/10460))
|
||||
- Change format of CSV exports of follows and mutes to include extra settings ([ThibG](https://github.com/tootsuite/mastodon/pull/10495), [ThibG](https://github.com/tootsuite/mastodon/pull/10335))
|
||||
- Change ActivityPub collections to be cacheable by proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/10467))
|
||||
- Change REST API and public profiles to not return follows/followers for users that have blocked you ([Gargron](https://github.com/tootsuite/mastodon/pull/10491))
|
||||
- Change the groupings of menu items in settings navigation ([Gargron](https://github.com/tootsuite/mastodon/pull/10533))
|
||||
|
||||
### Removed
|
||||
|
||||
|
|
10
Gemfile.lock
10
Gemfile.lock
|
@ -99,7 +99,7 @@ GEM
|
|||
rack (>= 0.9.0)
|
||||
binding_of_caller (0.8.0)
|
||||
debug_inspector (>= 0.0.1)
|
||||
bootsnap (1.4.2)
|
||||
bootsnap (1.4.3)
|
||||
msgpack (~> 1.0)
|
||||
brakeman (4.5.0)
|
||||
browser (2.5.3)
|
||||
|
@ -240,11 +240,11 @@ GEM
|
|||
http (~> 3.0)
|
||||
nokogiri (~> 1.8)
|
||||
oj (~> 3.0)
|
||||
hamlit (2.9.2)
|
||||
hamlit (2.9.3)
|
||||
temple (>= 0.8.0)
|
||||
thor
|
||||
tilt
|
||||
hamlit-rails (0.2.2)
|
||||
hamlit-rails (0.2.3)
|
||||
actionpack (>= 4.0.1)
|
||||
activesupport (>= 4.0.1)
|
||||
hamlit (>= 1.2.0)
|
||||
|
@ -426,7 +426,7 @@ GEM
|
|||
pundit (2.0.1)
|
||||
activesupport (>= 3.0.0)
|
||||
raabro (1.1.6)
|
||||
rack (2.0.6)
|
||||
rack (2.0.7)
|
||||
rack-attack (5.4.2)
|
||||
rack (>= 1.0, < 3)
|
||||
rack-cors (1.0.3)
|
||||
|
@ -597,7 +597,7 @@ GEM
|
|||
multi_json (~> 1.8)
|
||||
strong_migrations (0.3.1)
|
||||
activerecord (>= 3.2.0)
|
||||
temple (0.8.0)
|
||||
temple (0.8.1)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
terrapin (0.6.0)
|
||||
|
|
|
@ -17,7 +17,10 @@ class AboutController < ApplicationController
|
|||
private
|
||||
|
||||
def new_user
|
||||
User.new.tap(&:build_account)
|
||||
User.new.tap do |user|
|
||||
user.build_account
|
||||
user.build_invite_request
|
||||
end
|
||||
end
|
||||
|
||||
helper_method :new_user
|
||||
|
|
|
@ -8,29 +8,29 @@ module Admin
|
|||
@form = Form::AccountBatch.new
|
||||
end
|
||||
|
||||
def update
|
||||
def batch
|
||||
@form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button))
|
||||
@form.save
|
||||
rescue ActionController::ParameterMissing
|
||||
# Do nothing
|
||||
flash[:alert] = I18n.t('admin.accounts.no_account_selected')
|
||||
ensure
|
||||
redirect_to admin_pending_accounts_path(current_params)
|
||||
end
|
||||
|
||||
def approve_all
|
||||
Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'approve').save
|
||||
Form::AccountBatch.new(current_account: current_account, account_ids: User.pending.pluck(:account_id), action: 'approve').save
|
||||
redirect_to admin_pending_accounts_path(current_params)
|
||||
end
|
||||
|
||||
def reject_all
|
||||
Form::AccountBatch.new(account_ids: User.pending.pluck(:account_id), action: 'reject').save
|
||||
Form::AccountBatch.new(current_account: current_account, account_ids: User.pending.pluck(:account_id), action: 'reject').save
|
||||
redirect_to admin_pending_accounts_path(current_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_accounts
|
||||
@accounts = Account.joins(:user).merge(User.pending).page(params[:page])
|
||||
@accounts = Account.joins(:user).merge(User.pending.recent).includes(user: :invite_request).page(params[:page])
|
||||
end
|
||||
|
||||
def form_account_batch_params
|
||||
|
|
|
@ -11,6 +11,10 @@ class Auth::RegistrationsController < Devise::RegistrationsController
|
|||
before_action :set_instance_presenter, only: [:new, :create, :update]
|
||||
before_action :set_body_classes, only: [:new, :create, :edit, :update]
|
||||
|
||||
def new
|
||||
super(&:build_invite_request)
|
||||
end
|
||||
|
||||
def destroy
|
||||
not_found
|
||||
end
|
||||
|
@ -25,17 +29,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController
|
|||
def build_resource(hash = nil)
|
||||
super(hash)
|
||||
|
||||
resource.locale = I18n.locale
|
||||
resource.invite_code = params[:invite_code] if resource.invite_code.blank?
|
||||
resource.agreement = true
|
||||
resource.locale = I18n.locale
|
||||
resource.invite_code = params[:invite_code] if resource.invite_code.blank?
|
||||
resource.agreement = true
|
||||
resource.current_sign_in_ip = request.remote_ip
|
||||
|
||||
resource.current_sign_in_ip = request.remote_ip if resource.current_sign_in_ip.nil?
|
||||
resource.build_account if resource.account.nil?
|
||||
end
|
||||
|
||||
def configure_sign_up_params
|
||||
devise_parameter_sanitizer.permit(:sign_up) do |u|
|
||||
u.permit({ account_attributes: [:username] }, :email, :password, :password_confirmation, :invite_code)
|
||||
u.permit({ account_attributes: [:username], invite_request_attributes: [:text] }, :email, :password, :password_confirmation, :invite_code)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -46,7 +46,7 @@ class Settings::PreferencesController < Settings::BaseController
|
|||
:setting_hide_followers_count,
|
||||
:setting_aggregate_reblogs,
|
||||
:setting_show_application,
|
||||
notification_emails: %i(follow follow_request reblog favourite mention digest report),
|
||||
notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account),
|
||||
interactions: %i(must_be_follower must_be_following)
|
||||
)
|
||||
end
|
||||
|
|
|
@ -118,4 +118,9 @@ module ApplicationHelper
|
|||
def storage_host?
|
||||
ENV['S3_ALIAS_HOST'].present? || ENV['S3_CLOUDFRONT_HOST'].present?
|
||||
end
|
||||
|
||||
def quote_wrap(text, line_width: 80, break_sequence: "\n")
|
||||
text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence)
|
||||
text.split("\n").map { |line| '> ' + line }.join("\n")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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}`;
|
||||
|
||||
|
|
|
@ -13,8 +13,10 @@ import MediaItem from './components/media_item';
|
|||
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
|
||||
import { ScrollContainer } from 'react-router-scroll-4';
|
||||
import LoadMore from 'flavours/glitch/components/load_more';
|
||||
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
medias: getAccountGallery(state, props.params.accountId),
|
||||
isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),
|
||||
hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),
|
||||
|
@ -51,6 +53,7 @@ export default class AccountGallery extends ImmutablePureComponent {
|
|||
medias: ImmutablePropTypes.list.isRequired,
|
||||
isLoading: PropTypes.bool,
|
||||
hasMore: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentDidMount () {
|
||||
|
@ -103,7 +106,15 @@ export default class AccountGallery extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { medias, isLoading, hasMore } = this.props;
|
||||
const { medias, isLoading, hasMore, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
let loadOlder = null;
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
|||
import PropTypes from 'prop-types';
|
||||
import InnerHeader from 'flavours/glitch/features/account/components/header';
|
||||
import ActionBar from 'flavours/glitch/features/account/components/action_bar';
|
||||
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { NavLink } from 'react-router-dom';
|
||||
|
@ -89,7 +88,7 @@ export default class Header extends ImmutablePureComponent {
|
|||
const { account, hideTabs, identity_proofs } = this.props;
|
||||
|
||||
if (account === null) {
|
||||
return <MissingIndicator />;
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -13,11 +13,13 @@ import { List as ImmutableList } from 'immutable';
|
|||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { fetchAccountIdentityProofs } from '../../actions/identity_proofs';
|
||||
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, { params: { accountId }, withReplies = false }) => {
|
||||
const path = withReplies ? `${accountId}:with_replies` : accountId;
|
||||
|
||||
return {
|
||||
isAccount: !!state.getIn(['accounts', accountId]),
|
||||
statusIds: state.getIn(['timelines', `account:${path}`, 'items'], ImmutableList()),
|
||||
featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()),
|
||||
isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),
|
||||
|
@ -36,6 +38,7 @@ export default class AccountTimeline extends ImmutablePureComponent {
|
|||
isLoading: PropTypes.bool,
|
||||
hasMore: PropTypes.bool,
|
||||
withReplies: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -73,7 +76,15 @@ export default class AccountTimeline extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { statusIds, featuredStatusIds, isLoading, hasMore } = this.props;
|
||||
const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
if (!statusIds && isLoading) {
|
||||
return (
|
||||
|
|
|
@ -15,8 +15,10 @@ import ProfileColumnHeader from 'flavours/glitch/features/account/components/pro
|
|||
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
|
||||
import LoadMore from 'flavours/glitch/components/load_more';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
|
||||
});
|
||||
|
@ -29,6 +31,7 @@ export default class Followers extends ImmutablePureComponent {
|
|||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -70,7 +73,15 @@ export default class Followers extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { accountIds, hasMore } = this.props;
|
||||
const { accountIds, hasMore, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
let loadMore = null;
|
||||
|
||||
|
|
|
@ -15,8 +15,10 @@ import ProfileColumnHeader from 'flavours/glitch/features/account/components/pro
|
|||
import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
|
||||
import LoadMore from 'flavours/glitch/components/load_more';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import MissingIndicator from 'flavours/glitch/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),
|
||||
});
|
||||
|
@ -29,6 +31,7 @@ export default class Following extends ImmutablePureComponent {
|
|||
dispatch: PropTypes.func.isRequired,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -70,7 +73,15 @@ export default class Following extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { accountIds, hasMore } = this.props;
|
||||
const { accountIds, hasMore, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
let loadMore = null;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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}`;
|
||||
|
||||
|
|
|
@ -13,8 +13,10 @@ import MediaItem from './components/media_item';
|
|||
import HeaderContainer from '../account_timeline/containers/header_container';
|
||||
import { ScrollContainer } from 'react-router-scroll-4';
|
||||
import LoadMore from '../../components/load_more';
|
||||
import MissingIndicator from 'mastodon/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
medias: getAccountGallery(state, props.params.accountId),
|
||||
isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),
|
||||
hasMore: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),
|
||||
|
@ -52,6 +54,7 @@ class AccountGallery extends ImmutablePureComponent {
|
|||
medias: ImmutablePropTypes.list.isRequired,
|
||||
isLoading: PropTypes.bool,
|
||||
hasMore: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentDidMount () {
|
||||
|
@ -91,7 +94,15 @@ class AccountGallery extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { medias, shouldUpdateScroll, isLoading, hasMore } = this.props;
|
||||
const { medias, shouldUpdateScroll, isLoading, hasMore, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
let loadOlder = null;
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import React from 'react';
|
|||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import PropTypes from 'prop-types';
|
||||
import InnerHeader from '../../account/components/header';
|
||||
import MissingIndicator from '../../../components/missing_indicator';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import MovedNote from './moved_note';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
@ -88,7 +87,7 @@ export default class Header extends ImmutablePureComponent {
|
|||
const { account, hideTabs, identity_proofs } = this.props;
|
||||
|
||||
if (account === null) {
|
||||
return <MissingIndicator />;
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -13,6 +13,7 @@ import { List as ImmutableList } from 'immutable';
|
|||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { fetchAccountIdentityProofs } from '../../actions/identity_proofs';
|
||||
import MissingIndicator from 'mastodon/components/missing_indicator';
|
||||
|
||||
const emptyList = ImmutableList();
|
||||
|
||||
|
@ -20,6 +21,7 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false })
|
|||
const path = withReplies ? `${accountId}:with_replies` : accountId;
|
||||
|
||||
return {
|
||||
isAccount: !!state.getIn(['accounts', accountId]),
|
||||
statusIds: state.getIn(['timelines', `account:${path}`, 'items'], emptyList),
|
||||
featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], emptyList),
|
||||
isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),
|
||||
|
@ -41,6 +43,7 @@ class AccountTimeline extends ImmutablePureComponent {
|
|||
hasMore: PropTypes.bool,
|
||||
withReplies: PropTypes.bool,
|
||||
blockedBy: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -74,7 +77,15 @@ class AccountTimeline extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy } = this.props;
|
||||
const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
if (!statusIds && isLoading) {
|
||||
return (
|
||||
|
|
|
@ -16,8 +16,10 @@ import Column from '../ui/components/column';
|
|||
import HeaderContainer from '../account_timeline/containers/header_container';
|
||||
import ColumnBackButton from '../../components/column_back_button';
|
||||
import ScrollableList from '../../components/scrollable_list';
|
||||
import MissingIndicator from 'mastodon/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
|
||||
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
|
||||
|
@ -33,6 +35,7 @@ class Followers extends ImmutablePureComponent {
|
|||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
blockedBy: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -52,7 +55,15 @@ class Followers extends ImmutablePureComponent {
|
|||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy } = this.props;
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
if (!accountIds) {
|
||||
return (
|
||||
|
|
|
@ -16,8 +16,10 @@ import Column from '../ui/components/column';
|
|||
import HeaderContainer from '../account_timeline/containers/header_container';
|
||||
import ColumnBackButton from '../../components/column_back_button';
|
||||
import ScrollableList from '../../components/scrollable_list';
|
||||
import MissingIndicator from 'mastodon/components/missing_indicator';
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),
|
||||
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
|
||||
|
@ -33,6 +35,7 @@ class Following extends ImmutablePureComponent {
|
|||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
blockedBy: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
|
@ -52,7 +55,15 @@ class Following extends ImmutablePureComponent {
|
|||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy } = this.props;
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
<Column>
|
||||
<MissingIndicator />
|
||||
</Column>
|
||||
);
|
||||
}
|
||||
|
||||
if (!accountIds) {
|
||||
return (
|
||||
|
|
|
@ -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": "حذف",
|
||||
|
|
|
@ -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í.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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í.",
|
||||
|
|
|
@ -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í",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "Διαγραφή",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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í.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "شما هیچ پیغام مستقیمی ندارید. اگر چنین پیغامی بگیرید یا بفرستید اینجا نمایش خواهد یافت.",
|
||||
|
|
|
@ -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ä.",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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í.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.",
|
||||
|
|
|
@ -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": "Өшіру",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
"compose_form.spoiler.unmarked": "Lo tèxte es pas rescondut",
|
||||
"compose_form.spoiler_placeholder": "Escrivètz l’avertiment aquí",
|
||||
"confirmation_modal.cancel": "Anullar",
|
||||
"confirmations.block.block_and_report": "Block & Report",
|
||||
"confirmations.block.block_and_report": "Blocar e senhalar",
|
||||
"confirmations.block.confirm": "Blocar",
|
||||
"confirmations.block.message": "Volètz vertadièrament blocar {name} ?",
|
||||
"confirmations.delete.confirm": "Escafar",
|
||||
|
@ -117,6 +117,7 @@
|
|||
"emoji_button.symbols": "Simbòls",
|
||||
"emoji_button.travel": "Viatges & lòcs",
|
||||
"empty_column.account_timeline": "Cap de tuts aquí !",
|
||||
"empty_column.account_unavailable": "Perfil pas disponible",
|
||||
"empty_column.blocks": "Avètz pas blocat degun pel moment.",
|
||||
"empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
|
||||
"empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
|
||||
|
@ -358,7 +359,7 @@
|
|||
"tabs_bar.search": "Recèrcas",
|
||||
"time_remaining.days": "demòra{number, plural, one { # jorn} other {n # jorns}}",
|
||||
"time_remaining.hours": "demòra{number, plural, one { # ora} other {n # oras}}",
|
||||
"time_remaining.minutes": "demòr{number, plural, one { # minuta} other {nn # minutas}}",
|
||||
"time_remaining.minutes": "demòra{number, plural, one { # minuta} other {n # minutas}}",
|
||||
"time_remaining.moments": "Moments restants",
|
||||
"time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
"emoji_button.symbols": "Symbole",
|
||||
"emoji_button.travel": "Podróże i miejsca",
|
||||
"empty_column.account_timeline": "Brak wpisów tutaj!",
|
||||
"empty_column.account_timeline_blocked": "Jesteś zablokowany(-a)",
|
||||
"empty_column.account_unavailable": "Profile unavailable",
|
||||
"empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.",
|
||||
"empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!",
|
||||
"empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.add_or_remove_from_list": "Add or Remove from lists",
|
||||
"account.add_or_remove_from_list": "Добавить или удалить из списков",
|
||||
"account.badges.bot": "Бот",
|
||||
"account.block": "Блокировать",
|
||||
"account.block_domain": "Блокировать все с {domain}",
|
||||
|
@ -15,8 +15,8 @@
|
|||
"account.follows.empty": "Этот пользователь ни на кого не подписан.",
|
||||
"account.follows_you": "Подписан(а) на Вас",
|
||||
"account.hide_reblogs": "Скрыть продвижения от @{name}",
|
||||
"account.link_verified_on": "Ownership of this link was checked on {date}",
|
||||
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
|
||||
"account.link_verified_on": "Владение этой ссылкой было проверено {date}",
|
||||
"account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.",
|
||||
"account.media": "Медиа",
|
||||
"account.mention": "Упомянуть",
|
||||
"account.moved_to": "Ищите {name} здесь:",
|
||||
|
@ -71,10 +71,10 @@
|
|||
"compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.",
|
||||
"compose_form.lock_disclaimer.lock": "закрыт",
|
||||
"compose_form.placeholder": "О чем Вы думаете?",
|
||||
"compose_form.poll.add_option": "Add a choice",
|
||||
"compose_form.poll.duration": "Poll duration",
|
||||
"compose_form.poll.option_placeholder": "Choice {number}",
|
||||
"compose_form.poll.remove_option": "Remove this choice",
|
||||
"compose_form.poll.add_option": "Добавить",
|
||||
"compose_form.poll.duration": "Длительность опроса",
|
||||
"compose_form.poll.option_placeholder": "Вариант {number}",
|
||||
"compose_form.poll.remove_option": "Удалить этот вариант",
|
||||
"compose_form.publish": "Трубить",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Медиафайлы не отмечены как чувствительные",
|
||||
|
@ -83,7 +83,7 @@
|
|||
"compose_form.spoiler.unmarked": "Текст не скрыт",
|
||||
"compose_form.spoiler_placeholder": "Текст предупреждения",
|
||||
"confirmation_modal.cancel": "Отмена",
|
||||
"confirmations.block.block_and_report": "Block & Report",
|
||||
"confirmations.block.block_and_report": "Заблокировать и пожаловаться",
|
||||
"confirmations.block.confirm": "Заблокировать",
|
||||
"confirmations.block.message": "Вы уверены, что хотите заблокировать {name}?",
|
||||
"confirmations.delete.confirm": "Удалить",
|
||||
|
@ -96,8 +96,8 @@
|
|||
"confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?",
|
||||
"confirmations.redraft.confirm": "Удалить и исправить",
|
||||
"confirmations.redraft.message": "Вы уверены, что хотите удалить этот статус и превратить в черновик? Вы потеряете все ответы, продвижения и отметки 'нравится' к нему.",
|
||||
"confirmations.reply.confirm": "Reply",
|
||||
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
||||
"confirmations.reply.confirm": "Ответить",
|
||||
"confirmations.reply.message": "При ответе текст набираемого сообщения будет перезаписан. Продолжить?",
|
||||
"confirmations.unfollow.confirm": "Отписаться",
|
||||
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
||||
"embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.",
|
||||
|
@ -116,7 +116,9 @@
|
|||
"emoji_button.search_results": "Результаты поиска",
|
||||
"emoji_button.symbols": "Символы",
|
||||
"emoji_button.travel": "Путешествия",
|
||||
"empty_column.account_timeline": "No toots here!",
|
||||
"empty_column.account_timeline": "Статусов нет!",
|
||||
"empty_column.account_unavailable": "Профиль недоступен",
|
||||
"empty_column.account_timeline_blocked": "Вы заблокированы",
|
||||
"empty_column.blocks": "Вы ещё никого не заблокировали.",
|
||||
"empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!",
|
||||
"empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.",
|
||||
|
@ -135,45 +137,45 @@
|
|||
"follow_request.authorize": "Авторизовать",
|
||||
"follow_request.reject": "Отказать",
|
||||
"getting_started.developers": "Для разработчиков",
|
||||
"getting_started.directory": "Profile directory",
|
||||
"getting_started.directory": "Каталог профилей",
|
||||
"getting_started.documentation": "Документация",
|
||||
"getting_started.heading": "Добро пожаловать",
|
||||
"getting_started.invite": "Пригласить людей",
|
||||
"getting_started.open_source_notice": "Mastodon - сервис с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.",
|
||||
"getting_started.security": "Безопасность",
|
||||
"getting_started.terms": "Условия использования",
|
||||
"hashtag.column_header.tag_mode.all": "and {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "or {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "without {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "No suggestions found",
|
||||
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
|
||||
"hashtag.column_settings.tag_mode.all": "All of these",
|
||||
"hashtag.column_settings.tag_mode.any": "Any of these",
|
||||
"hashtag.column_settings.tag_mode.none": "None of these",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"hashtag.column_header.tag_mode.all": "и {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "или {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "без {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "Предложений не найдено",
|
||||
"hashtag.column_settings.select.placeholder": "Введите хэштеги…",
|
||||
"hashtag.column_settings.tag_mode.all": "Все из списка",
|
||||
"hashtag.column_settings.tag_mode.any": "Любой из списка",
|
||||
"hashtag.column_settings.tag_mode.none": "Ни один из списка",
|
||||
"hashtag.column_settings.tag_toggle": "Включая дополнительные хэштеге из этой колонки",
|
||||
"home.column_settings.basic": "Основные",
|
||||
"home.column_settings.show_reblogs": "Показывать продвижения",
|
||||
"home.column_settings.show_replies": "Показывать ответы",
|
||||
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
"introduction.federation.action": "Next",
|
||||
"introduction.federation.federated.headline": "Federated",
|
||||
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
|
||||
"introduction.federation.home.headline": "Home",
|
||||
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
|
||||
"introduction.federation.local.headline": "Local",
|
||||
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
|
||||
"introduction.interactions.action": "Finish tutorial!",
|
||||
"introduction.interactions.favourite.headline": "Favourite",
|
||||
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
|
||||
"introduction.interactions.reblog.headline": "Boost",
|
||||
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
|
||||
"introduction.interactions.reply.headline": "Reply",
|
||||
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
|
||||
"introduction.welcome.action": "Let's go!",
|
||||
"introduction.welcome.headline": "First steps",
|
||||
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
|
||||
"intervals.full.days": "{number, plural, one {# день} few {# дня} many {# дней} other {# дней}}",
|
||||
"intervals.full.hours": "{number, plural, one {# час} few {# часа} many {# часов} other {# часов}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} many {# минут} other {# минут}}",
|
||||
"introduction.federation.action": "Далее",
|
||||
"introduction.federation.federated.headline": "Глобальная лента",
|
||||
"introduction.federation.federated.text": "Публичные статусы с других серверов федеративной сети расположатся в глобальной ленте.",
|
||||
"introduction.federation.home.headline": "Домашняя лента",
|
||||
"introduction.federation.home.text": "Статусы от тех, на кого вы подписаны, появятся в вашей домашней ленте. Вы можете подписаться на кого угодно с любого сервера!",
|
||||
"introduction.federation.local.headline": "Локальная лента",
|
||||
"introduction.federation.local.text": "Публичные статусы от людей с того же сервера, что и вы, будут отображены в локальной ленте.",
|
||||
"introduction.interactions.action": "Завершить обучение",
|
||||
"introduction.interactions.favourite.headline": "Отметки \"нравится\"",
|
||||
"introduction.interactions.favourite.text": "Вы можете отметить статус, чтобы вернуться к нему позже и дать знать автору, что запись вам понравилась, поставив отметку \"нравится\".",
|
||||
"introduction.interactions.reblog.headline": "Продвижения",
|
||||
"introduction.interactions.reblog.text": "Вы можете делиться статусами других людей, продвигая их в своём аккаунте.",
|
||||
"introduction.interactions.reply.headline": "Ответы",
|
||||
"introduction.interactions.reply.text": "Вы можете отвечать свои и чужие посты, образуя цепочки сообщений (обсуждения).",
|
||||
"introduction.welcome.action": "Поехали!",
|
||||
"introduction.welcome.headline": "Первые шаги",
|
||||
"introduction.welcome.text": "Добро пожаловать в федеративную сеть! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями на любом сервере. Но этот сервер — {domain} — особенный: на нём располагается ваш профиль. Запомните его название.",
|
||||
"keyboard_shortcuts.back": "перейти назад",
|
||||
"keyboard_shortcuts.blocked": "чтобы открыть список заблокированных",
|
||||
"keyboard_shortcuts.boost": "продвинуть пост",
|
||||
|
@ -212,7 +214,7 @@
|
|||
"lists.account.remove": "Убрать из списка",
|
||||
"lists.delete": "Удалить список",
|
||||
"lists.edit": "Изменить список",
|
||||
"lists.edit.submit": "Change title",
|
||||
"lists.edit.submit": "Изменить название",
|
||||
"lists.new.create": "Новый список",
|
||||
"lists.new.title_placeholder": "Заголовок списка",
|
||||
"lists.search": "Искать из ваших подписок",
|
||||
|
@ -222,7 +224,7 @@
|
|||
"missing_indicator.label": "Не найдено",
|
||||
"missing_indicator.sublabel": "Запрашиваемый ресурс не найден",
|
||||
"mute_modal.hide_notifications": "Убрать уведомления от этого пользователя?",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.apps": "Мобильные приложения",
|
||||
"navigation_bar.blocks": "Список блокировки",
|
||||
"navigation_bar.community_timeline": "Локальная лента",
|
||||
"navigation_bar.compose": "Создать новый статус",
|
||||
|
@ -246,35 +248,35 @@
|
|||
"notification.favourite": "{name} понравился Ваш статус",
|
||||
"notification.follow": "{name} подписался(-лась) на Вас",
|
||||
"notification.mention": "{name} упомянул(а) Вас",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.poll": "Опрос, в котором вы приняли участие, завершился",
|
||||
"notification.reblog": "{name} продвинул(а) Ваш статус",
|
||||
"notifications.clear": "Очистить уведомления",
|
||||
"notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?",
|
||||
"notifications.column_settings.alert": "Десктопные уведомления",
|
||||
"notifications.column_settings.favourite": "Нравится:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Display all categories",
|
||||
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
||||
"notifications.column_settings.filter_bar.show": "Show",
|
||||
"notifications.column_settings.filter_bar.advanced": "Отображать все категории",
|
||||
"notifications.column_settings.filter_bar.category": "Фильтры по категориям",
|
||||
"notifications.column_settings.filter_bar.show": "Показывать",
|
||||
"notifications.column_settings.follow": "Новые подписчики:",
|
||||
"notifications.column_settings.mention": "Упоминания:",
|
||||
"notifications.column_settings.poll": "Poll results:",
|
||||
"notifications.column_settings.poll": "Результаты опроса:",
|
||||
"notifications.column_settings.push": "Push-уведомления",
|
||||
"notifications.column_settings.reblog": "Продвижения:",
|
||||
"notifications.column_settings.show": "Показывать в колонке",
|
||||
"notifications.column_settings.sound": "Проигрывать звук",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.all": "Все",
|
||||
"notifications.filter.boosts": "Продвижения",
|
||||
"notifications.filter.favourites": "Отметки \"нравится\"",
|
||||
"notifications.filter.follows": "Новые подписчики",
|
||||
"notifications.filter.mentions": "Упоминания",
|
||||
"notifications.filter.polls": "Результаты опросов",
|
||||
"notifications.group": "{count} уведомл.",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
|
||||
"poll.vote": "Vote",
|
||||
"poll_button.add_poll": "Add a poll",
|
||||
"poll_button.remove_poll": "Remove poll",
|
||||
"poll.closed": "Завершён",
|
||||
"poll.refresh": "Обновить",
|
||||
"poll.total_votes": "{count, plural, one {# голос} few {# голоса} many {# голосов} other {# голосов}}",
|
||||
"poll.vote": "Голосовать",
|
||||
"poll_button.add_poll": "Добавить опрос",
|
||||
"poll_button.remove_poll": "Удалить опрос",
|
||||
"privacy.change": "Изменить видимость статуса",
|
||||
"privacy.direct.long": "Показать только упомянутым",
|
||||
"privacy.direct.short": "Направленный",
|
||||
|
@ -292,12 +294,12 @@
|
|||
"relative_time.minutes": "{number}м",
|
||||
"relative_time.seconds": "{number}с",
|
||||
"reply_indicator.cancel": "Отмена",
|
||||
"report.forward": "Переслать для {target}",
|
||||
"report.forward": "Переслать в {target}",
|
||||
"report.forward_hint": "Этот аккаунт расположен на другом сервере. Отправить туда анонимную копию Вашей жалобы?",
|
||||
"report.hint": "Жалоба будет отправлена модераторам Вашего сервера. Вы также можете указать подробную причину жалобы ниже:",
|
||||
"report.placeholder": "Комментарий",
|
||||
"report.submit": "Отправить",
|
||||
"report.target": "Жалуемся на {target}",
|
||||
"report.target": "Жалоба на {target}",
|
||||
"search.placeholder": "Поиск",
|
||||
"search_popout.search_format": "Продвинутый формат поиска",
|
||||
"search_popout.tips.full_text": "Возвращает посты, которые Вы написали, отметили как 'избранное', продвинули или в которых были упомянуты, а также содержащие юзернейм, имя и хэштеги.",
|
||||
|
@ -309,12 +311,12 @@
|
|||
"search_results.hashtags": "Хэштеги",
|
||||
"search_results.statuses": "Посты",
|
||||
"search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}",
|
||||
"status.admin_account": "Open moderation interface for @{name}",
|
||||
"status.admin_status": "Open this status in the moderation interface",
|
||||
"status.admin_account": "Открыть интерфейс модератора для @{name}",
|
||||
"status.admin_status": "Открыть этот статус в интерфейсе модератора",
|
||||
"status.block": "Заблокировать @{name}",
|
||||
"status.cancel_reblog_private": "Не продвигать",
|
||||
"status.cannot_reblog": "Этот статус не может быть продвинут",
|
||||
"status.copy": "Copy link to status",
|
||||
"status.copy": "Копировать ссылку на запись",
|
||||
"status.delete": "Удалить",
|
||||
"status.detailed_status": "Подробный просмотр обсуждения",
|
||||
"status.direct": "Написать @{name}",
|
||||
|
@ -326,11 +328,11 @@
|
|||
"status.mention": "Упомянуть @{name}",
|
||||
"status.more": "Больше",
|
||||
"status.mute": "Заглушить @{name}",
|
||||
"status.mute_conversation": "Заглушить всю цепочку",
|
||||
"status.mute_conversation": "Заглушить всё обсуждение",
|
||||
"status.open": "Развернуть статус",
|
||||
"status.pin": "Закрепить в профиле",
|
||||
"status.pinned": "Закреплённый статус",
|
||||
"status.read_more": "Read more",
|
||||
"status.read_more": "Ещё",
|
||||
"status.reblog": "Продвинуть",
|
||||
"status.reblog_private": "Продвинуть для своей аудитории",
|
||||
"status.reblogged_by": "{name} продвинул(а)",
|
||||
|
@ -346,27 +348,27 @@
|
|||
"status.show_less_all": "Свернуть для всех",
|
||||
"status.show_more": "Развернуть",
|
||||
"status.show_more_all": "Развернуть для всех",
|
||||
"status.show_thread": "Show thread",
|
||||
"status.unmute_conversation": "Снять глушение с треда",
|
||||
"status.show_thread": "Показать обсуждение",
|
||||
"status.unmute_conversation": "Снять глушение с обсуждения",
|
||||
"status.unpin": "Открепить от профиля",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"suggestions.header": "You might be interested in…",
|
||||
"suggestions.dismiss": "Удалить предложение",
|
||||
"suggestions.header": "Вам может быть интересно…",
|
||||
"tabs_bar.federated_timeline": "Глобальная",
|
||||
"tabs_bar.home": "Главная",
|
||||
"tabs_bar.local_timeline": "Локальная",
|
||||
"tabs_bar.notifications": "Уведомления",
|
||||
"tabs_bar.search": "Поиск",
|
||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"time_remaining.days": "{number, plural, one {остался # день} few {осталось # дня} many {осталось # дней} other {осталось # дней}}",
|
||||
"time_remaining.hours": "{number, plural, one {остался # час} few {осталось # часа} many {осталось # часов} other {осталось # часов}}",
|
||||
"time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}",
|
||||
"time_remaining.moments": "остались считанные мгновения",
|
||||
"time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}",
|
||||
"trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}",
|
||||
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
||||
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
||||
"upload_button.label": "Добавить медиаконтент",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_error.limit": "Достигнут лимит загруженных файлов.",
|
||||
"upload_error.poll": "К опросам нельзя прикреплять файлы.",
|
||||
"upload_form.description": "Описать для людей с нарушениями зрения",
|
||||
"upload_form.focus": "Обрезать",
|
||||
"upload_form.undo": "Отменить",
|
||||
|
|
|
@ -117,6 +117,7 @@
|
|||
"emoji_button.symbols": "Symboly",
|
||||
"emoji_button.travel": "Cestovanie a miesta",
|
||||
"empty_column.account_timeline": "Niesú tu žiadne príspevky!",
|
||||
"empty_column.account_unavailable": "Profil nedostupný",
|
||||
"empty_column.blocks": "Ešte si nikoho nezablokoval/a.",
|
||||
"empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!",
|
||||
"empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.",
|
||||
|
@ -159,8 +160,8 @@
|
|||
"intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
|
||||
"introduction.federation.action": "Ďalej",
|
||||
"introduction.federation.federated.headline": "Federovaná",
|
||||
"introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazenie vo federovanej časovej osi.",
|
||||
"introduction.federation.home.headline": "Domov",
|
||||
"introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.",
|
||||
"introduction.federation.home.headline": "Domovská",
|
||||
"introduction.federation.home.text": "Príspevky od ľudí ktorých následuješ sa zobrazia na tvojej domovskej nástenke. Môžeš následovať hocikoho na ktoromkoľvek serveri!",
|
||||
"introduction.federation.local.headline": "Miestna",
|
||||
"introduction.federation.local.text": "Verejné príspevky od ľudí v rámci toho istého serveru na akom si aj ty, budú zobrazované na miestnej časovej osi.",
|
||||
|
@ -177,61 +178,61 @@
|
|||
"keyboard_shortcuts.back": "dostať sa naspäť",
|
||||
"keyboard_shortcuts.blocked": "otvor zoznam blokovaných užívateľov",
|
||||
"keyboard_shortcuts.boost": "vyzdvihnúť",
|
||||
"keyboard_shortcuts.column": "zamerať sa na status v jednom zo stĺpcov",
|
||||
"keyboard_shortcuts.compose": "zamerať sa na písaciu plochu",
|
||||
"keyboard_shortcuts.column": "zameraj sa na príspevok v jednom zo stĺpcov",
|
||||
"keyboard_shortcuts.compose": "zameraj sa na písaciu plochu",
|
||||
"keyboard_shortcuts.description": "Popis",
|
||||
"keyboard_shortcuts.direct": "otvor panel súkromných správ",
|
||||
"keyboard_shortcuts.down": "posunúť sa dole v zozname",
|
||||
"keyboard_shortcuts.enter": "otvoriť správu",
|
||||
"keyboard_shortcuts.favourite": "pridať do obľúbených",
|
||||
"keyboard_shortcuts.favourite": "pridaj do obľúbených",
|
||||
"keyboard_shortcuts.favourites": "otvor zoznam obľúbených",
|
||||
"keyboard_shortcuts.federated": "otvor federovanú časovú os",
|
||||
"keyboard_shortcuts.heading": "Klávesové skratky",
|
||||
"keyboard_shortcuts.home": "otvor domácu časovú os",
|
||||
"keyboard_shortcuts.hotkey": "Klávesa",
|
||||
"keyboard_shortcuts.legend": "zobraziť túto legendu",
|
||||
"keyboard_shortcuts.legend": "zobraz túto legendu",
|
||||
"keyboard_shortcuts.local": "otvor miestnu časovú os",
|
||||
"keyboard_shortcuts.mention": "spomenúť autora",
|
||||
"keyboard_shortcuts.mention": "spomeň autora",
|
||||
"keyboard_shortcuts.muted": "otvor zoznam stíšených užívateľov",
|
||||
"keyboard_shortcuts.my_profile": "otvor svoj profil",
|
||||
"keyboard_shortcuts.notifications": "otvor panel oboznámení",
|
||||
"keyboard_shortcuts.pinned": "otvor zoznam pripnutých príspevkov",
|
||||
"keyboard_shortcuts.profile": "otvor autorov profil",
|
||||
"keyboard_shortcuts.reply": "odpovedať",
|
||||
"keyboard_shortcuts.requests": "otvor zoznam požiadavok k následovaniu",
|
||||
"keyboard_shortcuts.search": "zamerať sa na vyhľadávanie",
|
||||
"keyboard_shortcuts.requests": "otvor zoznam žiadostí o sledovanie",
|
||||
"keyboard_shortcuts.search": "zameraj sa na vyhľadávanie",
|
||||
"keyboard_shortcuts.start": "otvor panel ''začíname''",
|
||||
"keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW",
|
||||
"keyboard_shortcuts.toot": "začať úplne novú hlášku",
|
||||
"keyboard_shortcuts.unfocus": "nesústrediť sa na písaciu plochu, alebo hľadanie",
|
||||
"keyboard_shortcuts.up": "posunúť sa vyššie v zozname",
|
||||
"lightbox.close": "Zatvoriť",
|
||||
"keyboard_shortcuts.toot": "začni úplne nový príspevok",
|
||||
"keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie",
|
||||
"keyboard_shortcuts.up": "posuň sa vyššie v zozname",
|
||||
"lightbox.close": "Zatvor",
|
||||
"lightbox.next": "Ďalšie",
|
||||
"lightbox.previous": "Predchádzajúci",
|
||||
"lists.account.add": "Pridať do zoznamu",
|
||||
"lists.account.remove": "Odobrať zo zoznamu",
|
||||
"lists.account.add": "Pridaj do zoznamu",
|
||||
"lists.account.remove": "Odober zo zoznamu",
|
||||
"lists.delete": "Vymaž list",
|
||||
"lists.edit": "Uprav zoznam",
|
||||
"lists.edit.submit": "Zmeň názov",
|
||||
"lists.new.create": "Pridaj zoznam",
|
||||
"lists.new.title_placeholder": "Názov nového zoznamu",
|
||||
"lists.search": "Vyhľadávajte medzi užívateľmi ktorých sledujete",
|
||||
"lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ",
|
||||
"lists.subheading": "Tvoje zoznamy",
|
||||
"loading_indicator.label": "Načítam...",
|
||||
"media_gallery.toggle_visible": "Zapnúť/Vypnúť viditeľnosť",
|
||||
"media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť",
|
||||
"missing_indicator.label": "Nenájdené",
|
||||
"missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť",
|
||||
"mute_modal.hide_notifications": "Skryť oznámenia od tohto používateľa?",
|
||||
"navigation_bar.apps": "Mobilné aplikácie",
|
||||
"mute_modal.hide_notifications": "Skry oznámenia od tohto používateľa?",
|
||||
"navigation_bar.apps": "Aplikácie",
|
||||
"navigation_bar.blocks": "Blokovaní užívatelia",
|
||||
"navigation_bar.community_timeline": "Lokálna časová os",
|
||||
"navigation_bar.community_timeline": "Miestna časová os",
|
||||
"navigation_bar.compose": "Napíš nový príspevok",
|
||||
"navigation_bar.direct": "Súkromné správy",
|
||||
"navigation_bar.discover": "Objavuj",
|
||||
"navigation_bar.domain_blocks": "Skryté domény",
|
||||
"navigation_bar.edit_profile": "Upraviť profil",
|
||||
"navigation_bar.edit_profile": "Uprav profil",
|
||||
"navigation_bar.favourites": "Obľúbené",
|
||||
"navigation_bar.filters": "Utĺmené slová",
|
||||
"navigation_bar.filters": "Filtrované slová",
|
||||
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
|
||||
"navigation_bar.info": "O tomto serveri",
|
||||
"navigation_bar.keyboard_shortcuts": "Klávesové skratky",
|
||||
|
@ -239,7 +240,7 @@
|
|||
"navigation_bar.logout": "Odhlás sa",
|
||||
"navigation_bar.mutes": "Ignorovaní užívatelia",
|
||||
"navigation_bar.personal": "Osobné",
|
||||
"navigation_bar.pins": "Pripnuté tooty",
|
||||
"navigation_bar.pins": "Pripnuté príspevky",
|
||||
"navigation_bar.preferences": "Voľby",
|
||||
"navigation_bar.public_timeline": "Federovaná časová os",
|
||||
"navigation_bar.security": "Zabezbečenie",
|
||||
|
@ -247,21 +248,21 @@
|
|||
"notification.follow": "{name} ťa začal/a následovať",
|
||||
"notification.mention": "{name} ťa spomenul/a",
|
||||
"notification.poll": "Anketa v ktorej si hlasoval/a sa skončila",
|
||||
"notification.reblog": "{name} zdieľal/a tvoj status",
|
||||
"notifications.clear": "Vyčistiť zoznam notifikácii",
|
||||
"notifications.clear_confirmation": "Naozaj chcete nenávratne prečistiť všetky vaše notifikácie?",
|
||||
"notifications.column_settings.alert": "Notifikácie na ploche",
|
||||
"notification.reblog": "{name} zdieľal/a tvoj príspevok",
|
||||
"notifications.clear": "Vyčistiť zoznam oboznámení",
|
||||
"notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?",
|
||||
"notifications.column_settings.alert": "Oboznámenia na ploche",
|
||||
"notifications.column_settings.favourite": "Obľúbené:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie",
|
||||
"notifications.column_settings.filter_bar.category": "Rýchle triedenie",
|
||||
"notifications.column_settings.filter_bar.show": "Ukáž",
|
||||
"notifications.column_settings.follow": "Noví následujúci:",
|
||||
"notifications.column_settings.follow": "Noví sledujúci:",
|
||||
"notifications.column_settings.mention": "Zmienenia:",
|
||||
"notifications.column_settings.poll": "Výsledky ankiet:",
|
||||
"notifications.column_settings.push": "Push notifikácie",
|
||||
"notifications.column_settings.reblog": "Vyzdvihnutia:",
|
||||
"notifications.column_settings.show": "Zobraziť v stĺpci",
|
||||
"notifications.column_settings.sound": "Prehrať zvuk",
|
||||
"notifications.column_settings.show": "Zobraz v stĺpci",
|
||||
"notifications.column_settings.sound": "Prehraj zvuk",
|
||||
"notifications.filter.all": "Všetky",
|
||||
"notifications.filter.boosts": "Vyzdvihnutia",
|
||||
"notifications.filter.favourites": "Obľúbené",
|
||||
|
@ -276,13 +277,13 @@
|
|||
"poll_button.add_poll": "Pridaj anketu",
|
||||
"poll_button.remove_poll": "Odstráň anketu",
|
||||
"privacy.change": "Uprav súkromie príspevku",
|
||||
"privacy.direct.long": "Pošli iba spomenutým používateľom",
|
||||
"privacy.direct.long": "Pošli iba spomenutým užívateľom",
|
||||
"privacy.direct.short": "Súkromne",
|
||||
"privacy.private.long": "Pošli iba následovateľom",
|
||||
"privacy.private.short": "Iba pre sledujúcich",
|
||||
"privacy.public.long": "Poslať všetkým verejne",
|
||||
"privacy.public.long": "Pošli všetkým verejne",
|
||||
"privacy.public.short": "Verejné",
|
||||
"privacy.unlisted.long": "Neposielať do verejných časových osí",
|
||||
"privacy.unlisted.long": "Neposielaj do verejných časových osí",
|
||||
"privacy.unlisted.short": "Verejne, ale nezobraziť v osi",
|
||||
"regeneration_indicator.label": "Načítava sa…",
|
||||
"regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!",
|
||||
|
@ -293,11 +294,11 @@
|
|||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Zrušiť",
|
||||
"report.forward": "Posuň ku {target}",
|
||||
"report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu reportu aj tam?",
|
||||
"report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu hlásenia aj tam?",
|
||||
"report.hint": "Toto nahlásenie bude zaslané správcom tvojho servera. Môžeš napísať odvôvodnenie, prečo nahlasuješ tento účet:",
|
||||
"report.placeholder": "Ďalšie komentáre",
|
||||
"report.submit": "Poslať",
|
||||
"report.target": "Nahlásenie {target}",
|
||||
"report.submit": "Odošli",
|
||||
"report.target": "Nahlás {target}",
|
||||
"search.placeholder": "Hľadaj",
|
||||
"search_popout.search_format": "Pokročilé vyhľadávanie",
|
||||
"search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezívky, mená a haštagy.",
|
||||
|
@ -327,18 +328,18 @@
|
|||
"status.more": "Viac",
|
||||
"status.mute": "Utíš @{name}",
|
||||
"status.mute_conversation": "Ignoruj konverzáciu",
|
||||
"status.open": "Otvoriť tento status",
|
||||
"status.open": "Otvor tento príspevok",
|
||||
"status.pin": "Pripni na profil",
|
||||
"status.pinned": "Pripnutý príspevok",
|
||||
"status.read_more": "Čítaj ďalej",
|
||||
"status.reblog": "Povýšiť",
|
||||
"status.reblog": "Vyzdvihni",
|
||||
"status.reblog_private": "Vyzdvihni k pôvodnému publiku",
|
||||
"status.reblogged_by": "{name} povýšil/a",
|
||||
"status.reblogs.empty": "Nikto ešte nepovýšil tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.",
|
||||
"status.reblogs.empty": "Nikto ešte nevyzdvihol tento príspevok. Keď tak niekto urobí, bude to zobrazené práve tu.",
|
||||
"status.redraft": "Vymaž a prepíš",
|
||||
"status.reply": "Odpovedať",
|
||||
"status.replyAll": "Odpovedať na diskusiu",
|
||||
"status.report": "Nahlásiť @{name}",
|
||||
"status.replyAll": "Odpovedz na diskusiu",
|
||||
"status.report": "Nahlás @{name}",
|
||||
"status.sensitive_toggle": "Klikni pre zobrazenie",
|
||||
"status.sensitive_warning": "Chúlostivý obsah",
|
||||
"status.share": "Zdieľaj",
|
||||
|
@ -352,31 +353,31 @@
|
|||
"suggestions.dismiss": "Zavrhni návrh",
|
||||
"suggestions.header": "Mohlo by ťa zaujímať…",
|
||||
"tabs_bar.federated_timeline": "Federovaná",
|
||||
"tabs_bar.home": "Domov",
|
||||
"tabs_bar.home": "Domovská",
|
||||
"tabs_bar.local_timeline": "Miestna",
|
||||
"tabs_bar.notifications": "Oboznámenia",
|
||||
"tabs_bar.search": "Hľadaj",
|
||||
"time_remaining.days": "Zostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}",
|
||||
"time_remaining.hours": "Zostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
|
||||
"time_remaining.minutes": "Zostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
|
||||
"time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}",
|
||||
"time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
|
||||
"time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
|
||||
"time_remaining.moments": "Ostáva už iba chviľka",
|
||||
"time_remaining.seconds": "Zostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}",
|
||||
"time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}",
|
||||
"ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.",
|
||||
"upload_area.title": "Pretiahni a pusť pre nahratie",
|
||||
"upload_button.label": "Pridať médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.",
|
||||
"upload_error.poll": "Nahrávanie súborov pri anketách nieje dovolené.",
|
||||
"upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.",
|
||||
"upload_form.description": "Opis pre slabo vidiacich",
|
||||
"upload_form.focus": "Pozmeň náhľad",
|
||||
"upload_form.undo": "Vymaž",
|
||||
"upload_progress.label": "Nahráva sa...",
|
||||
"video.close": "Zavri video",
|
||||
"video.exit_fullscreen": "Vpnúť zobrazenie na celú obrazovku",
|
||||
"video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku",
|
||||
"video.expand": "Zväčši video",
|
||||
"video.fullscreen": "Zobraziť na celú obrazovku",
|
||||
"video.hide": "Skryť video",
|
||||
"video.mute": "Vypnúť zvuk",
|
||||
"video.fullscreen": "Zobraz na celú obrazovku",
|
||||
"video.hide": "Skry video",
|
||||
"video.mute": "Vypni zvuk",
|
||||
"video.pause": "Pauza",
|
||||
"video.play": "Prehraj",
|
||||
"video.unmute": "Zapni zvuk"
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "Још увек немате директних порука. Када пошаљете или примите једну, појавиће се овде.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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.",
|
||||
|
|
|
@ -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": "మీకు ఇంకా ఏ ప్రత్యక్ష సందేశాలు లేవు. మీరు ఒకదాన్ని పంపినప్పుడు లేదా స్వీకరించినప్పుడు, అది ఇక్కడ చూపబడుతుంది.",
|
||||
|
|
|
@ -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}",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"account.block": "Engelle @{name}",
|
||||
"account.block_domain": "{domain} alanından her şeyi gizle",
|
||||
"account.blocked": "Engellenmiş",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.direct": "Mesaj gönder : @{name}",
|
||||
"account.domain_blocked": "Alan adı gizlendi",
|
||||
"account.edit_profile": "Profili düzenle",
|
||||
"account.endorse": "Profildeki özellik",
|
||||
|
@ -19,28 +19,28 @@
|
|||
"account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceler.",
|
||||
"account.media": "Medya",
|
||||
"account.mention": "@{name} kullanıcısından bahset",
|
||||
"account.moved_to": "{name} has moved to:",
|
||||
"account.moved_to": "{name} şuraya taşındı:",
|
||||
"account.mute": "@{name} kullanıcısını sessize al",
|
||||
"account.mute_notifications": "@{name} kullanıcısının bildirimlerini kapat",
|
||||
"account.muted": "Sessiz",
|
||||
"account.muted": "Sesi kısık",
|
||||
"account.posts": "Gönderiler",
|
||||
"account.posts_with_replies": "Gönderiler ve yanıtlar",
|
||||
"account.report": "@{name} kullanıcısını bildir",
|
||||
"account.requested": "Onay bekliyor. Takip isteğini iptal etmek için tıklayın",
|
||||
"account.share": "@{name} kullanıcısının profilini paylaş",
|
||||
"account.show_reblogs": "@{name} kullanıcısından boost'ları göster",
|
||||
"account.show_reblogs": "@{name} kullanıcısından boostları göster",
|
||||
"account.unblock": "Engeli kaldır @{name}",
|
||||
"account.unblock_domain": "{domain} göster",
|
||||
"account.unendorse": "Profilde özellik yok",
|
||||
"account.unfollow": "Takipten vazgeç",
|
||||
"account.unmute": "Sesi aç @{name}",
|
||||
"account.unmute": "Sesi aç : @{name}",
|
||||
"account.unmute_notifications": "@{name} kullanıcısından bildirimleri aç",
|
||||
"alert.unexpected.message": "Beklenmedik bir hata oluştu.",
|
||||
"alert.unexpected.title": "Hay aksi!",
|
||||
"boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz",
|
||||
"bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.",
|
||||
"bundle_column_error.retry": "Tekrar deneyin",
|
||||
"bundle_column_error.title": "Network error",
|
||||
"bundle_column_error.title": "Ağ hatası",
|
||||
"bundle_modal_error.close": "Kapat",
|
||||
"bundle_modal_error.message": "Bu bileşen yüklenirken bir şeyler ters gitti.",
|
||||
"bundle_modal_error.retry": "Tekrar deneyin",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"column.lists": "Listeler",
|
||||
"column.mutes": "Susturulmuş kullanıcılar",
|
||||
"column.notifications": "Bildirimler",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.pins": "Sabitlenmiş gönderi",
|
||||
"column.public": "Federe zaman tüneli",
|
||||
"column_back_button.label": "Geri",
|
||||
"column_header.hide_settings": "Ayarları gizle",
|
||||
|
@ -66,16 +66,16 @@
|
|||
"column_subheading.settings": "Ayarlar",
|
||||
"community.column_settings.media_only": "Sadece medya",
|
||||
"compose_form.direct_message_warning": "Bu gönderi sadece belirtilen kullanıcılara gönderilecektir.",
|
||||
"compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edin",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin",
|
||||
"compose_form.hashtag_warning": "Bu paylaşım liste dışı olduğu için hiç bir hashtag'de yer almayacak. Sadece herkese açık gönderiler hashtaglerde bulunabilir.",
|
||||
"compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.",
|
||||
"compose_form.lock_disclaimer.lock": "kilitli",
|
||||
"compose_form.placeholder": "Aklınızdan ne geçiyor?",
|
||||
"compose_form.poll.add_option": "Add a choice",
|
||||
"compose_form.poll.duration": "Poll duration",
|
||||
"compose_form.poll.option_placeholder": "Choice {number}",
|
||||
"compose_form.poll.remove_option": "Remove this choice",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.poll.add_option": "Bir seçenek ekleyin",
|
||||
"compose_form.poll.duration": "Anket süresi",
|
||||
"compose_form.poll.option_placeholder": "Seçim {number}",
|
||||
"compose_form.poll.remove_option": "Bu seçimi kaldır",
|
||||
"compose_form.publish": "Gönder",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.marked": "Medya hassas olarak işaretlendi",
|
||||
"compose_form.sensitive.unmarked": "Medya hassas olarak işaretlenmemiş",
|
||||
|
@ -83,24 +83,24 @@
|
|||
"compose_form.spoiler.unmarked": "Metin gizli değil",
|
||||
"compose_form.spoiler_placeholder": "İçerik uyarısı",
|
||||
"confirmation_modal.cancel": "İptal",
|
||||
"confirmations.block.block_and_report": "Block & Report",
|
||||
"confirmations.block.block_and_report": "Engelle & Bildir",
|
||||
"confirmations.block.confirm": "Engelle",
|
||||
"confirmations.block.message": "{name} kullanıcısını engellemek istiyor musunuz?",
|
||||
"confirmations.delete.confirm": "Sil",
|
||||
"confirmations.delete.message": "Bu gönderiyi silmek istiyor musunuz?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.confirm": "Sil",
|
||||
"confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?",
|
||||
"confirmations.domain_block.confirm": "Alan adının tamamını gizle",
|
||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||
"confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.",
|
||||
"confirmations.mute.confirm": "Sessize al",
|
||||
"confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?",
|
||||
"confirmations.redraft.confirm": "Sil ve yeniden tasarla",
|
||||
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||
"confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.",
|
||||
"confirmations.reply.confirm": "Yanıtla",
|
||||
"confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?",
|
||||
"confirmations.unfollow.confirm": "Takibi kaldır",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?",
|
||||
"embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.",
|
||||
"embed.preview": "İşte nasıl görüneceği:",
|
||||
"emoji_button.activity": "Aktivite",
|
||||
"emoji_button.custom": "Özel",
|
||||
|
@ -112,22 +112,23 @@
|
|||
"emoji_button.objects": "Nesneler",
|
||||
"emoji_button.people": "İnsanlar",
|
||||
"emoji_button.recent": "Sık kullanılan",
|
||||
"emoji_button.search": "Emoji ara...",
|
||||
"emoji_button.search": "Ara...",
|
||||
"emoji_button.search_results": "Arama sonuçları",
|
||||
"emoji_button.symbols": "Semboller",
|
||||
"emoji_button.travel": "Seyahat ve Yerler",
|
||||
"empty_column.account_timeline": "Burada hiç gönderi yok!",
|
||||
"empty_column.account_unavailable": "Profile unavailable",
|
||||
"empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.",
|
||||
"empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!",
|
||||
"empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.",
|
||||
"empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.",
|
||||
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
|
||||
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
|
||||
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
|
||||
"empty_column.favourited_statuses": "Hiç favori gönderiminiz yok. Bir tane olursa burada görünecek.",
|
||||
"empty_column.favourites": "Kimse bu gönderiyi favorilerine eklememiş. Biri eklerse burada görünecek.",
|
||||
"empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.",
|
||||
"empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.",
|
||||
"empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.",
|
||||
"empty_column.home.public_timeline": "herkese açık zaman tüneli",
|
||||
"empty_column.list": "There is nothing in this list yet.",
|
||||
"empty_column.list": "Bu listede henüz hiçbir şey yok.",
|
||||
"empty_column.lists": "Henüz hiç listeniz yok. Bir tane oluşturduğunuzda burada görünecek.",
|
||||
"empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.",
|
||||
"empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.",
|
||||
|
@ -136,7 +137,7 @@
|
|||
"follow_request.reject": "Reddet",
|
||||
"getting_started.developers": "Geliştiriciler",
|
||||
"getting_started.directory": "Profil dizini",
|
||||
"getting_started.documentation": "Documentation",
|
||||
"getting_started.documentation": "Belgeler",
|
||||
"getting_started.heading": "Başlangıç",
|
||||
"getting_started.invite": "İnsanları davet edin",
|
||||
"getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.",
|
||||
|
@ -145,12 +146,12 @@
|
|||
"hashtag.column_header.tag_mode.all": "ve {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "ya da {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "{additional} olmadan",
|
||||
"hashtag.column_settings.select.no_options_message": "No suggestions found",
|
||||
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
|
||||
"hashtag.column_settings.select.no_options_message": "Hiç öneri bulunamadı",
|
||||
"hashtag.column_settings.select.placeholder": "Hashtagler girin…",
|
||||
"hashtag.column_settings.tag_mode.all": "Bunların hepsi",
|
||||
"hashtag.column_settings.tag_mode.any": "Bunların hiçbiri",
|
||||
"hashtag.column_settings.tag_mode.none": "Bunların hiçbiri",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"hashtag.column_settings.tag_toggle": "Bu sütundaki ek etiketleri içer",
|
||||
"home.column_settings.basic": "Temel",
|
||||
"home.column_settings.show_reblogs": "Boost edilenleri göster",
|
||||
"home.column_settings.show_replies": "Cevapları göster",
|
||||
|
@ -159,122 +160,122 @@
|
|||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
"introduction.federation.action": "İleri",
|
||||
"introduction.federation.federated.headline": "Birleşik",
|
||||
"introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel yayınlar, birleşik zaman çizelgesinde görünecektir.",
|
||||
"introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.",
|
||||
"introduction.federation.home.headline": "Ana sayfa",
|
||||
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
|
||||
"introduction.federation.local.headline": "Yerel",
|
||||
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
|
||||
"introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.",
|
||||
"introduction.interactions.action": "Öğreticiyi bitirin!",
|
||||
"introduction.interactions.favourite.headline": "Favori",
|
||||
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
|
||||
"introduction.interactions.favourite.text": "Bir gönderiyi favorilerinize alarak sonrası için saklayabilirsiniz ve yazara gönderiyi beğendiğinizi söyleyebilirsiniz.",
|
||||
"introduction.interactions.reblog.headline": "Boost",
|
||||
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
|
||||
"introduction.interactions.reblog.text": "Başkalarının gönderilerini boostlayarak kendi takipçilerinizle paylaşabillirsiniz.",
|
||||
"introduction.interactions.reply.headline": "Yanıt",
|
||||
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
|
||||
"introduction.interactions.reply.text": "Başkalarının gönderilerini ve kendi gönderilerinizi yanıtlayabilirsiniz. Bir konuşmada zincirli bir şekilde olacaklardır.",
|
||||
"introduction.welcome.action": "Hadi gidelim!",
|
||||
"introduction.welcome.headline": "İlk adımlar",
|
||||
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.blocked": "to open blocked users list",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).",
|
||||
"keyboard_shortcuts.back": "geriye gitmek için",
|
||||
"keyboard_shortcuts.blocked": "engelli kullanıcılar listesini açmak için",
|
||||
"keyboard_shortcuts.boost": "boostlamak için",
|
||||
"keyboard_shortcuts.column": "sütunlardan birindeki duruma odaklanmak için",
|
||||
"keyboard_shortcuts.compose": "yazma alanına odaklanmak için",
|
||||
"keyboard_shortcuts.description": "Açıklama",
|
||||
"keyboard_shortcuts.direct": "to open direct messages column",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.favourites": "to open favourites list",
|
||||
"keyboard_shortcuts.federated": "to open federated timeline",
|
||||
"keyboard_shortcuts.direct": "direkt mesajlar sütununu açmak için",
|
||||
"keyboard_shortcuts.down": "listede aşağıya inmek için",
|
||||
"keyboard_shortcuts.enter": "durumu açmak için",
|
||||
"keyboard_shortcuts.favourite": "favorilere eklemek için",
|
||||
"keyboard_shortcuts.favourites": "favoriler listesini açmak için",
|
||||
"keyboard_shortcuts.federated": "federe edilmiş zaman tünelini açmak için",
|
||||
"keyboard_shortcuts.heading": "Klavye kısayolları",
|
||||
"keyboard_shortcuts.home": "Ana sayfa zaman çizelgesini açmak için",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.local": "to open local timeline",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.muted": "to open muted users list",
|
||||
"keyboard_shortcuts.my_profile": "to open your profile",
|
||||
"keyboard_shortcuts.notifications": "to open notifications column",
|
||||
"keyboard_shortcuts.pinned": "to open pinned toots list",
|
||||
"keyboard_shortcuts.profile": "to open author's profile",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.requests": "to open follow requests list",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.start": "to open \"get started\" column",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"keyboard_shortcuts.home": "ana sayfa zaman çizelgesini açmak için",
|
||||
"keyboard_shortcuts.hotkey": "Kısatuş",
|
||||
"keyboard_shortcuts.legend": "bu efsaneyi görüntülemek için",
|
||||
"keyboard_shortcuts.local": "yerel zaman tünelini açmak için",
|
||||
"keyboard_shortcuts.mention": "yazardan bahsetmek için",
|
||||
"keyboard_shortcuts.muted": "susturulmuş kullanıcı listesini açmak için",
|
||||
"keyboard_shortcuts.my_profile": "profilinizi açmak için",
|
||||
"keyboard_shortcuts.notifications": "bildirimler sütununu açmak için",
|
||||
"keyboard_shortcuts.pinned": "sabitlenmiş gönderiler listesini açmak için",
|
||||
"keyboard_shortcuts.profile": "yazarın profilini açmak için",
|
||||
"keyboard_shortcuts.reply": "cevaplamak için",
|
||||
"keyboard_shortcuts.requests": "takip istekleri listesini açmak için",
|
||||
"keyboard_shortcuts.search": "aramaya odaklanmak için",
|
||||
"keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için",
|
||||
"keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için",
|
||||
"keyboard_shortcuts.toot": "yeni bir gönderiye başlamak için",
|
||||
"keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için",
|
||||
"keyboard_shortcuts.up": "listede yukarıya çıkmak için",
|
||||
"lightbox.close": "Kapat",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"lightbox.next": "Sonraki",
|
||||
"lightbox.previous": "Önceli",
|
||||
"lists.account.add": "Listeye ekle",
|
||||
"lists.account.remove": "Listeden kaldır",
|
||||
"lists.delete": "Listeyi sil",
|
||||
"lists.edit": "listeyi düzenle",
|
||||
"lists.edit.submit": "Başlığı değiştir",
|
||||
"lists.new.create": "Liste ekle",
|
||||
"lists.new.title_placeholder": "Yeni liste başlığı",
|
||||
"lists.search": "Takip ettiğiniz kişiler arasından arayın",
|
||||
"lists.subheading": "Listeleriniz",
|
||||
"loading_indicator.label": "Yükleniyor...",
|
||||
"media_gallery.toggle_visible": "Görünürlüğü değiştir",
|
||||
"missing_indicator.label": "Bulunamadı",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"missing_indicator.sublabel": "Bu kaynak bulunamadı",
|
||||
"mute_modal.hide_notifications": "Bu kullanıcıdan bildirimler gizlensin mı?",
|
||||
"navigation_bar.apps": "Mobil uygulamalar",
|
||||
"navigation_bar.blocks": "Engellenen kullanıcılar",
|
||||
"navigation_bar.community_timeline": "Yerel zaman tüneli",
|
||||
"navigation_bar.compose": "Compose new toot",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.discover": "Discover",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.compose": "Yeni bir gönderi yazın",
|
||||
"navigation_bar.direct": "Direkt Mesajlar",
|
||||
"navigation_bar.discover": "Keşfet",
|
||||
"navigation_bar.domain_blocks": "Gizli alan adları",
|
||||
"navigation_bar.edit_profile": "Profili düzenle",
|
||||
"navigation_bar.favourites": "Favoriler",
|
||||
"navigation_bar.filters": "Muted words",
|
||||
"navigation_bar.filters": "Susturulmuş kelimeler",
|
||||
"navigation_bar.follow_requests": "Takip istekleri",
|
||||
"navigation_bar.info": "Genişletilmiş bilgi",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.keyboard_shortcuts": "Klavye kısayolları",
|
||||
"navigation_bar.lists": "Listeler",
|
||||
"navigation_bar.logout": "Çıkış",
|
||||
"navigation_bar.mutes": "Sessize alınmış kullanıcılar",
|
||||
"navigation_bar.personal": "Personal",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.personal": "Kişisel",
|
||||
"navigation_bar.pins": "Sabitlenmiş gönderiler",
|
||||
"navigation_bar.preferences": "Tercihler",
|
||||
"navigation_bar.public_timeline": "Federe zaman tüneli",
|
||||
"navigation_bar.security": "Security",
|
||||
"navigation_bar.security": "Güvenlik",
|
||||
"notification.favourite": "{name} senin durumunu favorilere ekledi",
|
||||
"notification.follow": "{name} seni takip ediyor",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.poll": "Oy verdiğiniz bir anket bitti",
|
||||
"notification.reblog": "{name} senin durumunu boost etti",
|
||||
"notifications.clear": "Bildirimleri temizle",
|
||||
"notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?",
|
||||
"notifications.column_settings.alert": "Masaüstü bildirimleri",
|
||||
"notifications.column_settings.favourite": "Favoriler:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Display all categories",
|
||||
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
||||
"notifications.column_settings.filter_bar.show": "Show",
|
||||
"notifications.column_settings.filter_bar.advanced": "Tüm kategorileri göster",
|
||||
"notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu",
|
||||
"notifications.column_settings.filter_bar.show": "Göster",
|
||||
"notifications.column_settings.follow": "Yeni takipçiler:",
|
||||
"notifications.column_settings.mention": "Bahsedilenler:",
|
||||
"notifications.column_settings.poll": "Poll results:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.reblog": "Boost’lar:",
|
||||
"notifications.column_settings.poll": "Anket sonuçları:",
|
||||
"notifications.column_settings.push": "Push bildirimleri",
|
||||
"notifications.column_settings.reblog": "Boostlar:",
|
||||
"notifications.column_settings.show": "Bildirimlerde göster",
|
||||
"notifications.column_settings.sound": "Ses çal",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.group": "{count} notifications",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"notifications.filter.all": "Tümü",
|
||||
"notifications.filter.boosts": "Boostlar",
|
||||
"notifications.filter.favourites": "Favoriler",
|
||||
"notifications.filter.follows": "Takip edilenler",
|
||||
"notifications.filter.mentions": "Bahsetmeler",
|
||||
"notifications.filter.polls": "Anket sonuçları",
|
||||
"notifications.group": "{count} bildirim",
|
||||
"poll.closed": "Kapandı",
|
||||
"poll.refresh": "Yenile",
|
||||
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
|
||||
"poll.vote": "Vote",
|
||||
"poll_button.add_poll": "Add a poll",
|
||||
"poll_button.remove_poll": "Remove poll",
|
||||
"poll.vote": "Oy ver",
|
||||
"poll_button.add_poll": "Bir anket ekleyin",
|
||||
"poll_button.remove_poll": "Anket kaldır",
|
||||
"privacy.change": "Gönderi gizliliğini ayarla",
|
||||
"privacy.direct.long": "Sadece bahsedilen kişilere gönder",
|
||||
"privacy.direct.short": "Direkt",
|
||||
|
@ -284,100 +285,100 @@
|
|||
"privacy.public.short": "Herkese açık",
|
||||
"privacy.unlisted.long": "Herkese açık zaman tüneline gönderme",
|
||||
"privacy.unlisted.short": "Listelenmemiş",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"regeneration_indicator.label": "Yükleniyor…",
|
||||
"regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!",
|
||||
"relative_time.days": "{number}g",
|
||||
"relative_time.hours": "{number}s",
|
||||
"relative_time.just_now": "şimdi",
|
||||
"relative_time.minutes": "{number}dk",
|
||||
"relative_time.seconds": "{number}sn",
|
||||
"reply_indicator.cancel": "İptal",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Şu kişiye ilet : {target}",
|
||||
"report.forward_hint": "Bu hesap başka bir sunucudan. Anonimleştirilmiş bir rapor oraya da gönderilsin mi?",
|
||||
"report.hint": "Bu rapor sunucu moderatörlerine gönderilecek. Bu hesabı neden bildirdiğiniz hakkında bilgi verebirsiniz:",
|
||||
"report.placeholder": "Ek yorumlar",
|
||||
"report.submit": "Gönder",
|
||||
"report.target": "Raporlama",
|
||||
"search.placeholder": "Ara",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.search_format": "Gelişmiş arama formatı",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.status": "durum",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_popout.tips.user": "kullanıcı",
|
||||
"search_results.accounts": "İnsanlar",
|
||||
"search_results.hashtags": "Hashtagler",
|
||||
"search_results.statuses": "Gönderiler",
|
||||
"search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}",
|
||||
"status.admin_account": "@{name} için denetim arayüzünü açın",
|
||||
"status.admin_status": "Denetim arayüzünde bu durumu açın",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.block": "Engelle : @{name}",
|
||||
"status.cancel_reblog_private": "Boost'u geri al",
|
||||
"status.cannot_reblog": "Bu gönderi boost edilemez",
|
||||
"status.copy": "Bağlantı durumunu kopyala",
|
||||
"status.delete": "Sil",
|
||||
"status.detailed_status": "Detailed conversation view",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.detailed_status": "Detaylı yazışma dökümü",
|
||||
"status.direct": "@{name}'e gönder",
|
||||
"status.embed": "Gömülü",
|
||||
"status.favourite": "Favorilere ekle",
|
||||
"status.filtered": "Filtered",
|
||||
"status.filtered": "Filtrelenmiş",
|
||||
"status.load_more": "Daha fazla",
|
||||
"status.media_hidden": "Gizli görsel",
|
||||
"status.mention": "Bahset @{name}",
|
||||
"status.more": "More",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute_conversation": "Mute conversation",
|
||||
"status.mention": "Bahset : @{name}",
|
||||
"status.more": "Daha fazla",
|
||||
"status.mute": "Sustur : @{name}",
|
||||
"status.mute_conversation": "Yazışmayı sustur",
|
||||
"status.open": "Bu gönderiyi genişlet",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.read_more": "Read more",
|
||||
"status.reblog": "Boost'la",
|
||||
"status.pin": "Profile sabitle",
|
||||
"status.pinned": "Sabitlenmiş gönderi",
|
||||
"status.read_more": "Daha dazla oku",
|
||||
"status.reblog": "Boostla",
|
||||
"status.reblog_private": "Boost to original audience",
|
||||
"status.reblogged_by": "{name} boost etti",
|
||||
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
|
||||
"status.redraft": "Delete & re-draft",
|
||||
"status.reblogs.empty": "Kimse bu gönderiyi boostlamadı. Biri yaptığında burada gözükecek.",
|
||||
"status.redraft": "Sil & tekrar taslakla",
|
||||
"status.reply": "Cevapla",
|
||||
"status.replyAll": "Konuşmayı cevapla",
|
||||
"status.report": "@{name}'i raporla",
|
||||
"status.sensitive_toggle": "Görmek için tıklayınız",
|
||||
"status.sensitive_warning": "Hassas içerik",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Daha azı",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Daha fazlası",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.show_thread": "Show thread",
|
||||
"status.share": "Paylaş",
|
||||
"status.show_less": "Daha az göster",
|
||||
"status.show_less_all": "Hepsi için daha az göster",
|
||||
"status.show_more": "Daha fazla göster",
|
||||
"status.show_more_all": "Hepsi için daha fazla göster",
|
||||
"status.show_thread": "Başlığı göster",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"suggestions.header": "You might be interested in…",
|
||||
"status.unpin": "Profilden sabitlemeyi kaldır",
|
||||
"suggestions.dismiss": "Öneriyi görmezden gel",
|
||||
"suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…",
|
||||
"tabs_bar.federated_timeline": "Federe",
|
||||
"tabs_bar.home": "Ana sayfa",
|
||||
"tabs_bar.local_timeline": "Yerel",
|
||||
"tabs_bar.notifications": "Bildirimler",
|
||||
"tabs_bar.search": "Search",
|
||||
"tabs_bar.search": "Ara",
|
||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"upload_area.title": "Upload için sürükle bırak yapınız",
|
||||
"ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.",
|
||||
"upload_area.title": "Karşıya yükleme için sürükle bırak yapınız",
|
||||
"upload_button.label": "Görsel ekle",
|
||||
"upload_error.limit": "Dosya yükleme sınırı aşıldı.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Kırp",
|
||||
"upload_form.undo": "Geri al",
|
||||
"upload_progress.label": "Yükleniyor...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.unmute": "Unmute sound"
|
||||
"video.close": "Videoyu kapat",
|
||||
"video.exit_fullscreen": "Tam ekrandan çık",
|
||||
"video.expand": "Videoyu genişlet",
|
||||
"video.fullscreen": "Tam ekran",
|
||||
"video.hide": "Videoyu gizle",
|
||||
"video.mute": "Sesi kıs",
|
||||
"video.pause": "Duraklat",
|
||||
"video.play": "Oynat",
|
||||
"video.unmute": "Sesi aç"
|
||||
}
|
||||
|
|
|
@ -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": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.",
|
||||
|
|
|
@ -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": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。",
|
||||
|
|
|
@ -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": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。",
|
||||
|
|
|
@ -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": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -18,7 +18,7 @@ class AccountIdentityProof < ApplicationRecord
|
|||
belongs_to :account
|
||||
|
||||
validates :provider, inclusion: { in: ProofProvider::SUPPORTED_PROVIDERS }
|
||||
validates :provider_username, format: { with: /\A[a-z0-9_]+\z/i }, length: { minimum: 2, maximum: 15 }
|
||||
validates :provider_username, format: { with: /\A[a-z0-9_]+\z/i }, length: { minimum: 2, maximum: 30 }
|
||||
validates :provider_username, uniqueness: { scope: [:account_id, :provider] }
|
||||
validates :token, format: { with: /\A[a-f0-9]+\z/ }, length: { maximum: 66 }
|
||||
|
||||
|
@ -30,12 +30,12 @@ class AccountIdentityProof < ApplicationRecord
|
|||
|
||||
delegate :refresh!, :on_success_path, :badge, to: :provider_instance
|
||||
|
||||
private
|
||||
|
||||
def provider_instance
|
||||
@provider_instance ||= ProofProvider.find(provider, self)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def queue_worker
|
||||
provider_instance.worker_class.perform_async(id)
|
||||
end
|
||||
|
|
|
@ -57,7 +57,8 @@ class Form::AdminSettings
|
|||
|
||||
attr_accessor(*KEYS)
|
||||
|
||||
validates :site_short_description, :site_description, :site_extended_description, :site_terms, :closed_registrations_message, html: true
|
||||
validates :site_short_description, :site_description, html: { wrap_with: :p }
|
||||
validates :site_extended_description, :site_terms, :closed_registrations_message, html: true
|
||||
validates :registrations_mode, inclusion: { in: %w(open approved none) }
|
||||
validates :min_invite_role, inclusion: { in: %w(disabled user moderator admin) }
|
||||
validates :site_contact_email, :site_contact_username, presence: true
|
||||
|
|
|
@ -74,6 +74,9 @@ class User < ApplicationRecord
|
|||
has_many :applications, class_name: 'Doorkeeper::Application', as: :owner
|
||||
has_many :backups, inverse_of: :user
|
||||
|
||||
has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy
|
||||
accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? }
|
||||
|
||||
validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
|
||||
validates_with BlacklistedEmailValidator, if: :email_changed?
|
||||
validates_with EmailMxValidator, if: :validate_email_dns?
|
||||
|
@ -188,6 +191,10 @@ class User < ApplicationRecord
|
|||
settings.notification_emails['report']
|
||||
end
|
||||
|
||||
def allows_pending_account_emails?
|
||||
settings.notification_emails['pending_account']
|
||||
end
|
||||
|
||||
def hides_network?
|
||||
@hides_network ||= settings.hide_network
|
||||
end
|
||||
|
@ -292,7 +299,7 @@ class User < ApplicationRecord
|
|||
|
||||
def notify_staff_about_pending_account!
|
||||
User.staff.includes(:account).each do |u|
|
||||
next unless u.allows_report_emails?
|
||||
next unless u.allows_pending_account_emails?
|
||||
AdminMailer.new_pending_account(u.account, self).deliver_later
|
||||
end
|
||||
end
|
||||
|
|
17
app/models/user_invite_request.rb
Normal file
17
app/models/user_invite_request.rb
Normal file
|
@ -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
|
|
@ -1,18 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class HtmlValidator < ActiveModel::EachValidator
|
||||
ERROR_RE = /Opening and ending tag mismatch|Unexpected end tag/
|
||||
|
||||
def validate_each(record, attribute, value)
|
||||
return if value.blank?
|
||||
|
||||
errors = html_errors(value)
|
||||
unless errors.empty?
|
||||
record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s))
|
||||
end
|
||||
|
||||
record.errors.add(attribute, I18n.t('html_validator.invalid_markup', error: errors.first.to_s)) unless errors.empty?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def html_errors(str)
|
||||
fragment = Nokogiri::HTML.fragment(str)
|
||||
fragment.errors
|
||||
fragment = Nokogiri::HTML.fragment(options[:wrap_with] ? "<#{options[:wrap_with]}>#{str}</#{options[:wrap_with]}>" : str)
|
||||
fragment.errors.select { |error| ERROR_RE =~ error.message }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.pending_accounts.title', count: User.pending.count)
|
||||
|
||||
= form_for(@form, url: admin_pending_accounts_path, method: :patch) do |f|
|
||||
= form_for(@form, url: batch_admin_pending_accounts_path) do |f|
|
||||
= hidden_field_tag :page, params[:page] || 1
|
||||
|
||||
.batch-table
|
||||
|
|
|
@ -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 %>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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|
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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',
|
||||
],
|
||||
};
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
de:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Frist
|
||||
options: Wahlen
|
||||
status:
|
||||
owned_poll: Umfrage
|
||||
errors:
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
el:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Προθεσμία
|
||||
options: Επιλογές
|
||||
status:
|
||||
owned_poll: Ψηφοφορία
|
||||
errors:
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
---
|
||||
fr:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Date butoir
|
||||
options: Choix
|
||||
errors:
|
||||
models:
|
||||
account:
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
gl:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Caducidade
|
||||
options: Opcións
|
||||
status:
|
||||
owned_poll: Sondaxe
|
||||
errors:
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
---
|
||||
kk:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Дедлайн
|
||||
options: Таңдаулар
|
||||
errors:
|
||||
models:
|
||||
account:
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
nl:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Deadline
|
||||
options: Keuzes
|
||||
status:
|
||||
owned_poll: Poll
|
||||
errors:
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
---
|
||||
ru:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Крайний срок
|
||||
options: Варианты
|
||||
errors:
|
||||
models:
|
||||
account:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -498,7 +498,6 @@ ar:
|
|||
warning: كن حذرا مع هذه البيانات. لا تقم أبدا بمشاركتها مع الآخَرين !
|
||||
your_token: رمز نفاذك
|
||||
auth:
|
||||
agreement_html: بمجرد النقر على "التسجيل" أسفله، فإنك تُصرِّح قبول <a href="%{rules_path}">قواعد مثيل الخادوم</a> و <a href="%{terms_path}">شروط الخدمة التي نوفرها لك</a>.
|
||||
change_password: الكلمة السرية
|
||||
confirm_email: تأكيد عنوان البريد الإلكتروني
|
||||
delete_account: حذف حساب
|
||||
|
@ -813,9 +812,7 @@ ar:
|
|||
migrate: تهجير الحساب
|
||||
notifications: الإخطارات
|
||||
preferences: التفضيلات
|
||||
settings: الإعدادات
|
||||
two_factor_authentication: المُصادقة بخُطوَتَيْن
|
||||
your_apps: تطبيقاتك
|
||||
statuses:
|
||||
attached:
|
||||
description: 'مُرفَق : %{attached}'
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue