Merge remote-tracking branch 'upstream/main'
All checks were successful
continuous-integration/drone/push Build is passing
|
@ -1,7 +1,9 @@
|
|||
[production]
|
||||
defaults
|
||||
not IE 11
|
||||
> 0.2%
|
||||
ios >= 15.6
|
||||
not dead
|
||||
not OperaMini all
|
||||
|
||||
[development]
|
||||
supports es6-module
|
||||
|
|
16
.github/renovate.json5
vendored
|
@ -125,6 +125,22 @@
|
|||
],
|
||||
groupName: null, // We dont want them to belong to any group
|
||||
},
|
||||
{
|
||||
// Group all RuboCop packages with `rubocop` in the same PR
|
||||
matchManagers: ['bundler'],
|
||||
matchPackageNames: ['rubocop'],
|
||||
matchPackagePrefixes: ['rubocop-'],
|
||||
matchUpdateTypes: ['patch', 'minor'],
|
||||
groupName: 'RuboCop (non-major)',
|
||||
},
|
||||
{
|
||||
// Group all RSpec packages with `rspec` in the same PR
|
||||
matchManagers: ['bundler'],
|
||||
matchPackageNames: ['rspec'],
|
||||
matchPackagePrefixes: ['rspec-'],
|
||||
matchUpdateTypes: ['patch', 'minor'],
|
||||
groupName: 'RSpec (non-major)',
|
||||
},
|
||||
// Add labels depending on package manager
|
||||
{ matchManagers: ['npm', 'nvm'], addLabels: ['javascript'] },
|
||||
{ matchManagers: ['bundler', 'ruby-version'], addLabels: ['ruby'] },
|
||||
|
|
3
.github/workflows/test-ruby.yml
vendored
|
@ -114,6 +114,7 @@ jobs:
|
|||
- '3.0'
|
||||
- '3.1'
|
||||
- '.ruby-version'
|
||||
- '3.3'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
|
@ -189,6 +190,7 @@ jobs:
|
|||
- '3.0'
|
||||
- '3.1'
|
||||
- '.ruby-version'
|
||||
- '3.3'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
@ -288,6 +290,7 @@ jobs:
|
|||
- '3.0'
|
||||
- '3.1'
|
||||
- '.ruby-version'
|
||||
- '3.3'
|
||||
search-image:
|
||||
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13
|
||||
include:
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
inherits_from: .haml-lint_todo.yml
|
||||
|
||||
exclude:
|
||||
- 'vendor/**/*'
|
||||
- lib/templates/haml/scaffold/_form.html.haml
|
||||
|
@ -14,3 +12,5 @@ linters:
|
|||
enabled: true
|
||||
LineLength:
|
||||
max: 320
|
||||
ViewLength:
|
||||
max: 200 # Override default value of 100 inherited from rubocop
|
||||
|
|
3
Gemfile
|
@ -58,6 +58,7 @@ gem 'htmlentities', '~> 4.3'
|
|||
gem 'http', '~> 5.1'
|
||||
gem 'http_accept_language', '~> 2.1'
|
||||
gem 'httplog', '~> 1.6.2'
|
||||
gem 'i18n', '1.14.1' # TODO: Remove version when resolved: https://github.com/glebm/i18n-tasks/issues/552 / https://github.com/ruby-i18n/i18n/pull/688
|
||||
gem 'idn-ruby', require: 'idn'
|
||||
gem 'inline_svg'
|
||||
gem 'kaminari', '~> 1.2'
|
||||
|
@ -89,7 +90,7 @@ gem 'sidekiq-bulk', '~> 0.2.0'
|
|||
gem 'simple-navigation', '~> 4.4'
|
||||
gem 'simple_form', '~> 5.2'
|
||||
gem 'stoplight', '~> 3.0.1'
|
||||
gem 'strong_migrations', '1.7.0'
|
||||
gem 'strong_migrations', '1.8.0'
|
||||
gem 'tty-prompt', '~> 0.23', require: false
|
||||
gem 'twitter-text', '~> 3.1.0'
|
||||
gem 'tzinfo-data', '~> 1.2023'
|
||||
|
|
50
Gemfile.lock
|
@ -139,7 +139,7 @@ GEM
|
|||
erubi (~> 1.4)
|
||||
parser (>= 2.4)
|
||||
smart_properties
|
||||
bigdecimal (3.1.6)
|
||||
bigdecimal (3.1.7)
|
||||
bindata (2.4.15)
|
||||
binding_of_caller (1.0.0)
|
||||
debug_inspector (>= 0.0.1)
|
||||
|
@ -213,7 +213,7 @@ GEM
|
|||
devise_pam_authenticatable2 (9.2.0)
|
||||
devise (>= 4.0.0)
|
||||
rpam2 (~> 4.0)
|
||||
diff-lcs (1.5.0)
|
||||
diff-lcs (1.5.1)
|
||||
discard (1.3.0)
|
||||
activerecord (>= 4.2, < 8)
|
||||
docile (1.4.0)
|
||||
|
@ -225,8 +225,7 @@ GEM
|
|||
dotenv-rails (2.8.1)
|
||||
dotenv (= 2.8.1)
|
||||
railties (>= 3.2)
|
||||
drb (2.2.0)
|
||||
ruby2_keywords
|
||||
drb (2.2.1)
|
||||
ed25519 (1.3.0)
|
||||
elasticsearch (7.13.3)
|
||||
elasticsearch-api (= 7.13.3)
|
||||
|
@ -438,7 +437,7 @@ GEM
|
|||
mime-types-data (3.2023.1205)
|
||||
mini_mime (1.1.5)
|
||||
mini_portile2 (2.8.5)
|
||||
minitest (5.21.2)
|
||||
minitest (5.22.3)
|
||||
msgpack (1.7.2)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.3.0)
|
||||
|
@ -500,7 +499,7 @@ GEM
|
|||
openssl-signature_algorithm (1.3.0)
|
||||
openssl (> 2.0)
|
||||
orm_adapter (0.5.0)
|
||||
ox (2.14.17)
|
||||
ox (2.14.18)
|
||||
parallel (1.24.0)
|
||||
parser (3.3.0.5)
|
||||
ast (~> 2.4.1)
|
||||
|
@ -535,7 +534,7 @@ GEM
|
|||
activesupport (>= 3.0.0)
|
||||
raabro (1.4.0)
|
||||
racc (1.7.3)
|
||||
rack (2.2.8.1)
|
||||
rack (2.2.9)
|
||||
rack-attack (6.7.0)
|
||||
rack (>= 1.0, < 4)
|
||||
rack-cors (2.0.2)
|
||||
|
@ -583,7 +582,7 @@ GEM
|
|||
rails-html-sanitizer (1.6.0)
|
||||
loofah (~> 2.21)
|
||||
nokogiri (~> 1.14)
|
||||
rails-i18n (7.0.8)
|
||||
rails-i18n (7.0.9)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 6.0.0, < 8)
|
||||
railties (7.1.3.2)
|
||||
|
@ -601,7 +600,7 @@ GEM
|
|||
link_header (~> 0.0, >= 0.0.8)
|
||||
rdf-normalize (0.7.0)
|
||||
rdf (~> 3.3)
|
||||
rdoc (6.6.2)
|
||||
rdoc (6.6.3.1)
|
||||
psych (>= 4.0.0)
|
||||
redcarpet (3.6.0)
|
||||
redis (4.8.1)
|
||||
|
@ -635,21 +634,21 @@ GEM
|
|||
rspec-mocks (3.13.0)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (6.1.1)
|
||||
rspec-rails (6.1.2)
|
||||
actionpack (>= 6.1)
|
||||
activesupport (>= 6.1)
|
||||
railties (>= 6.1)
|
||||
rspec-core (~> 3.12)
|
||||
rspec-expectations (~> 3.12)
|
||||
rspec-mocks (~> 3.12)
|
||||
rspec-support (~> 3.12)
|
||||
rspec-core (~> 3.13)
|
||||
rspec-expectations (~> 3.13)
|
||||
rspec-mocks (~> 3.13)
|
||||
rspec-support (~> 3.13)
|
||||
rspec-sidekiq (4.1.0)
|
||||
rspec-core (~> 3.0)
|
||||
rspec-expectations (~> 3.0)
|
||||
rspec-mocks (~> 3.0)
|
||||
sidekiq (>= 5, < 8)
|
||||
rspec-support (3.13.1)
|
||||
rubocop (1.60.2)
|
||||
rubocop (1.62.1)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (>= 3.17.0)
|
||||
parallel (~> 1.10)
|
||||
|
@ -657,24 +656,24 @@ GEM
|
|||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-ast (>= 1.31.1, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.30.0)
|
||||
parser (>= 3.2.1.0)
|
||||
rubocop-ast (1.31.2)
|
||||
parser (>= 3.3.0.4)
|
||||
rubocop-capybara (2.20.0)
|
||||
rubocop (~> 1.41)
|
||||
rubocop-factory_bot (2.25.0)
|
||||
rubocop (~> 1.33)
|
||||
rubocop-factory_bot (2.25.1)
|
||||
rubocop (~> 1.41)
|
||||
rubocop-performance (1.20.2)
|
||||
rubocop (>= 1.48.1, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-rails (2.23.1)
|
||||
rubocop-rails (2.24.0)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-rspec (2.26.1)
|
||||
rubocop-ast (>= 1.31.1, < 2.0)
|
||||
rubocop-rspec (2.27.1)
|
||||
rubocop (~> 1.40)
|
||||
rubocop-capybara (~> 2.17)
|
||||
rubocop-factory_bot (~> 2.22)
|
||||
|
@ -735,7 +734,7 @@ GEM
|
|||
stoplight (3.0.2)
|
||||
redlock (~> 1.0)
|
||||
stringio (3.1.0)
|
||||
strong_migrations (1.7.0)
|
||||
strong_migrations (1.8.0)
|
||||
activerecord (>= 5.2)
|
||||
swd (1.3.0)
|
||||
activesupport (>= 3)
|
||||
|
@ -866,6 +865,7 @@ DEPENDENCIES
|
|||
http (~> 5.1)
|
||||
http_accept_language (~> 2.1)
|
||||
httplog (~> 1.6.2)
|
||||
i18n (= 1.14.1)
|
||||
i18n-tasks (~> 1.0)
|
||||
idn-ruby
|
||||
inline_svg
|
||||
|
@ -940,7 +940,7 @@ DEPENDENCIES
|
|||
simplecov-lcov (~> 0.8)
|
||||
stackprof
|
||||
stoplight (~> 3.0.1)
|
||||
strong_migrations (= 1.7.0)
|
||||
strong_migrations (= 1.8.0)
|
||||
test-prof
|
||||
thor (~> 1.2)
|
||||
tty-prompt (~> 0.23)
|
||||
|
|
|
@ -128,7 +128,7 @@ module Admin
|
|||
def unblock_email
|
||||
authorize @account, :unblock_email?
|
||||
|
||||
CanonicalEmailBlock.where(reference_account: @account).delete_all
|
||||
CanonicalEmailBlock.matching_account(@account).delete_all
|
||||
|
||||
log_action :unblock_email, @account
|
||||
|
||||
|
|
|
@ -12,6 +12,10 @@ class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController
|
|||
private
|
||||
|
||||
def set_recently_used_tags
|
||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: current_account.featured_tags).limit(10)
|
||||
@recently_used_tags = Tag.recently_used(current_account).where.not(id: featured_tag_ids).limit(10)
|
||||
end
|
||||
|
||||
def featured_tag_ids
|
||||
current_account.featured_tags.pluck(:tag_id)
|
||||
end
|
||||
end
|
||||
|
|
61
app/controllers/severed_relationships_controller.rb
Normal file
|
@ -0,0 +1,61 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class SeveredRelationshipsController < ApplicationController
|
||||
layout 'admin'
|
||||
|
||||
before_action :authenticate_user!
|
||||
before_action :set_body_classes
|
||||
before_action :set_cache_headers
|
||||
|
||||
before_action :set_event, only: [:following, :followers]
|
||||
|
||||
def index
|
||||
@events = AccountRelationshipSeveranceEvent.where(account: current_account)
|
||||
end
|
||||
|
||||
def following
|
||||
respond_to do |format|
|
||||
format.csv { send_data following_data, filename: "following-#{@event.target_name}-#{@event.created_at.to_date.iso8601}.csv" }
|
||||
end
|
||||
end
|
||||
|
||||
def followers
|
||||
respond_to do |format|
|
||||
format.csv { send_data followers_data, filename: "followers-#{@event.target_name}-#{@event.created_at.to_date.iso8601}.csv" }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_event
|
||||
@event = AccountRelationshipSeveranceEvent.find(params[:id])
|
||||
end
|
||||
|
||||
def following_data
|
||||
CSV.generate(headers: ['Account address', 'Show boosts', 'Notify on new posts', 'Languages'], write_headers: true) do |csv|
|
||||
@event.severed_relationships.active.about_local_account(current_account).includes(:remote_account).reorder(id: :desc).each do |follow|
|
||||
csv << [acct(follow.target_account), follow.show_reblogs, follow.notify, follow.languages&.join(', ')]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def followers_data
|
||||
CSV.generate(headers: ['Account address'], write_headers: true) do |csv|
|
||||
@event.severed_relationships.passive.about_local_account(current_account).includes(:remote_account).reorder(id: :desc).each do |follow|
|
||||
csv << [acct(follow.account)]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def acct(account)
|
||||
account.local? ? account.local_username_and_domain : account.acct
|
||||
end
|
||||
|
||||
def set_body_classes
|
||||
@body_classes = 'admin'
|
||||
end
|
||||
|
||||
def set_cache_headers
|
||||
response.cache_control.replace(private: true, no_store: true)
|
||||
end
|
||||
end
|
|
@ -21,15 +21,4 @@ module BrandingHelper
|
|||
def render_logo
|
||||
image_pack_tag('logo.svg', alt: 'Mastodon', class: 'logo logo--icon')
|
||||
end
|
||||
|
||||
def render_symbol(version = :icon)
|
||||
path = case version
|
||||
when :icon
|
||||
'logo-symbol-icon.svg'
|
||||
when :wordmark
|
||||
'logo-symbol-wordmark.svg'
|
||||
end
|
||||
|
||||
render(file: Rails.root.join('app', 'javascript', 'images', path)).html_safe # rubocop:disable Rails/OutputSafety
|
||||
end
|
||||
end
|
||||
|
|
|
@ -75,6 +75,7 @@ export const INIT_MEDIA_EDIT_MODAL = 'INIT_MEDIA_EDIT_MODAL';
|
|||
|
||||
export const COMPOSE_CHANGE_MEDIA_DESCRIPTION = 'COMPOSE_CHANGE_MEDIA_DESCRIPTION';
|
||||
export const COMPOSE_CHANGE_MEDIA_FOCUS = 'COMPOSE_CHANGE_MEDIA_FOCUS';
|
||||
export const COMPOSE_CHANGE_MEDIA_ORDER = 'COMPOSE_CHANGE_MEDIA_ORDER';
|
||||
|
||||
export const COMPOSE_SET_STATUS = 'COMPOSE_SET_STATUS';
|
||||
export const COMPOSE_FOCUS = 'COMPOSE_FOCUS';
|
||||
|
@ -809,3 +810,9 @@ export function changePollSettings(expiresIn, isMultiple) {
|
|||
isMultiple,
|
||||
};
|
||||
}
|
||||
|
||||
export const changeMediaOrder = (a, b) => ({
|
||||
type: COMPOSE_CHANGE_MEDIA_ORDER,
|
||||
a,
|
||||
b,
|
||||
});
|
||||
|
|
|
@ -7,8 +7,8 @@ import PersonIcon from '@/material-icons/400-24px/person.svg?react';
|
|||
import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react';
|
||||
|
||||
|
||||
export const Badge = ({ icon, label, domain }) => (
|
||||
<div className='account-role'>
|
||||
export const Badge = ({ icon, label, domain, roleId }) => (
|
||||
<div className='account-role' data-account-role-id={roleId}>
|
||||
{icon}
|
||||
{label}
|
||||
{domain && <span className='account-role__domain'>{domain}</span>}
|
||||
|
@ -19,6 +19,7 @@ Badge.propTypes = {
|
|||
icon: PropTypes.node,
|
||||
label: PropTypes.node,
|
||||
domain: PropTypes.node,
|
||||
roleId: PropTypes.string
|
||||
};
|
||||
|
||||
Badge.defaultProps = {
|
||||
|
|
|
@ -13,7 +13,7 @@ import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'
|
|||
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
|
||||
import SettingsIcon from '@/material-icons/400-24px/settings.svg?react';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context';
|
||||
import { ButtonInTabsBar } from 'mastodon/features/ui/util/columns_context';
|
||||
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
||||
|
||||
import { useAppHistory } from './router';
|
||||
|
@ -26,10 +26,9 @@ const messages = defineMessages({
|
|||
back: { id: 'column_back_button.label', defaultMessage: 'Back' },
|
||||
});
|
||||
|
||||
const BackButton = ({ pinned, show, onlyIcon }) => {
|
||||
const BackButton = ({ onlyIcon }) => {
|
||||
const history = useAppHistory();
|
||||
const intl = useIntl();
|
||||
const { multiColumn } = useColumnsContext();
|
||||
|
||||
const handleBackClick = useCallback(() => {
|
||||
if (history.location?.state?.fromMastodon) {
|
||||
|
@ -39,10 +38,6 @@ const BackButton = ({ pinned, show, onlyIcon }) => {
|
|||
}
|
||||
}, [history]);
|
||||
|
||||
const showButton = history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || show);
|
||||
|
||||
if (!showButton) return null;
|
||||
|
||||
return (
|
||||
<button onClick={handleBackClick} className={classNames('column-header__back-button', { 'compact': onlyIcon })} aria-label={intl.formatMessage(messages.back)}>
|
||||
<Icon id='chevron-left' icon={ArrowBackIcon} className='column-back-button__icon' />
|
||||
|
@ -52,8 +47,6 @@ const BackButton = ({ pinned, show, onlyIcon }) => {
|
|||
};
|
||||
|
||||
BackButton.propTypes = {
|
||||
pinned: PropTypes.bool,
|
||||
show: PropTypes.bool,
|
||||
onlyIcon: PropTypes.bool,
|
||||
};
|
||||
|
||||
|
@ -118,7 +111,7 @@ class ColumnHeader extends PureComponent {
|
|||
};
|
||||
|
||||
render () {
|
||||
const { title, icon, iconComponent, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent, collapseIssues } = this.props;
|
||||
const { title, icon, iconComponent, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent, collapseIssues, history } = this.props;
|
||||
const { collapsed, animating } = this.state;
|
||||
|
||||
const wrapperClassName = classNames('column-header__wrapper', {
|
||||
|
@ -161,7 +154,9 @@ class ColumnHeader extends PureComponent {
|
|||
pinButton = <button className='text-btn column-header__setting-btn' onClick={this.handlePin}><Icon id='plus' icon={AddIcon} /> <FormattedMessage id='column_header.pin' defaultMessage='Pin' /></button>;
|
||||
}
|
||||
|
||||
backButton = <BackButton pinned={pinned} show={showBackButton} onlyIcon={!!title} />;
|
||||
if (history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || showBackButton)) {
|
||||
backButton = <BackButton onlyIcon={!!title} />;
|
||||
}
|
||||
|
||||
const collapsedContent = [
|
||||
extraContent,
|
||||
|
@ -199,16 +194,16 @@ class ColumnHeader extends PureComponent {
|
|||
<h1 className={buttonClassName}>
|
||||
{hasTitle && (
|
||||
<>
|
||||
{showBackButton && backButton}
|
||||
{backButton}
|
||||
|
||||
<button onClick={this.handleTitleClick} className='column-header__title'>
|
||||
{!showBackButton && <Icon id={icon} icon={iconComponent} className='column-header__icon' />}
|
||||
{!backButton && <Icon id={icon} icon={iconComponent} className='column-header__icon' />}
|
||||
{title}
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
|
||||
{!hasTitle && showBackButton && backButton}
|
||||
{!hasTitle && backButton}
|
||||
|
||||
<div className='column-header__buttons'>
|
||||
{extraButton}
|
||||
|
|
|
@ -13,7 +13,6 @@ import {
|
|||
import { openModal } from '../actions/modal';
|
||||
import { initMuteModal } from '../actions/mutes';
|
||||
import Account from '../components/account';
|
||||
import { unfollowModal } from '../initial_state';
|
||||
import { makeGetAccount } from '../selectors';
|
||||
|
||||
const messages = defineMessages({
|
||||
|
@ -34,18 +33,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
|||
|
||||
onFollow (account) {
|
||||
if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id')));
|
||||
}
|
||||
|
|
|
@ -408,7 +408,7 @@ class Header extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
account.get('roles', []).forEach((role) => {
|
||||
badges.push(<Badge key={`role-badge-${role.get('id')}`} label={<span>{role.get('name')}</span>} domain={domain} />);
|
||||
badges.push(<Badge key={`role-badge-${role.get('id')}`} label={<span>{role.get('name')}</span>} domain={domain} roleId={role.get('id')} />);
|
||||
});
|
||||
|
||||
return (
|
||||
|
|
|
@ -21,7 +21,6 @@ import { initDomainBlockModal, unblockDomain } from '../../../actions/domain_blo
|
|||
import { openModal } from '../../../actions/modal';
|
||||
import { initMuteModal } from '../../../actions/mutes';
|
||||
import { initReport } from '../../../actions/reports';
|
||||
import { unfollowModal } from '../../../initial_state';
|
||||
import { makeGetAccount, getAccountHidden } from '../../../selectors';
|
||||
import Header from '../components/header';
|
||||
|
||||
|
@ -47,31 +46,23 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
|||
|
||||
onFollow (account) {
|
||||
if (account.getIn(['relationship', 'following'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else if (account.getIn(['relationship', 'requested'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.cancel_follow_request.message' defaultMessage='Are you sure you want to withdraw your request to follow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.cancelFollowRequestConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.cancel_follow_request.message' defaultMessage='Are you sure you want to withdraw your request to follow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.cancelFollowRequestConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id')));
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ import PollButtonContainer from '../containers/poll_button_container';
|
|||
import PrivacyDropdownContainer from '../containers/privacy_dropdown_container';
|
||||
import SpoilerButtonContainer from '../containers/spoiler_button_container';
|
||||
import UploadButtonContainer from '../containers/upload_button_container';
|
||||
import UploadFormContainer from '../containers/upload_form_container';
|
||||
import WarningContainer from '../containers/warning_container';
|
||||
import { countableText } from '../util/counter';
|
||||
|
||||
|
@ -30,6 +29,7 @@ import { EditIndicator } from './edit_indicator';
|
|||
import { NavigationBar } from './navigation_bar';
|
||||
import { PollForm } from "./poll_form";
|
||||
import { ReplyIndicator } from './reply_indicator';
|
||||
import { UploadForm } from './upload_form';
|
||||
|
||||
const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\u0009\u000a\u000b\u000c\u000d';
|
||||
|
||||
|
@ -283,7 +283,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
/>
|
||||
</div>
|
||||
|
||||
<UploadFormContainer />
|
||||
<UploadForm />
|
||||
<PollForm />
|
||||
|
||||
<div className='compose-form__footer'>
|
||||
|
|
|
@ -330,6 +330,7 @@ class EmojiPickerDropdown extends PureComponent {
|
|||
state = {
|
||||
active: false,
|
||||
loading: false,
|
||||
placement: 'bottom',
|
||||
};
|
||||
|
||||
setRef = (c) => {
|
||||
|
@ -381,10 +382,14 @@ class EmojiPickerDropdown extends PureComponent {
|
|||
return this.target;
|
||||
};
|
||||
|
||||
handleOverlayEnter = (state) => {
|
||||
this.setState({ placement: state.placement });
|
||||
};
|
||||
|
||||
render () {
|
||||
const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props;
|
||||
const title = intl.formatMessage(messages.emoji);
|
||||
const { active, loading } = this.state;
|
||||
const { active, loading, placement } = this.state;
|
||||
|
||||
return (
|
||||
<div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown} ref={this.setTargetRef}>
|
||||
|
@ -397,7 +402,7 @@ class EmojiPickerDropdown extends PureComponent {
|
|||
inverted
|
||||
/>
|
||||
|
||||
<Overlay show={active} placement={'bottom'} target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
|
||||
<Overlay show={active} placement={placement} flip target={this.findTarget} popperConfig={{ strategy: 'fixed', onFirstUpdate: this.handleOverlayEnter }}>
|
||||
{({ props, placement })=> (
|
||||
<div {...props} style={{ ...props.style }}>
|
||||
<div className={`dropdown-animation ${placement}`}>
|
||||
|
|
|
@ -1,77 +1,81 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
|
||||
import spring from 'react-motion/lib/spring';
|
||||
|
||||
import CloseIcon from '@/material-icons/400-20px/close.svg?react';
|
||||
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
|
||||
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
|
||||
import { undoUploadCompose, initMediaEditModal } from 'mastodon/actions/compose';
|
||||
import { Blurhash } from 'mastodon/components/blurhash';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import Motion from 'mastodon/features/ui/util/optional_motion';
|
||||
|
||||
import Motion from '../../ui/util/optional_motion';
|
||||
export const Upload = ({ id, onDragStart, onDragEnter, onDragEnd }) => {
|
||||
const dispatch = useDispatch();
|
||||
const media = useSelector(state => state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id));
|
||||
const sensitive = useSelector(state => state.getIn(['compose', 'spoiler']));
|
||||
|
||||
export default class Upload extends ImmutablePureComponent {
|
||||
const handleUndoClick = useCallback(() => {
|
||||
dispatch(undoUploadCompose(id));
|
||||
}, [dispatch, id]);
|
||||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
sensitive: PropTypes.bool,
|
||||
onUndo: PropTypes.func.isRequired,
|
||||
onOpenFocalPoint: PropTypes.func.isRequired,
|
||||
};
|
||||
const handleFocalPointClick = useCallback(() => {
|
||||
dispatch(initMediaEditModal(id));
|
||||
}, [dispatch, id]);
|
||||
|
||||
handleUndoClick = e => {
|
||||
e.stopPropagation();
|
||||
this.props.onUndo(this.props.media.get('id'));
|
||||
};
|
||||
const handleDragStart = useCallback(() => {
|
||||
onDragStart(id);
|
||||
}, [onDragStart, id]);
|
||||
|
||||
handleFocalPointClick = e => {
|
||||
e.stopPropagation();
|
||||
this.props.onOpenFocalPoint(this.props.media.get('id'));
|
||||
};
|
||||
const handleDragEnter = useCallback(() => {
|
||||
onDragEnter(id);
|
||||
}, [onDragEnter, id]);
|
||||
|
||||
render () {
|
||||
const { media, sensitive } = this.props;
|
||||
|
||||
if (!media) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const x = ((focusX / 2) + .5) * 100;
|
||||
const y = ((focusY / -2) + .5) * 100;
|
||||
const missingDescription = (media.get('description') || '').length === 0;
|
||||
|
||||
return (
|
||||
<div className='compose-form__upload'>
|
||||
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
|
||||
{({ scale }) => (
|
||||
<div className='compose-form__upload__thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: !sensitive ? `url(${media.get('preview_url')})` : null, backgroundPosition: `${x}% ${y}%` }}>
|
||||
{sensitive && <Blurhash
|
||||
hash={media.get('blurhash')}
|
||||
className='compose-form__upload__preview'
|
||||
/>}
|
||||
|
||||
<div className='compose-form__upload__actions'>
|
||||
<button type='button' className='icon-button compose-form__upload__delete' onClick={this.handleUndoClick}><Icon icon={CloseIcon} /></button>
|
||||
<button type='button' className='icon-button' onClick={this.handleFocalPointClick}><Icon icon={EditIcon} /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
|
||||
</div>
|
||||
|
||||
<div className='compose-form__upload__warning'>
|
||||
<button type='button' className={classNames('icon-button', { active: missingDescription })} onClick={this.handleFocalPointClick}>{missingDescription && <Icon icon={WarningIcon} />} ALT</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Motion>
|
||||
</div>
|
||||
);
|
||||
if (!media) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
const focusX = media.getIn(['meta', 'focus', 'x']);
|
||||
const focusY = media.getIn(['meta', 'focus', 'y']);
|
||||
const x = ((focusX / 2) + .5) * 100;
|
||||
const y = ((focusY / -2) + .5) * 100;
|
||||
const missingDescription = (media.get('description') || '').length === 0;
|
||||
|
||||
return (
|
||||
<div className='compose-form__upload' draggable onDragStart={handleDragStart} onDragEnter={handleDragEnter} onDragEnd={onDragEnd}>
|
||||
<Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>
|
||||
{({ scale }) => (
|
||||
<div className='compose-form__upload__thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: !sensitive ? `url(${media.get('preview_url')})` : null, backgroundPosition: `${x}% ${y}%` }}>
|
||||
{sensitive && <Blurhash
|
||||
hash={media.get('blurhash')}
|
||||
className='compose-form__upload__preview'
|
||||
/>}
|
||||
|
||||
<div className='compose-form__upload__actions'>
|
||||
<button type='button' className='icon-button compose-form__upload__delete' onClick={handleUndoClick}><Icon icon={CloseIcon} /></button>
|
||||
<button type='button' className='icon-button' onClick={handleFocalPointClick}><Icon icon={EditIcon} /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>
|
||||
</div>
|
||||
|
||||
<div className='compose-form__upload__warning'>
|
||||
<button type='button' className={classNames('icon-button', { active: missingDescription })} onClick={handleFocalPointClick}>{missingDescription && <Icon icon={WarningIcon} />} ALT</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Motion>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Upload.propTypes = {
|
||||
id: PropTypes.string,
|
||||
onDragEnter: PropTypes.func,
|
||||
onDragStart: PropTypes.func,
|
||||
onDragEnd: PropTypes.func,
|
||||
};
|
||||
|
|
|
@ -1,31 +1,53 @@
|
|||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { useRef, useCallback } from 'react';
|
||||
|
||||
import UploadContainer from '../containers/upload_container';
|
||||
import UploadProgressContainer from '../containers/upload_progress_container';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
|
||||
export default class UploadForm extends ImmutablePureComponent {
|
||||
import { changeMediaOrder } from 'mastodon/actions/compose';
|
||||
|
||||
static propTypes = {
|
||||
mediaIds: ImmutablePropTypes.list.isRequired,
|
||||
};
|
||||
import { Upload } from './upload';
|
||||
import { UploadProgress } from './upload_progress';
|
||||
|
||||
render () {
|
||||
const { mediaIds } = this.props;
|
||||
export const UploadForm = () => {
|
||||
const dispatch = useDispatch();
|
||||
const mediaIds = useSelector(state => state.getIn(['compose', 'media_attachments']).map(item => item.get('id')));
|
||||
const active = useSelector(state => state.getIn(['compose', 'is_uploading']));
|
||||
const progress = useSelector(state => state.getIn(['compose', 'progress']));
|
||||
const isProcessing = useSelector(state => state.getIn(['compose', 'is_processing']));
|
||||
|
||||
return (
|
||||
<>
|
||||
<UploadProgressContainer />
|
||||
const dragItem = useRef();
|
||||
const dragOverItem = useRef();
|
||||
|
||||
{mediaIds.size > 0 && (
|
||||
<div className='compose-form__uploads'>
|
||||
{mediaIds.map(id => (
|
||||
<UploadContainer id={id} key={id} />
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
const handleDragStart = useCallback(id => {
|
||||
dragItem.current = id;
|
||||
}, [dragItem]);
|
||||
|
||||
}
|
||||
const handleDragEnter = useCallback(id => {
|
||||
dragOverItem.current = id;
|
||||
}, [dragOverItem]);
|
||||
|
||||
const handleDragEnd = useCallback(() => {
|
||||
dispatch(changeMediaOrder(dragItem.current, dragOverItem.current));
|
||||
dragItem.current = null;
|
||||
dragOverItem.current = null;
|
||||
}, [dispatch, dragItem, dragOverItem]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<UploadProgress active={active} progress={progress} isProcessing={isProcessing} />
|
||||
|
||||
{mediaIds.size > 0 && (
|
||||
<div className='compose-form__uploads'>
|
||||
{mediaIds.map(id => (
|
||||
<Upload
|
||||
key={id}
|
||||
id={id}
|
||||
onDragStart={handleDragStart}
|
||||
onDragEnter={handleDragEnter}
|
||||
onDragEnd={handleDragEnd}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import { PureComponent } from 'react';
|
||||
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
|
@ -10,46 +9,40 @@ import { Icon } from 'mastodon/components/icon';
|
|||
|
||||
import Motion from '../../ui/util/optional_motion';
|
||||
|
||||
export default class UploadProgress extends PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
active: PropTypes.bool,
|
||||
progress: PropTypes.number,
|
||||
isProcessing: PropTypes.bool,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { active, progress, isProcessing } = this.props;
|
||||
|
||||
if (!active) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let message;
|
||||
|
||||
if (isProcessing) {
|
||||
message = <FormattedMessage id='upload_progress.processing' defaultMessage='Processing…' />;
|
||||
} else {
|
||||
message = <FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='upload-progress'>
|
||||
<Icon id='upload' icon={UploadFileIcon} />
|
||||
|
||||
<div className='upload-progress__message'>
|
||||
{message}
|
||||
|
||||
<div className='upload-progress__backdrop'>
|
||||
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>
|
||||
{({ width }) =>
|
||||
<div className='upload-progress__tracker' style={{ width: `${width}%` }} />
|
||||
}
|
||||
</Motion>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
export const UploadProgress = ({ active, progress, isProcessing }) => {
|
||||
if (!active) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
let message;
|
||||
|
||||
if (isProcessing) {
|
||||
message = <FormattedMessage id='upload_progress.processing' defaultMessage='Processing…' />;
|
||||
} else {
|
||||
message = <FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='upload-progress'>
|
||||
<Icon id='upload' icon={UploadFileIcon} />
|
||||
|
||||
<div className='upload-progress__message'>
|
||||
{message}
|
||||
|
||||
<div className='upload-progress__backdrop'>
|
||||
<Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}>
|
||||
{({ width }) =>
|
||||
<div className='upload-progress__tracker' style={{ width: `${width}%` }} />
|
||||
}
|
||||
</Motion>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
UploadProgress.propTypes = {
|
||||
active: PropTypes.bool,
|
||||
progress: PropTypes.number,
|
||||
isProcessing: PropTypes.bool,
|
||||
};
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
import { connect } from 'react-redux';
|
||||
|
||||
import { undoUploadCompose, initMediaEditModal, submitCompose } from '../../../actions/compose';
|
||||
import Upload from '../components/upload';
|
||||
|
||||
const mapStateToProps = (state, { id }) => ({
|
||||
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
|
||||
sensitive: state.getIn(['compose', 'spoiler']),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
||||
onUndo: id => {
|
||||
dispatch(undoUploadCompose(id));
|
||||
},
|
||||
|
||||
onOpenFocalPoint: id => {
|
||||
dispatch(initMediaEditModal(id));
|
||||
},
|
||||
|
||||
onSubmit (router) {
|
||||
dispatch(submitCompose(router));
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(Upload);
|
|
@ -1,9 +0,0 @@
|
|||
import { connect } from 'react-redux';
|
||||
|
||||
import UploadForm from '../components/upload_form';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')),
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(UploadForm);
|
|
@ -1,11 +0,0 @@
|
|||
import { connect } from 'react-redux';
|
||||
|
||||
import UploadProgress from '../components/upload_progress';
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
active: state.getIn(['compose', 'is_uploading']),
|
||||
progress: state.getIn(['compose', 'progress']),
|
||||
isProcessing: state.getIn(['compose', 'is_processing']),
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(UploadProgress);
|
|
@ -20,7 +20,7 @@ import { Avatar } from 'mastodon/components/avatar';
|
|||
import { Button } from 'mastodon/components/button';
|
||||
import { DisplayName } from 'mastodon/components/display_name';
|
||||
import { ShortNumber } from 'mastodon/components/short_number';
|
||||
import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state';
|
||||
import { autoPlayGif, me } from 'mastodon/initial_state';
|
||||
import { makeGetAccount } from 'mastodon/selectors';
|
||||
|
||||
const messages = defineMessages({
|
||||
|
@ -48,38 +48,30 @@ const makeMapStateToProps = () => {
|
|||
const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||
onFollow(account) {
|
||||
if (account.getIn(['relationship', 'following'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(
|
||||
openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: (
|
||||
<FormattedMessage
|
||||
id='confirmations.unfollow.message'
|
||||
defaultMessage='Are you sure you want to unfollow {name}?'
|
||||
values={{ name: <strong>@{account.get('acct')}</strong> }}
|
||||
/>
|
||||
),
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
} }),
|
||||
);
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
} else if (account.getIn(['relationship', 'requested'])) {
|
||||
if (unfollowModal) {
|
||||
dispatch(openModal({
|
||||
dispatch(
|
||||
openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.cancel_follow_request.message' defaultMessage='Are you sure you want to withdraw your request to follow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.cancelFollowRequestConfirm),
|
||||
message: (
|
||||
<FormattedMessage
|
||||
id='confirmations.unfollow.message'
|
||||
defaultMessage='Are you sure you want to unfollow {name}?'
|
||||
values={{ name: <strong>@{account.get('acct')}</strong> }}
|
||||
/>
|
||||
),
|
||||
confirm: intl.formatMessage(messages.unfollowConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(unfollowAccount(account.get('id')));
|
||||
}
|
||||
} }),
|
||||
);
|
||||
} else if (account.getIn(['relationship', 'requested'])) {
|
||||
dispatch(openModal({
|
||||
modalType: 'CONFIRM',
|
||||
modalProps: {
|
||||
message: <FormattedMessage id='confirmations.cancel_follow_request.message' defaultMessage='Are you sure you want to withdraw your request to follow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />,
|
||||
confirm: intl.formatMessage(messages.cancelFollowRequestConfirm),
|
||||
onConfirm: () => dispatch(unfollowAccount(account.get('id'))),
|
||||
},
|
||||
}));
|
||||
} else {
|
||||
dispatch(followAccount(account.get('id')));
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ class FollowRequests extends ImmutablePureComponent {
|
|||
);
|
||||
|
||||
return (
|
||||
<Column bindToDocument={!multiColumn} icon='user-plus' iconComponent={PersonAddIcon} heading={intl.formatMessage(messages.heading)} alwaysShowBackButton>
|
||||
<Column bindToDocument={!multiColumn} icon='user-plus' iconComponent={PersonAddIcon} heading={intl.formatMessage(messages.heading)}>
|
||||
<ScrollableList
|
||||
scrollKey='follow_requests'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
|
|
|
@ -54,6 +54,7 @@ export default class ColumnSettings extends PureComponent {
|
|||
render () {
|
||||
const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission, notificationPolicy } = this.props;
|
||||
|
||||
const filterAdvancedStr = <FormattedMessage id='notifications.column_settings.filter_bar.advanced' defaultMessage='Display all categories' />;
|
||||
const unreadMarkersShowStr = <FormattedMessage id='notifications.column_settings.unread_notifications.highlight' defaultMessage='Highlight unread notifications' />;
|
||||
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />;
|
||||
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />;
|
||||
|
@ -68,16 +69,18 @@ export default class ColumnSettings extends PureComponent {
|
|||
<span className='warning-hint'><FormattedMessage id='notifications.permission_denied' defaultMessage='Desktop notifications are unavailable due to previously denied browser permissions request' /></span>
|
||||
)}
|
||||
|
||||
{alertsEnabled && browserSupport && browserPermission === 'default' && (
|
||||
<span className='warning-hint'>
|
||||
<FormattedMessage id='notifications.permission_required' defaultMessage='Desktop notifications are unavailable because the required permission has not been granted.' /> <GrantPermissionButton onClick={onRequestNotificationPermission} />
|
||||
</span>
|
||||
)}
|
||||
|
||||
<section>
|
||||
<ClearColumnButton onClick={onClear} />
|
||||
</section>
|
||||
|
||||
{alertsEnabled && browserSupport && browserPermission === 'default' && (
|
||||
<section>
|
||||
<span className='warning-hint'>
|
||||
<FormattedMessage id='notifications.permission_required' defaultMessage='Desktop notifications are unavailable because the required permission has not been granted.' /> <GrantPermissionButton onClick={onRequestNotificationPermission} />
|
||||
</span>
|
||||
</section>
|
||||
)}
|
||||
|
||||
<section>
|
||||
<h3><FormattedMessage id='notifications.policy.title' defaultMessage='Filter out notifications from…' /></h3>
|
||||
|
||||
|
@ -114,6 +117,16 @@ export default class ColumnSettings extends PureComponent {
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<section role='group' aria-labelledby='notifications-filter-bar'>
|
||||
<h3 id='notifications-filter-bar'>
|
||||
<FormattedMessage id='notifications.column_settings.filter_bar.category' defaultMessage='Quick filter bar' />
|
||||
</h3>
|
||||
|
||||
<div className='column-settings__row'>
|
||||
<SettingToggle id='advanced-filter-bar' prefix='notifications' settings={settings} settingPath={['quickFilter', 'advanced']} onChange={onChange} label={filterAdvancedStr} />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section role='group' aria-labelledby='notifications-follow'>
|
||||
<h3 id='notifications-follow'><FormattedMessage id='notifications.column_settings.follow' defaultMessage='New followers:' /></h3>
|
||||
|
||||
|
|
|
@ -6,8 +6,7 @@ import { Link } from 'react-router-dom';
|
|||
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
|
||||
|
||||
import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react';
|
||||
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
|
||||
import { fetchNotificationPolicy } from 'mastodon/actions/notifications';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import { toCappedNumber } from 'mastodon/utils/numbers';
|
||||
|
@ -34,7 +33,7 @@ export const FilteredNotificationsBanner = () => {
|
|||
|
||||
return (
|
||||
<Link className='filtered-notifications-banner' to='/notifications/requests'>
|
||||
<Icon icon={ArchiveIcon} />
|
||||
<Icon icon={InventoryIcon} />
|
||||
|
||||
<div className='filtered-notifications-banner__text'>
|
||||
<strong><FormattedMessage id='filtered_notifications_banner.title' defaultMessage='Filtered notifications' /></strong>
|
||||
|
|
|
@ -12,6 +12,7 @@ import { HotKeys } from 'react-hotkeys';
|
|||
|
||||
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
|
||||
import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react';
|
||||
import HeartBrokenIcon from '@/material-icons/400-24px/heart_broken-fill.svg?react';
|
||||
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
||||
import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react';
|
||||
import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react';
|
||||
|
@ -26,6 +27,7 @@ import { WithRouterPropTypes } from 'mastodon/utils/react_router';
|
|||
|
||||
import FollowRequestContainer from '../containers/follow_request_container';
|
||||
|
||||
import RelationshipsSeveranceEvent from './relationships_severance_event';
|
||||
import Report from './report';
|
||||
|
||||
const messages = defineMessages({
|
||||
|
@ -358,6 +360,30 @@ class Notification extends ImmutablePureComponent {
|
|||
);
|
||||
}
|
||||
|
||||
renderRelationshipsSevered (notification) {
|
||||
const { intl, unread } = this.props;
|
||||
|
||||
if (!notification.get('event')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<HotKeys handlers={this.getHandlers()}>
|
||||
<div className={classNames('notification notification-severed-relationships focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.adminReport, { name: notification.getIn(['event', 'target_name']) }), notification.get('created_at'))}>
|
||||
<div className='notification__message'>
|
||||
<Icon id='heart_broken' icon={HeartBrokenIcon} />
|
||||
|
||||
<span title={notification.get('created_at')}>
|
||||
<FormattedMessage id='notification.severed_relationships' defaultMessage='Relationships with {name} severed' values={{ name: notification.getIn(['event', 'target_name']) }} />
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<RelationshipsSeveranceEvent event={notification.get('event')} />
|
||||
</div>
|
||||
</HotKeys>
|
||||
);
|
||||
}
|
||||
|
||||
renderAdminSignUp (notification, account, link) {
|
||||
const { intl, unread } = this.props;
|
||||
|
||||
|
@ -429,6 +455,8 @@ class Notification extends ImmutablePureComponent {
|
|||
return this.renderUpdate(notification, link);
|
||||
case 'poll':
|
||||
return this.renderPoll(notification, account);
|
||||
case 'severed_relationships':
|
||||
return this.renderRelationshipsSevered(notification);
|
||||
case 'admin.sign_up':
|
||||
return this.renderAdminSignUp(notification, account, link);
|
||||
case 'admin.report':
|
||||
|
|
|
@ -5,8 +5,8 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|||
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import SettingsIcon from '@/material-icons/400-20px/settings.svg?react';
|
||||
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
|
||||
import TuneIcon from '@/material-icons/400-24px/tune.svg?react';
|
||||
import { requestBrowserPermission } from 'mastodon/actions/notifications';
|
||||
import { changeSetting } from 'mastodon/actions/settings';
|
||||
import { Button } from 'mastodon/components/button';
|
||||
|
@ -42,7 +42,7 @@ class NotificationsPermissionBanner extends PureComponent {
|
|||
</div>
|
||||
|
||||
<h2><FormattedMessage id='notifications_permission_banner.title' defaultMessage='Never miss a thing' /></h2>
|
||||
<p><FormattedMessage id='notifications_permission_banner.how_to_control' defaultMessage="To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled." values={{ icon: <Icon id='sliders' icon={TuneIcon} /> }} /></p>
|
||||
<p><FormattedMessage id='notifications_permission_banner.how_to_control' defaultMessage="To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled." values={{ icon: <Icon id='sliders' icon={SettingsIcon} /> }} /></p>
|
||||
<Button onClick={this.handleClick}><FormattedMessage id='notifications_permission_banner.enable' defaultMessage='Enable desktop notifications' /></Button>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
import PropTypes from 'prop-types';
|
||||
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
|
||||
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
|
||||
|
||||
// This needs to be kept in sync with app/models/relationship_severance_event.rb
|
||||
const messages = defineMessages({
|
||||
account_suspension: { id: 'relationship_severance_notification.types.account_suspension', defaultMessage: 'Account has been suspended' },
|
||||
domain_block: { id: 'relationship_severance_notification.types.domain_block', defaultMessage: 'Domain has been suspended' },
|
||||
user_domain_block: { id: 'relationship_severance_notification.types.user_domain_block', defaultMessage: 'You blocked this domain' },
|
||||
});
|
||||
|
||||
const RelationshipsSeveranceEvent = ({ event, hidden }) => {
|
||||
const intl = useIntl();
|
||||
|
||||
if (hidden || !event) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='notification__report'>
|
||||
<div className='notification__report__details'>
|
||||
<div>
|
||||
<RelativeTimestamp timestamp={event.get('created_at')} short={false} />
|
||||
{' · '}
|
||||
{ event.get('purged') ? (
|
||||
<FormattedMessage
|
||||
id='relationship_severance_notification.purged_data'
|
||||
defaultMessage='purged by administrators'
|
||||
/>
|
||||
) : (
|
||||
<FormattedMessage
|
||||
id='relationship_severance_notification.relationships'
|
||||
defaultMessage='{count, plural, one {# relationship} other {# relationships}}'
|
||||
values={{ count: event.get('followers_count', 0) + event.get('following_count', 0) }}
|
||||
/>
|
||||
)}
|
||||
<br />
|
||||
<strong>{intl.formatMessage(messages[event.get('type')])}</strong>
|
||||
</div>
|
||||
|
||||
<div className='notification__report__actions'>
|
||||
<a href='/severed_relationships' className='button' target='_blank' rel='noopener noreferrer'>
|
||||
<FormattedMessage id='relationship_severance_notification.view' defaultMessage='View' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
RelationshipsSeveranceEvent.propTypes = {
|
||||
event: ImmutablePropTypes.map.isRequired,
|
||||
hidden: PropTypes.bool,
|
||||
};
|
||||
|
||||
export default RelationshipsSeveranceEvent;
|
|
@ -5,7 +5,7 @@ import FilterBar from '../components/filter_bar';
|
|||
|
||||
const makeMapStateToProps = state => ({
|
||||
selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']),
|
||||
advancedMode: false,
|
||||
advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = (dispatch) => ({
|
||||
|
|
|
@ -7,8 +7,8 @@ import { Helmet } from 'react-helmet';
|
|||
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
|
||||
import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react';
|
||||
import DoneIcon from '@/material-icons/400-24px/done.svg?react';
|
||||
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
|
||||
import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react';
|
||||
import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications';
|
||||
import Column from 'mastodon/components/column';
|
||||
|
@ -94,7 +94,7 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => {
|
|||
<Column bindToDocument={!multiColumn} ref={columnRef} label={columnTitle}>
|
||||
<ColumnHeader
|
||||
icon='archive'
|
||||
iconComponent={ArchiveIcon}
|
||||
iconComponent={InventoryIcon}
|
||||
title={columnTitle}
|
||||
onClick={handleHeaderClick}
|
||||
multiColumn={multiColumn}
|
||||
|
|
|
@ -7,7 +7,7 @@ import { Helmet } from 'react-helmet';
|
|||
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
|
||||
import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react';
|
||||
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
|
||||
import { fetchNotificationRequests, expandNotificationRequests } from 'mastodon/actions/notifications';
|
||||
import Column from 'mastodon/components/column';
|
||||
import ColumnHeader from 'mastodon/components/column_header';
|
||||
|
@ -43,7 +43,7 @@ export const NotificationRequests = ({ multiColumn }) => {
|
|||
<Column bindToDocument={!multiColumn} ref={columnRef} label={intl.formatMessage(messages.title)}>
|
||||
<ColumnHeader
|
||||
icon='archive'
|
||||
iconComponent={ArchiveIcon}
|
||||
iconComponent={InventoryIcon}
|
||||
title={intl.formatMessage(messages.title)}
|
||||
onClick={handleHeaderClick}
|
||||
multiColumn={multiColumn}
|
||||
|
|
|
@ -22,7 +22,7 @@ import { GIFV } from 'mastodon/components/gifv';
|
|||
import { IconButton } from 'mastodon/components/icon_button';
|
||||
import Audio from 'mastodon/features/audio';
|
||||
import { CharacterCounter } from 'mastodon/features/compose/components/character_counter';
|
||||
import UploadProgress from 'mastodon/features/compose/components/upload_progress';
|
||||
import { UploadProgress } from 'mastodon/features/compose/components/upload_progress';
|
||||
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
import { assetHost } from 'mastodon/utils/config';
|
||||
|
|
|
@ -11,6 +11,7 @@ import { useSelector, useDispatch } from 'react-redux';
|
|||
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
||||
import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
||||
import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';
|
||||
import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';
|
||||
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
|
||||
import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
||||
import HomeIcon from '@/material-icons/400-24px/home.svg?react';
|
||||
|
@ -147,7 +148,7 @@ class NavigationPanel extends Component {
|
|||
)}
|
||||
|
||||
{trendsEnabled ? (
|
||||
<ColumnLink transparent to='/explore' icon='explore' iconComponent={ExploreIcon} text={intl.formatMessage(messages.explore)} />
|
||||
<ColumnLink transparent to='/explore' icon='explore' iconComponent={ExploreIcon} activeIconComponent={ExploreActiveIcon} text={intl.formatMessage(messages.explore)} />
|
||||
) : (
|
||||
<ColumnLink transparent to='/search' icon='search' iconComponent={SearchIcon} text={intl.formatMessage(messages.search)} />
|
||||
)}
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
* @property {string} title
|
||||
* @property {boolean} show_trends
|
||||
* @property {boolean} trends_as_landing_page
|
||||
* @property {boolean} unfollow_modal
|
||||
* @property {boolean} use_blurhash
|
||||
* @property {boolean=} use_pending_items
|
||||
* @property {string} version
|
||||
|
@ -99,7 +98,6 @@ export const source_url = getMeta('source_url');
|
|||
export const timelinePreview = getMeta('timeline_preview');
|
||||
export const title = getMeta('title');
|
||||
export const trendsAsLanding = getMeta('trends_as_landing_page');
|
||||
export const unfollowModal = getMeta('unfollow_modal');
|
||||
export const useBlurhash = getMeta('use_blurhash');
|
||||
export const usePendingItems = getMeta('use_pending_items');
|
||||
export const version = getMeta('version');
|
||||
|
|
|
@ -434,7 +434,7 @@
|
|||
"mute_modal.they_can_mention_and_follow": "Могат да ви споменават и последват, но няма да ги виждате.",
|
||||
"mute_modal.they_wont_know": "Няма да узнаят, че са били заглушени.",
|
||||
"mute_modal.title": "Заглушавате ли потребител?",
|
||||
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващи ги публикации.",
|
||||
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.",
|
||||
"mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.",
|
||||
"navigation_bar.about": "Относно",
|
||||
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
||||
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Анкетата ви приключи",
|
||||
"notification.poll": "Анкета, в която гласувахте, приключи",
|
||||
"notification.reblog": "{name} подсили ваша публикация",
|
||||
"notification.severed_relationships": "Връзката с {name} е прекъсната",
|
||||
"notification.status": "{name} току-що публикува",
|
||||
"notification.update": "{name} промени публикация",
|
||||
"notification_requests.accept": "Приемам",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Опресняване",
|
||||
"regeneration_indicator.label": "Зареждане…",
|
||||
"regeneration_indicator.sublabel": "Подготовка на началния ви инфоканал!",
|
||||
"relationship_severance_notification.purged_data": "прочистено от администраторите",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# връзка} other {# връзки}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Акаунтът е спрян",
|
||||
"relationship_severance_notification.types.domain_block": "Домейнът е спрян",
|
||||
"relationship_severance_notification.types.user_domain_block": "Блокирахте този домейн",
|
||||
"relationship_severance_notification.view": "Преглед",
|
||||
"relative_time.days": "{number} д.",
|
||||
"relative_time.full.days": "преди {number, plural, one {# ден} other {# дни}}",
|
||||
"relative_time.full.hours": "преди {number, plural, one {# час} other {# часа}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "La teva enquesta ha finalitzat",
|
||||
"notification.poll": "Ha finalitzat una enquesta en què has votat",
|
||||
"notification.reblog": "{name} t'ha impulsat",
|
||||
"notification.severed_relationships": "S'han eliminat les relacions amb {name}",
|
||||
"notification.status": "{name} acaba de publicar",
|
||||
"notification.update": "{name} ha editat un tut",
|
||||
"notification_requests.accept": "Accepta",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Actualitza",
|
||||
"regeneration_indicator.label": "Es carrega…",
|
||||
"regeneration_indicator.sublabel": "Es prepara la teva línia de temps d'Inici!",
|
||||
"relationship_severance_notification.purged_data": "purgat pels administradors",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relació} other {# relacions}}",
|
||||
"relationship_severance_notification.types.account_suspension": "S'ha suspès el compte",
|
||||
"relationship_severance_notification.types.domain_block": "S'ha suspès el domini",
|
||||
"relationship_severance_notification.types.user_domain_block": "Heu blocat aquest domini",
|
||||
"relationship_severance_notification.view": "Visualitza",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
|
||||
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
|
||||
|
|
|
@ -585,6 +585,12 @@
|
|||
"refresh": "Genindlæs",
|
||||
"regeneration_indicator.label": "Indlæser…",
|
||||
"regeneration_indicator.sublabel": "Din hjemmetidslinje klargøres!",
|
||||
"relationship_severance_notification.purged_data": "renset af administratorer",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# forhold} other {# forhold}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Konto er blevet suspenderet",
|
||||
"relationship_severance_notification.types.domain_block": "Domæne er blevet suspenderet",
|
||||
"relationship_severance_notification.types.user_domain_block": "Dette domæne blev blokeret",
|
||||
"relationship_severance_notification.view": "Vis",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# dag} other {# dage}} siden",
|
||||
"relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Deine Umfrage ist beendet",
|
||||
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
|
||||
"notification.reblog": "{name} teilte deinen Beitrag",
|
||||
"notification.severed_relationships": "Beziehungen zu {name} getrennt",
|
||||
"notification.status": "{name} hat gerade etwas gepostet",
|
||||
"notification.update": "{name} bearbeitete einen Beitrag",
|
||||
"notification_requests.accept": "Akzeptieren",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Aktualisieren",
|
||||
"regeneration_indicator.label": "Wird geladen …",
|
||||
"regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!",
|
||||
"relationship_severance_notification.purged_data": "von Administrator*innen entfernt",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# Beziehung} other {# Beziehungen}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Konto wurde gesperrt",
|
||||
"relationship_severance_notification.types.domain_block": "Domain wurde gesperrt",
|
||||
"relationship_severance_notification.types.user_domain_block": "Du hast diese Domain blockiert",
|
||||
"relationship_severance_notification.view": "Anzeigen",
|
||||
"relative_time.days": "{number} T.",
|
||||
"relative_time.full.days": "vor {number, plural, one {# Tag} other {# Tagen}}",
|
||||
"relative_time.full.hours": "vor {number, plural, one {# Stunde} other {# Stunden}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} boosted your post",
|
||||
"notification.severed_relationships": "Relationships with {name} severed",
|
||||
"notification.status": "{name} just posted",
|
||||
"notification.update": "{name} edited a post",
|
||||
"notification_requests.accept": "Accept",
|
||||
|
@ -483,6 +484,8 @@
|
|||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
"notifications.column_settings.favourite": "Favorites:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Display all categories",
|
||||
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
||||
"notifications.column_settings.follow": "New followers:",
|
||||
"notifications.column_settings.follow_request": "New follow requests:",
|
||||
"notifications.column_settings.mention": "Mentions:",
|
||||
|
@ -587,6 +590,12 @@
|
|||
"refresh": "Refresh",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"relationship_severance_notification.purged_data": "purged by administrators",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relationship} other {# relationships}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Account has been suspended",
|
||||
"relationship_severance_notification.types.domain_block": "Domain has been suspended",
|
||||
"relationship_severance_notification.types.user_domain_block": "You blocked this domain",
|
||||
"relationship_severance_notification.view": "View",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
||||
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Tu encuesta finalizó",
|
||||
"notification.poll": "Finalizó una encuesta en la que votaste",
|
||||
"notification.reblog": "{name} adhirió a tu mensaje",
|
||||
"notification.severed_relationships": "Relaciones con {name} cortadas",
|
||||
"notification.status": "{name} acaba de enviar un mensaje",
|
||||
"notification.update": "{name} editó un mensaje",
|
||||
"notification_requests.accept": "Aceptar",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Refrescar",
|
||||
"regeneration_indicator.label": "Cargando…",
|
||||
"regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!",
|
||||
"relationship_severance_notification.purged_data": "purgada por administradores",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relación} other {# relaciones}}",
|
||||
"relationship_severance_notification.types.account_suspension": "La cuenta fue suspendida",
|
||||
"relationship_severance_notification.types.domain_block": "El dominio fue suspendido",
|
||||
"relationship_severance_notification.types.user_domain_block": "Bloqueaste este dominio",
|
||||
"relationship_severance_notification.view": "Ver",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural,one {hace # día} other {hace # días}}",
|
||||
"relative_time.full.hours": "{number, plural,one {hace # hora} other {hace # horas}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Zure inkesta amaitu da",
|
||||
"notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
|
||||
"notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari",
|
||||
"notification.severed_relationships": "{name} erabiltzailearekin zenuen erlazioa galdu da",
|
||||
"notification.status": "{name} erabiltzaileak bidalketa egin berri du",
|
||||
"notification.update": "{name} erabiltzaileak bidalketa bat editatu du",
|
||||
"notification_requests.accept": "Onartu",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Berritu",
|
||||
"regeneration_indicator.label": "Kargatzen…",
|
||||
"regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!",
|
||||
"relationship_severance_notification.purged_data": "administratzaileek kendua",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {Erlazio #} other {# erlazio}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Kontua bertan behera utzi da",
|
||||
"relationship_severance_notification.types.domain_block": "Domeinua bertan behera utzi da",
|
||||
"relationship_severance_notification.types.user_domain_block": "Domeinu hau blokeatu duzu",
|
||||
"relationship_severance_notification.view": "Ikusi",
|
||||
"relative_time.days": "{number}e",
|
||||
"relative_time.full.days": "Duela {number, plural, one {egun #} other {# egun}}",
|
||||
"relative_time.full.hours": "Duela {number, plural, one {ordu #} other {# ordu}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Äänestyksesi on päättynyt",
|
||||
"notification.poll": "Kysely, johon osallistuit, on päättynyt",
|
||||
"notification.reblog": "{name} tehosti julkaisuasi",
|
||||
"notification.severed_relationships": "Suhteet palvelimeen {name} katkenneet",
|
||||
"notification.status": "{name} julkaisi juuri",
|
||||
"notification.update": "{name} muokkasi julkaisua",
|
||||
"notification_requests.accept": "Hyväksy",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Päivitä",
|
||||
"regeneration_indicator.label": "Ladataan…",
|
||||
"regeneration_indicator.sublabel": "Kotisyötettäsi valmistellaan!",
|
||||
"relationship_severance_notification.purged_data": "ylläpitäjien tyhjentämä",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# suhde} other {# suhdetta}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Tili on jäädytetty",
|
||||
"relationship_severance_notification.types.domain_block": "Verkkotunnus on jäädytetty",
|
||||
"relationship_severance_notification.types.user_domain_block": "Estit tämän verkkotunnuksen",
|
||||
"relationship_severance_notification.view": "Näytä",
|
||||
"relative_time.days": "{number} pv",
|
||||
"relative_time.full.days": "{number, plural, one {# päivä} other {# päivää}} sitten",
|
||||
"relative_time.full.hours": "{number, plural, one {# tunti} other {# tuntia}} sitten",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"about.domain_blocks.silenced.explanation": "Yvirhøvur, so sært tú ikki vangar og innihald frá hesum ambætaranum, uttan so at tú skilliga leitar hesi upp ella velur tey við at fylgja teimum.",
|
||||
"about.domain_blocks.silenced.title": "Avmarkað",
|
||||
"about.domain_blocks.suspended.explanation": "Ongar dátur frá hesum ambætara verða viðgjørd, goymd ella deild, tað ger, at samskifti við aðrar ambætarar er iki møguligt.",
|
||||
"about.domain_blocks.suspended.title": "Koyrdur frá",
|
||||
"about.domain_blocks.suspended.title": "Gjørt óvirkið",
|
||||
"about.not_available": "Hetta er ikki tøkt á føroyska servaranum enn.",
|
||||
"about.powered_by": "Miðfirra almennur miðil koyrandi á {mastodon}",
|
||||
"about.rules": "Ambætarareglur",
|
||||
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
|
||||
"notification.poll": "Ein atkvøðugreiðsla, har tú hevur atkvøtt, er endað",
|
||||
"notification.reblog": "{name} lyfti tín post",
|
||||
"notification.severed_relationships": "Tilknýti við {name} avbrotið",
|
||||
"notification.status": "{name} hevur júst postað",
|
||||
"notification.update": "{name} rættaði ein post",
|
||||
"notification_requests.accept": "Góðtak",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Endurles",
|
||||
"regeneration_indicator.label": "Innlesur…",
|
||||
"regeneration_indicator.sublabel": "Tín heimarás verður gjørd klár!",
|
||||
"relationship_severance_notification.purged_data": "reinsað av umsitarum",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# tilknýti} other {# tilknýti}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Kontan er ógildað",
|
||||
"relationship_severance_notification.types.domain_block": "Økisnavn er ógildað",
|
||||
"relationship_severance_notification.types.user_domain_block": "Tú hevur forðað hesum økisnavni",
|
||||
"relationship_severance_notification.view": "Vís",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# dagur} other {# dagar}} síðani",
|
||||
"relative_time.full.hours": "{number, plural, one {# tími} other {# tímar}} síðani",
|
||||
|
|
|
@ -89,6 +89,14 @@
|
|||
"announcement.announcement": "Annonce",
|
||||
"attachments_list.unprocessed": "(non traité)",
|
||||
"audio.hide": "Masquer l'audio",
|
||||
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.",
|
||||
"block_modal.show_less": "Afficher moins",
|
||||
"block_modal.show_more": "Afficher plus",
|
||||
"block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.",
|
||||
"block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||
"block_modal.they_will_know": "Il peut voir qu'il est bloqué.",
|
||||
"block_modal.title": "Bloquer l'utilisateur ?",
|
||||
"block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois",
|
||||
"bundle_column_error.copy_stacktrace": "Copier le rapport d'erreur",
|
||||
"bundle_column_error.error.body": "La page demandée n'a pas pu être affichée. Cela pourrait être dû à un bogue dans notre code, ou à un problème de compatibilité avec le navigateur.",
|
||||
|
@ -169,6 +177,7 @@
|
|||
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?",
|
||||
"confirmations.discard_edit_media.confirm": "Rejeter",
|
||||
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, voulez-vous quand même les supprimer?",
|
||||
"confirmations.domain_block.confirm": "Bloquer le serveur",
|
||||
"confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans vos fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.",
|
||||
"confirmations.edit.confirm": "Éditer",
|
||||
"confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?",
|
||||
|
@ -200,6 +209,27 @@
|
|||
"dismissable_banner.explore_statuses": "Voici des publications venant de tout le web social gagnant en popularité aujourd’hui. Les nouvelles publications avec plus de boosts et de favoris sont classés plus haut.",
|
||||
"dismissable_banner.explore_tags": "Ces hashtags sont présentement en train de gagner de l'ampleur parmi des personnes sur les serveurs du réseau décentralisé dont celui-ci.",
|
||||
"dismissable_banner.public_timeline": "Ce sont les messages publics les plus récents de personnes sur le web social que les gens de {domain} suivent.",
|
||||
"domain_block_modal.block": "Bloquer le serveur",
|
||||
"domain_block_modal.block_account_instead": "Bloquer @{name} à la place",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.",
|
||||
"domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.",
|
||||
"domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.",
|
||||
"domain_block_modal.title": "Bloquer le domaine ?",
|
||||
"domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.",
|
||||
"domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.",
|
||||
"domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.",
|
||||
"domain_pill.server": "Serveur",
|
||||
"domain_pill.their_handle": "Son identifiant :",
|
||||
"domain_pill.their_server": "Son foyer numérique, là où tous ses posts résident.",
|
||||
"domain_pill.their_username": "Son identifiant unique sur leur serveur. Il est possible de rencontrer des utilisateurs avec le même nom sur différents serveurs.",
|
||||
"domain_pill.username": "Nom d’utilisateur",
|
||||
"domain_pill.whats_in_a_handle": "Qu'est-ce qu'un identifiant ?",
|
||||
"domain_pill.who_they_are": "Comme un identifiant contient le nom et le service hébergeant une personne, vous pouvez interagir sur <button>les plateformes sociales implémentant ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Comme un identifiant indique votre nom et le service vous hébergeant, vous pouvez interagir avec <button>les autres plateformes sociales implémentant ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Votre identifiant :",
|
||||
"domain_pill.your_server": "Votre foyer numérique, là où vos messages résident. Vous souhaitez changer ? Lancez un transfert vers un autre serveur quand vous le voulez et vos abonné·e·s suivront automatiquement.",
|
||||
"domain_pill.your_username": "Votre identifiant unique sur ce serveur. Il est possible de trouver des utilisateurs ayant le même nom d'utilisateur sur différents serveurs.",
|
||||
"embed.instructions": "Intégrez cette publication à votre site en copiant le code ci-dessous.",
|
||||
"embed.preview": "Voici comment il apparaîtra:",
|
||||
"emoji_button.activity": "Activité",
|
||||
|
@ -236,6 +266,7 @@
|
|||
"empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouvelles publications, elles apparaîtront ici.",
|
||||
"empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.",
|
||||
"empty_column.mutes": "Vous n’avez masqué aucun compte pour le moment.",
|
||||
"empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.",
|
||||
"empty_column.notifications": "Vous n'avez pas encore de notifications. Quand d'autres personnes interagissent avec vous, vous en verrez ici.",
|
||||
"empty_column.public": "Il n’y a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public",
|
||||
"error.unexpected_crash.explanation": "En raison d’un bogue dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.",
|
||||
|
@ -396,6 +427,15 @@
|
|||
"loading_indicator.label": "Chargement…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Cacher l’image} other {Cacher les images}}",
|
||||
"moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous avez déménagé sur {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Cacher des notifications",
|
||||
"mute_modal.hide_options": "Masquer les options",
|
||||
"mute_modal.indefinite": "Jusqu'à ce que je les réactive",
|
||||
"mute_modal.show_options": "Afficher les options",
|
||||
"mute_modal.they_can_mention_and_follow": "Ils peuvent vous mentionner et vous suivre, mais vous ne les verrez pas.",
|
||||
"mute_modal.they_wont_know": "Ils ne sauront pas qu'ils ont été rendus silencieux.",
|
||||
"mute_modal.title": "Rendre cet utilisateur silencieux ?",
|
||||
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||
"navigation_bar.about": "À propos",
|
||||
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
||||
"navigation_bar.blocks": "Comptes bloqués",
|
||||
|
@ -431,8 +471,13 @@
|
|||
"notification.own_poll": "Votre sondage est terminé",
|
||||
"notification.poll": "Un sondage auquel vous avez participé est terminé",
|
||||
"notification.reblog": "{name} a boosté votre message",
|
||||
"notification.severed_relationships": "Relation avec {name} rompues",
|
||||
"notification.status": "{name} vient de publier",
|
||||
"notification.update": "{name} a modifié une publication",
|
||||
"notification_requests.accept": "Accepter",
|
||||
"notification_requests.dismiss": "Rejeter",
|
||||
"notification_requests.notifications_from": "Notifications de {name}",
|
||||
"notification_requests.title": "Notifications filtrées",
|
||||
"notifications.clear": "Effacer notifications",
|
||||
"notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications?",
|
||||
"notifications.column_settings.admin.report": "Nouveaux signalements:",
|
||||
|
@ -464,6 +509,15 @@
|
|||
"notifications.permission_denied": "Les notifications de bureau ne sont pas disponibles en raison d'une demande de permission de navigateur précédemment refusée",
|
||||
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a précedemment été refusée",
|
||||
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.",
|
||||
"notifications.policy.filter_new_accounts.hint": "Créés au cours des derniers {days, plural, one {un jour} other {# jours}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Nouveaux comptes",
|
||||
"notifications.policy.filter_not_followers_hint": "Incluant les personnes qui vous suivent depuis moins de {days, plural, one {un jour} other {# jours}}",
|
||||
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
|
||||
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
|
||||
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtré sauf si c'est en réponse à une mention de vous ou si vous suivez l'expéditeur",
|
||||
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
|
||||
"notifications.policy.title": "Filtrer les notifications de…",
|
||||
"notifications_permission_banner.enable": "Activer les notifications de bureau",
|
||||
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
|
||||
"notifications_permission_banner.title": "Ne rien rater",
|
||||
|
@ -534,6 +588,12 @@
|
|||
"refresh": "Actualiser",
|
||||
"regeneration_indicator.label": "Chargement…",
|
||||
"regeneration_indicator.sublabel": "Votre fil d'accueil est en cours de préparation!",
|
||||
"relationship_severance_notification.purged_data": "supprimées par les administrateurs",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relation} other {# relations}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Le compte a été suspendu",
|
||||
"relationship_severance_notification.types.domain_block": "Le domaine a été suspendu",
|
||||
"relationship_severance_notification.types.user_domain_block": "Vous avez bloqué ce domaine",
|
||||
"relationship_severance_notification.view": "Afficher",
|
||||
"relative_time.days": "{number} j",
|
||||
"relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}",
|
||||
"relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}",
|
||||
|
@ -640,9 +700,11 @@
|
|||
"status.direct": "Mention privée @{name}",
|
||||
"status.direct_indicator": "Mention privée",
|
||||
"status.edit": "Modifier",
|
||||
"status.edited": "Dernière modification le {date}",
|
||||
"status.edited_x_times": "Modifiée {count, plural, one {{count} fois} other {{count} fois}}",
|
||||
"status.embed": "Intégrer",
|
||||
"status.favourite": "Ajouter aux favoris",
|
||||
"status.favourites": "{count, plural, one {favori} other {favoris}}",
|
||||
"status.filter": "Filtrer cette publication",
|
||||
"status.filtered": "Filtrée",
|
||||
"status.hide": "Masquer le message",
|
||||
|
@ -663,6 +725,7 @@
|
|||
"status.reblog": "Booster",
|
||||
"status.reblog_private": "Booster avec visibilité originale",
|
||||
"status.reblogged_by": "{name} a boosté",
|
||||
"status.reblogs": "{count, plural, one {boost} other {boosts}}",
|
||||
"status.reblogs.empty": "Personne n’a encore boosté cette publication. Lorsque quelqu’un le fera, elle apparaîtra ici.",
|
||||
"status.redraft": "Supprimer et réécrire",
|
||||
"status.remove_bookmark": "Retirer des signets",
|
||||
|
|
|
@ -89,6 +89,14 @@
|
|||
"announcement.announcement": "Annonce",
|
||||
"attachments_list.unprocessed": "(non traité)",
|
||||
"audio.hide": "Masquer l'audio",
|
||||
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.",
|
||||
"block_modal.show_less": "Afficher moins",
|
||||
"block_modal.show_more": "Afficher plus",
|
||||
"block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.",
|
||||
"block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||
"block_modal.they_will_know": "Il peut voir qu'il est bloqué.",
|
||||
"block_modal.title": "Bloquer l'utilisateur ?",
|
||||
"block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois",
|
||||
"bundle_column_error.copy_stacktrace": "Copier le rapport d'erreur",
|
||||
"bundle_column_error.error.body": "La page demandée n'a pas pu être affichée. Cela peut être dû à un bogue dans notre code, ou à un problème de compatibilité avec le navigateur.",
|
||||
|
@ -169,6 +177,7 @@
|
|||
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?",
|
||||
"confirmations.discard_edit_media.confirm": "Rejeter",
|
||||
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, les supprimer quand même ?",
|
||||
"confirmations.domain_block.confirm": "Bloquer le serveur",
|
||||
"confirmations.domain_block.message": "Voulez-vous vraiment, vraiment bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans vos fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.",
|
||||
"confirmations.edit.confirm": "Modifier",
|
||||
"confirmations.edit.message": "Modifier maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?",
|
||||
|
@ -200,6 +209,27 @@
|
|||
"dismissable_banner.explore_statuses": "Ces messages venant de tout le web social gagnent en popularité aujourd’hui. Les nouveaux messages avec plus de boosts et de favoris sont classés plus haut.",
|
||||
"dismissable_banner.explore_tags": "Ces hashtags sont actuellement en train de gagner de l'ampleur parmi les personnes sur les serveurs du réseau décentralisé dont celui-ci.",
|
||||
"dismissable_banner.public_timeline": "Ce sont les posts publics les plus récents de personnes sur le web social que les gens sur {domain} suivent.",
|
||||
"domain_block_modal.block": "Bloquer le serveur",
|
||||
"domain_block_modal.block_account_instead": "Bloquer @{name} à la place",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.",
|
||||
"domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.",
|
||||
"domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.",
|
||||
"domain_block_modal.title": "Bloquer le domaine ?",
|
||||
"domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.",
|
||||
"domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.",
|
||||
"domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.",
|
||||
"domain_pill.server": "Serveur",
|
||||
"domain_pill.their_handle": "Son identifiant :",
|
||||
"domain_pill.their_server": "Son foyer numérique, là où tous ses posts résident.",
|
||||
"domain_pill.their_username": "Son identifiant unique sur leur serveur. Il est possible de rencontrer des utilisateurs avec le même nom sur différents serveurs.",
|
||||
"domain_pill.username": "Nom d’utilisateur",
|
||||
"domain_pill.whats_in_a_handle": "Qu'est-ce qu'un identifiant ?",
|
||||
"domain_pill.who_they_are": "Comme un identifiant contient le nom et le service hébergeant une personne, vous pouvez interagir sur <button>les plateformes sociales implémentant ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Comme un identifiant indique votre nom et le service vous hébergeant, vous pouvez interagir avec <button>les autres plateformes sociales implémentant ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Votre identifiant :",
|
||||
"domain_pill.your_server": "Votre foyer numérique, là où vos messages résident. Vous souhaitez changer ? Lancez un transfert vers un autre serveur quand vous le voulez et vos abonné·e·s suivront automatiquement.",
|
||||
"domain_pill.your_username": "Votre identifiant unique sur ce serveur. Il est possible de trouver des utilisateurs ayant le même nom d'utilisateur sur différents serveurs.",
|
||||
"embed.instructions": "Intégrez ce message à votre site en copiant le code ci-dessous.",
|
||||
"embed.preview": "Il apparaîtra comme cela :",
|
||||
"emoji_button.activity": "Activités",
|
||||
|
@ -236,6 +266,7 @@
|
|||
"empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Quand des membres de cette liste publieront de nouveaux messages, ils apparaîtront ici.",
|
||||
"empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.",
|
||||
"empty_column.mutes": "Vous n’avez masqué aucun compte pour le moment.",
|
||||
"empty_column.notification_requests": "C'est fini ! Il n'y a plus rien ici. Lorsque vous recevez de nouvelles notifications, elles apparaitront ici conformément à vos préférences.",
|
||||
"empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
|
||||
"empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public",
|
||||
"error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.",
|
||||
|
@ -396,6 +427,15 @@
|
|||
"loading_indicator.label": "Chargement…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Cacher l’image} other {Cacher les images}}",
|
||||
"moved_to_account_banner.text": "Votre compte {disabledAccount} est actuellement désactivé parce que vous l'avez déplacé à {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Cacher des notifications",
|
||||
"mute_modal.hide_options": "Masquer les options",
|
||||
"mute_modal.indefinite": "Jusqu'à ce que je les réactive",
|
||||
"mute_modal.show_options": "Afficher les options",
|
||||
"mute_modal.they_can_mention_and_follow": "Ils peuvent vous mentionner et vous suivre, mais vous ne les verrez pas.",
|
||||
"mute_modal.they_wont_know": "Ils ne sauront pas qu'ils ont été rendus silencieux.",
|
||||
"mute_modal.title": "Rendre cet utilisateur silencieux ?",
|
||||
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||
"navigation_bar.about": "À propos",
|
||||
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
||||
"navigation_bar.blocks": "Comptes bloqués",
|
||||
|
@ -431,8 +471,13 @@
|
|||
"notification.own_poll": "Votre sondage est terminé",
|
||||
"notification.poll": "Un sondage auquel vous avez participé vient de se terminer",
|
||||
"notification.reblog": "{name} a partagé votre message",
|
||||
"notification.severed_relationships": "Relation avec {name} rompues",
|
||||
"notification.status": "{name} vient de publier",
|
||||
"notification.update": "{name} a modifié un message",
|
||||
"notification_requests.accept": "Accepter",
|
||||
"notification_requests.dismiss": "Rejeter",
|
||||
"notification_requests.notifications_from": "Notifications de {name}",
|
||||
"notification_requests.title": "Notifications filtrées",
|
||||
"notifications.clear": "Effacer les notifications",
|
||||
"notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?",
|
||||
"notifications.column_settings.admin.report": "Nouveaux signalements :",
|
||||
|
@ -464,6 +509,15 @@
|
|||
"notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.",
|
||||
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant",
|
||||
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car l’autorisation requise n’a pas été accordée.",
|
||||
"notifications.policy.filter_new_accounts.hint": "Créés au cours des derniers {days, plural, one {un jour} other {# jours}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Nouveaux comptes",
|
||||
"notifications.policy.filter_not_followers_hint": "Incluant les personnes qui vous suivent depuis moins de {days, plural, one {un jour} other {# jours}}",
|
||||
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
|
||||
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
|
||||
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtré sauf si c'est en réponse à une mention de vous ou si vous suivez l'expéditeur",
|
||||
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
|
||||
"notifications.policy.title": "Filtrer les notifications de…",
|
||||
"notifications_permission_banner.enable": "Activer les notifications de bureau",
|
||||
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
|
||||
"notifications_permission_banner.title": "Toujours au courant",
|
||||
|
@ -534,6 +588,12 @@
|
|||
"refresh": "Actualiser",
|
||||
"regeneration_indicator.label": "Chargement…",
|
||||
"regeneration_indicator.sublabel": "Votre fil principal est en cours de préparation !",
|
||||
"relationship_severance_notification.purged_data": "supprimées par les administrateurs",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relation} other {# relations}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Le compte a été suspendu",
|
||||
"relationship_severance_notification.types.domain_block": "Le domaine a été suspendu",
|
||||
"relationship_severance_notification.types.user_domain_block": "Vous avez bloqué ce domaine",
|
||||
"relationship_severance_notification.view": "Afficher",
|
||||
"relative_time.days": "{number} j",
|
||||
"relative_time.full.days": "il y a {number, plural, one {# jour} other {# jours}}",
|
||||
"relative_time.full.hours": "il y a {number, plural, one {# heure} other {# heures}}",
|
||||
|
@ -640,9 +700,11 @@
|
|||
"status.direct": "Mention privée @{name}",
|
||||
"status.direct_indicator": "Mention privée",
|
||||
"status.edit": "Modifier",
|
||||
"status.edited": "Dernière modification le {date}",
|
||||
"status.edited_x_times": "Modifié {count, plural, one {{count} fois} other {{count} fois}}",
|
||||
"status.embed": "Intégrer",
|
||||
"status.favourite": "Ajouter aux favoris",
|
||||
"status.favourites": "{count, plural, one {favori} other {favoris}}",
|
||||
"status.filter": "Filtrer ce message",
|
||||
"status.filtered": "Filtré",
|
||||
"status.hide": "Masquer le message",
|
||||
|
@ -663,6 +725,7 @@
|
|||
"status.reblog": "Partager",
|
||||
"status.reblog_private": "Partager à l’audience originale",
|
||||
"status.reblogged_by": "{name} a partagé",
|
||||
"status.reblogs": "{count, plural, one {boost} other {boosts}}",
|
||||
"status.reblogs.empty": "Personne n’a encore partagé ce message. Lorsque quelqu’un le fera, il apparaîtra ici.",
|
||||
"status.redraft": "Supprimer et réécrire",
|
||||
"status.remove_bookmark": "Retirer des marque-pages",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch",
|
||||
"notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch",
|
||||
"notification.reblog": "Bhrosnaich {name} am post agad",
|
||||
"notification.severed_relationships": "Chaidh na dàimhean le {name} a dhealachadh",
|
||||
"notification.status": "Phostaich {name} rud",
|
||||
"notification.update": "Dheasaich {name} post",
|
||||
"notification_requests.accept": "Gabh ris",
|
||||
|
@ -508,13 +509,13 @@
|
|||
"notifications.permission_denied": "Chan eil brathan deasga ri fhaighinn on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana",
|
||||
"notifications.permission_denied_alert": "Cha ghabh brathan deasga a chur an comas on a chaidh iarrtas ceadan a’ bhrabhsair a dhiùltadh cheana",
|
||||
"notifications.permission_required": "Chan eil brathan deasga ri fhaighinn on nach deach an cead riatanach a thoirt seachad.",
|
||||
"notifications.policy.filter_new_accounts.hint": "Chaidh a chruthachadh o chionn {count, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}",
|
||||
"notifications.policy.filter_new_accounts.hint": "Chaidh a chruthachadh o chionn {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Cunntasan ùra",
|
||||
"notifications.policy.filter_not_followers_hint": "A’ gabhail a-staigh an fheadhainn a lean ort nas lugha na {count, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh",
|
||||
"notifications.policy.filter_not_followers_hint": "A’ gabhail a-staigh an fheadhainn a lean ort nas lugha na {days, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} seo chaidh",
|
||||
"notifications.policy.filter_not_followers_title": "Daoine nach eil gad leantainn",
|
||||
"notifications.policy.filter_not_following_hint": "Gus an aontaich thu riutha a làimh",
|
||||
"notifications.policy.filter_not_following_title": "Daoine nach eil thu a’ leantainn",
|
||||
"notifications.policy.filter_private_mentions_hint": "Criathraichte ach ma tha e a’ freagairt do dh’iomradh agad fhèin no ma tha thu a’ leantainn an seòladair",
|
||||
"notifications.policy.filter_private_mentions_hint": "Criathraichte ach ma tha e a’ freagairt do dh’iomradh agad fhèin no ma tha thu a’ leantainn an t-seòladair",
|
||||
"notifications.policy.filter_private_mentions_title": "Iomraidhean prìobhaideach o choigrich",
|
||||
"notifications.policy.title": "Falamhaich na brathan o…",
|
||||
"notifications_permission_banner.enable": "Cuir brathan deasga an comas",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Ath-nuadhaich",
|
||||
"regeneration_indicator.label": "’Ga luchdadh…",
|
||||
"regeneration_indicator.sublabel": "Tha do dhachaigh ’ga ullachadh!",
|
||||
"relationship_severance_notification.purged_data": "chaidh a phurgaideachadh leis na rianairean",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# dàimh} two {# dhàimh} few {# dàimhean} other {# dàimh}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Chaidh cunntas a chur à rèim",
|
||||
"relationship_severance_notification.types.domain_block": "Chaidh àrainn a chur à rèim",
|
||||
"relationship_severance_notification.types.user_domain_block": "Bhac thu an àrainn seo",
|
||||
"relationship_severance_notification.view": "Seall",
|
||||
"relative_time.days": "{number}l",
|
||||
"relative_time.full.days": "{number, plural, one {# latha} two {# latha} few {# làithean} other {# latha}} air ais",
|
||||
"relative_time.full.hours": "{number, plural, one {# uair a thìde} two {# uair a thìde} few {# uairean a thìde} other {# uair a thìde}} air ais",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "A túa enquisa rematou",
|
||||
"notification.poll": "Rematou a enquisa na que votaches",
|
||||
"notification.reblog": "{name} compartiu a túa publicación",
|
||||
"notification.severed_relationships": "Cortouse a relación con {name}",
|
||||
"notification.status": "{name} publicou",
|
||||
"notification.update": "{name} editou unha publicación",
|
||||
"notification_requests.accept": "Aceptar",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Actualizar",
|
||||
"regeneration_indicator.label": "Estase a cargar…",
|
||||
"regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!",
|
||||
"relationship_severance_notification.purged_data": "purgada pola administración",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# relación} other {# relacións}}",
|
||||
"relationship_severance_notification.types.account_suspension": "A conta foi suspendida",
|
||||
"relationship_severance_notification.types.domain_block": "O dominio foi suspendido",
|
||||
"relationship_severance_notification.types.user_domain_block": "Bloqueaches este dominio",
|
||||
"relationship_severance_notification.view": "Ver",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "hai {number, plural, one {# día} other {# días}}",
|
||||
"relative_time.full.hours": "hai {number, plural, one {# hora} other {# horas}}",
|
||||
|
|
|
@ -248,7 +248,7 @@
|
|||
"emoji_button.symbols": "סמלים",
|
||||
"emoji_button.travel": "טיולים ואתרים",
|
||||
"empty_column.account_hides_collections": "המשתמש.ת בחר.ה להסתיר מידע זה",
|
||||
"empty_column.account_suspended": "חשבון מושהה",
|
||||
"empty_column.account_suspended": "חשבון מושעה",
|
||||
"empty_column.account_timeline": "אין עדיין אף הודעה!",
|
||||
"empty_column.account_unavailable": "פרופיל לא זמין",
|
||||
"empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.",
|
||||
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "הסקר שלך הסתיים",
|
||||
"notification.poll": "סקר שהצבעת בו הסתיים",
|
||||
"notification.reblog": "הודעתך הודהדה על ידי {name}",
|
||||
"notification.severed_relationships": "חתכתם כל קשר עם {name}",
|
||||
"notification.status": "{name} הרגע פרסמו",
|
||||
"notification.update": "{name} ערכו הודעה",
|
||||
"notification_requests.accept": "לקבל",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "רענון",
|
||||
"regeneration_indicator.label": "טוען…",
|
||||
"regeneration_indicator.sublabel": "פיד הבית שלך בהכנה!",
|
||||
"relationship_severance_notification.purged_data": "המידע נמחק על ידי ההנהלה",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {קשר אחד} other {# קשרים}}",
|
||||
"relationship_severance_notification.types.account_suspension": "החשבון הושעה",
|
||||
"relationship_severance_notification.types.domain_block": "השרת הושעה",
|
||||
"relationship_severance_notification.types.user_domain_block": "חסמת שרת זה",
|
||||
"relationship_severance_notification.view": "הצג",
|
||||
"relative_time.days": "{number} ימים",
|
||||
"relative_time.full.days": "לפני {number, plural, one {# יום} other {# ימים}}",
|
||||
"relative_time.full.hours": "לפני {number, plural, one {# שעה} other {# שעות}}",
|
||||
|
|
|
@ -92,11 +92,11 @@
|
|||
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
|
||||
"block_modal.show_less": "Kevesebb mutatása",
|
||||
"block_modal.show_more": "Több mutatása",
|
||||
"block_modal.they_cant_mention": "Nem említhetnek meg vagy követhetnek téged.",
|
||||
"block_modal.they_cant_see_posts": "Nem láthatják a bejegyzéseidet, és te sem fogod látni az övékét.",
|
||||
"block_modal.they_will_know": "Láthatják, hogy le vannak tiltva.",
|
||||
"block_modal.they_cant_mention": "Nem említhet meg és nem követhet téged.",
|
||||
"block_modal.they_cant_see_posts": "Nem láthatja a bejegyzéseidet, és te sem fogod látni az övéit.",
|
||||
"block_modal.they_will_know": "Láthatja, hogy le van tiltva.",
|
||||
"block_modal.title": "Letiltsuk a felhasználót?",
|
||||
"block_modal.you_wont_see_mentions": "Nem látsz majd őket említő bejegyzéseket.",
|
||||
"block_modal.you_wont_see_mentions": "Nem látsz majd őt említő bejegyzéseket.",
|
||||
"boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}",
|
||||
"bundle_column_error.copy_stacktrace": "Hibajelentés másolása",
|
||||
"bundle_column_error.error.body": "A kért lap nem jeleníthető meg. Ez lehet, hogy kódhiba, vagy böngészőkompatibitási hiba.",
|
||||
|
@ -176,7 +176,7 @@
|
|||
"confirmations.delete_list.confirm": "Törlés",
|
||||
"confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?",
|
||||
"confirmations.discard_edit_media.confirm": "Elvetés",
|
||||
"confirmations.discard_edit_media.message": "Elmentetlen változtatásaid vannak a média leírásában vagy előnézetében. Eldobjuk őket?",
|
||||
"confirmations.discard_edit_media.message": "Mentetlen változtatásaid vannak a média leírásában vagy előnézetében, mindenképp elveted?",
|
||||
"confirmations.domain_block.confirm": "Kiszolgáló letiltása",
|
||||
"confirmations.domain_block.message": "Biztos, hogy le szeretnéd tiltani a teljes {domain} domaint? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő, és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se az idővonalakon, se az értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.",
|
||||
"confirmations.edit.confirm": "Szerkesztés",
|
||||
|
@ -213,7 +213,7 @@
|
|||
"domain_block_modal.block_account_instead": "Helyette @{name} letiltása",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Az ezen a kiszolgálón lévő emberek interaktálhatnak a régi bejegyzéseiddel.",
|
||||
"domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.",
|
||||
"domain_block_modal.they_wont_know": "Nem fogják tudni, hogy letiltották őket.",
|
||||
"domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.",
|
||||
"domain_block_modal.title": "Letiltsuk a domaint?",
|
||||
"domain_block_modal.you_will_lose_followers": "Az ezen a kiszolgálón lévő összes követődet törölni fogjuk.",
|
||||
"domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.",
|
||||
|
@ -350,7 +350,7 @@
|
|||
"home.pending_critical_update.title": "Kritikus biztonsági frissítés érhető el!",
|
||||
"home.show_announcements": "Közlemények megjelenítése",
|
||||
"interaction_modal.description.favourite": "Egy Mastodon fiókkal kedvencnek jelölheted ezt a bejegyzést, tudatva a szerzővel, hogy értékeled és elteszed későbbre.",
|
||||
"interaction_modal.description.follow": "Egy Mastodon fiókkal bekövetheted {name} fiókot, hogy lásd a bejegyzéseit a saját hírfolyamodban.",
|
||||
"interaction_modal.description.follow": "Egy Mastodon-fiókkal követheted {name} fiókját, hogy lásd a bejegyzéseit a kezdőlapodon.",
|
||||
"interaction_modal.description.reblog": "Egy Mastodon fiókkal megtolhatod ezt a bejegyzést, hogy megoszd a saját követőiddel.",
|
||||
"interaction_modal.description.reply": "Egy Mastodon fiókkal válaszolhatsz erre a bejegyzésre.",
|
||||
"interaction_modal.login.action": "Vigyen haza",
|
||||
|
@ -431,11 +431,11 @@
|
|||
"mute_modal.hide_options": "Beállítások elrejtése",
|
||||
"mute_modal.indefinite": "Amíg nem oldom fel a némítást",
|
||||
"mute_modal.show_options": "Beállítások megjelenítése",
|
||||
"mute_modal.they_can_mention_and_follow": "Megemlíthetnek vagy követhetnek téged, de nem fogod őket látni.",
|
||||
"mute_modal.they_wont_know": "Nem fogják tudni, hogy lenémították őket.",
|
||||
"mute_modal.they_can_mention_and_follow": "Megemlíthet vagy követhet téged, de te nem fogod ezeket látni.",
|
||||
"mute_modal.they_wont_know": "Nem fogja tudni, hogy lenémítottad.",
|
||||
"mute_modal.title": "Elnémítsuk a felhasználót?",
|
||||
"mute_modal.you_wont_see_mentions": "Nem látsz majd őket említő bejegyzéseket.",
|
||||
"mute_modal.you_wont_see_posts": "Továbbra is látni fogják a bejegyzéseidet, de te nem fogod látni az övékét.",
|
||||
"mute_modal.you_wont_see_mentions": "Nem látsz majd őt említő bejegyzéseket.",
|
||||
"mute_modal.you_wont_see_posts": "Továbbra is látni fogja a bejegyzéseidet, de te nem fogod látni az övéit.",
|
||||
"navigation_bar.about": "Névjegy",
|
||||
"navigation_bar.advanced_interface": "Megnyitás a speciális webes felületben",
|
||||
"navigation_bar.blocks": "Letiltott felhasználók",
|
||||
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "A szavazásod véget ért",
|
||||
"notification.poll": "Egy szavazás, melyben részt vettél, véget ért",
|
||||
"notification.reblog": "{name} megtolta a bejegyzésedet",
|
||||
"notification.severed_relationships": "A kapcsolatok megszakítva ezzel: {name}",
|
||||
"notification.status": "{name} bejegyzést tett közzé",
|
||||
"notification.update": "{name} szerkesztett egy bejegyzést",
|
||||
"notification_requests.accept": "Elfogadás",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Frissítés",
|
||||
"regeneration_indicator.label": "Betöltés…",
|
||||
"regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
|
||||
"relationship_severance_notification.purged_data": "rendszergazdák által véglegesen törölve",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# kapcsolat} other {# kapcsolat}}",
|
||||
"relationship_severance_notification.types.account_suspension": "A fiók fel van függesztve",
|
||||
"relationship_severance_notification.types.domain_block": "A domain fel van függesztve",
|
||||
"relationship_severance_notification.types.user_domain_block": "Blokkoltad ezt a domaint",
|
||||
"relationship_severance_notification.view": "Megtekintés",
|
||||
"relative_time.days": "{number}n",
|
||||
"relative_time.full.days": "{number, plural, one {# napja} other {# napja}}",
|
||||
"relative_time.full.hours": "{number, plural, one {# órája} other {# órája}}",
|
||||
|
|
|
@ -89,6 +89,14 @@
|
|||
"announcement.announcement": "Annuncio",
|
||||
"attachments_list.unprocessed": "(non elaborato)",
|
||||
"audio.hide": "Nascondi audio",
|
||||
"block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.",
|
||||
"block_modal.show_less": "Mostra meno",
|
||||
"block_modal.show_more": "Mostra di più",
|
||||
"block_modal.they_cant_mention": "Non possono menzionarti o seguirti.",
|
||||
"block_modal.they_cant_see_posts": "Non possono vedere i tuoi post e tu non vedrai i loro.",
|
||||
"block_modal.they_will_know": "Possono vedere che sono bloccati.",
|
||||
"block_modal.title": "Bloccare l'utente?",
|
||||
"block_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.",
|
||||
"boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio, la prossima volta",
|
||||
"bundle_column_error.copy_stacktrace": "Copia rapporto sull'errore",
|
||||
"bundle_column_error.error.body": "Impossibile rendedrizzare la pagina richiesta. Potrebbe dipendere da un bug nel nostro codice o da un problema di compatibilità di un browser.",
|
||||
|
@ -169,6 +177,7 @@
|
|||
"confirmations.delete_list.message": "Sei sicuro di voler eliminare permanentemente questa lista?",
|
||||
"confirmations.discard_edit_media.confirm": "Scarta",
|
||||
"confirmations.discard_edit_media.message": "Hai delle modifiche non salvate alla descrizione o anteprima del media, scartarle comunque?",
|
||||
"confirmations.domain_block.confirm": "Blocca il server",
|
||||
"confirmations.domain_block.message": "Sei davvero sicuro di voler bloccare l'intero {domain}? In gran parte dei casi, è sufficiente e preferibile bloccare o silenziare alcuni profili. Non visualizzerai i contenuti da quel dominio in alcuna cronologia pubblica o tra le tue notifiche. I tuoi seguaci da quel dominio saranno rimossi.",
|
||||
"confirmations.edit.confirm": "Modifica",
|
||||
"confirmations.edit.message": "Modificare ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?",
|
||||
|
@ -200,6 +209,27 @@
|
|||
"dismissable_banner.explore_statuses": "Questi sono post da tutto il social web che stanno guadagnando popolarità oggi. I post più recenti con più condivisioni e preferiti sono classificati più in alto.",
|
||||
"dismissable_banner.explore_tags": "Questi hashtag stanno ottenendo popolarità tra le persone su questo e altri server della rete decentralizzata, al momento.",
|
||||
"dismissable_banner.public_timeline": "Questi sono i post pubblici più recenti di persone sul social che le persone su {domain} seguono.",
|
||||
"domain_block_modal.block": "Blocca il server",
|
||||
"domain_block_modal.block_account_instead": "Blocca invece @{name}",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Le persone da questo server possono interagire con i tuoi vecchi post.",
|
||||
"domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.",
|
||||
"domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.",
|
||||
"domain_block_modal.title": "Bloccare il dominio?",
|
||||
"domain_block_modal.you_will_lose_followers": "Tutti i tuoi seguaci da questo server verranno rimossi.",
|
||||
"domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.",
|
||||
"domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.",
|
||||
"domain_pill.server": "Server",
|
||||
"domain_pill.their_handle": "Il loro nome univoco:",
|
||||
"domain_pill.their_server": "La loro casa digitale, dove risiedono tutti i loro post.",
|
||||
"domain_pill.their_username": "Il loro identificatore univoco sul loro server. È possibile trovare utenti con lo stesso nome utente su server diversi.",
|
||||
"domain_pill.username": "Nome utente",
|
||||
"domain_pill.whats_in_a_handle": "Cosa c'è in un nome univoco?",
|
||||
"domain_pill.who_they_are": "Poiché i nomi univoci indicano chi sia qualcuno e dove si trovi, puoi interagire con le persone attraverso la rete sociale delle <button>piattaforme basate su ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Poiché il tuo nome univoco indica chi tu sia e dove ti trovi, le persone possono interagire con te sulla rete sociale delle <button>piattaforme basate su ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Il tuo nome univoco:",
|
||||
"domain_pill.your_server": "La tua casa digitale, dove vivono tutti i tuoi post. Non ti piace questa? Cambia server in qualsiasi momento e porta con te anche i tuoi seguaci.",
|
||||
"domain_pill.your_username": "Il tuo identificatore univoco su questo server. È possibile trovare utenti con lo stesso nome utente su server diversi.",
|
||||
"embed.instructions": "Incorpora questo post sul tuo sito web, copiando il seguente codice.",
|
||||
"embed.preview": "Ecco come apparirà:",
|
||||
"emoji_button.activity": "Attività",
|
||||
|
@ -397,6 +427,15 @@
|
|||
"loading_indicator.label": "Caricamento…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Nascondi immagine} other {Nascondi immagini}}",
|
||||
"moved_to_account_banner.text": "Il tuo profilo {disabledAccount} è correntemente disabilitato perché ti sei spostato a {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Nascondi dalle notifiche",
|
||||
"mute_modal.hide_options": "Nascondi le opzioni",
|
||||
"mute_modal.indefinite": "Finché io non le riattivo",
|
||||
"mute_modal.show_options": "Mostre le opzioni",
|
||||
"mute_modal.they_can_mention_and_follow": "Possono menzionarti e seguirti, ma non li vedrai.",
|
||||
"mute_modal.they_wont_know": "Non sapranno di essere stati silenziati.",
|
||||
"mute_modal.title": "Silenziare l'utente?",
|
||||
"mute_modal.you_wont_see_mentions": "Non vedrai i post che li menzionano.",
|
||||
"mute_modal.you_wont_see_posts": "Possono ancora vedere i tuoi post, ma tu non vedrai i loro.",
|
||||
"navigation_bar.about": "Info",
|
||||
"navigation_bar.advanced_interface": "Apri nell'interfaccia web avanzata",
|
||||
"navigation_bar.blocks": "Utenti bloccati",
|
||||
|
@ -432,6 +471,7 @@
|
|||
"notification.own_poll": "Il tuo sondaggio è terminato",
|
||||
"notification.poll": "Un sondaggio in cui hai votato è terminato",
|
||||
"notification.reblog": "{name} ha rebloggato il tuo post",
|
||||
"notification.severed_relationships": "Relazioni interrotte con {name}",
|
||||
"notification.status": "{name} ha appena pubblicato un post",
|
||||
"notification.update": "{name} ha modificato un post",
|
||||
"notification_requests.accept": "Accetta",
|
||||
|
@ -548,6 +588,12 @@
|
|||
"refresh": "Ricarica",
|
||||
"regeneration_indicator.label": "Caricamento…",
|
||||
"regeneration_indicator.sublabel": "Il feed della tua home è in preparazione!",
|
||||
"relationship_severance_notification.purged_data": "rimossi dagli amministratori",
|
||||
"relationship_severance_notification.relationships": "{count, plural,one {# relazione} other {# relazioni}}",
|
||||
"relationship_severance_notification.types.account_suspension": "L'account è stato sospeso",
|
||||
"relationship_severance_notification.types.domain_block": "Il dominio è stato sospeso",
|
||||
"relationship_severance_notification.types.user_domain_block": "Hai bloccato questo dominio",
|
||||
"relationship_severance_notification.view": "Visualizza",
|
||||
"relative_time.days": "{number}g",
|
||||
"relative_time.full.days": "{number, plural, one {# giorno} other {# giorni}} fa",
|
||||
"relative_time.full.hours": "{number, plural, one {# ora} other {# ore}} fa",
|
||||
|
|
|
@ -220,11 +220,16 @@
|
|||
"domain_pill.activitypub_lets_connect": "이것은 마스토돈 뿐만이 아니라 다른 소셜 앱들을 넘나들며 사람들을 연결하고 상호작용 할 수 있게 합니다.",
|
||||
"domain_pill.activitypub_like_language": "액티비티펍은 마스토돈이 다른 소셜 네트워크와 대화할 때 쓰는 언어 같은 것입니다.",
|
||||
"domain_pill.server": "서버",
|
||||
"domain_pill.their_handle": "그의 핸들:",
|
||||
"domain_pill.their_handle": "이 사람의 핸들:",
|
||||
"domain_pill.their_server": "그의 게시물이 살고 있는 디지털 거처입니다.",
|
||||
"domain_pill.their_username": "그의 서버에서 유일한 식별자입니다. 다른 서버에서 같은 사용자명을 가진 사용자를 찾을 수도 있습니다.",
|
||||
"domain_pill.username": "사용자명",
|
||||
"domain_pill.whats_in_a_handle": "핸들엔 무엇이 담겨 있나요?",
|
||||
"domain_pill.who_they_are": "핸들은 어디에 있는 누구인지를 나타내기 때문에 <button>액티비티펍을 사용하는 플랫폼</button>들의 소셜 웹을 넘나들며 사람들과 상호작용 할 수 있습니다.",
|
||||
"domain_pill.who_you_are": "내 핸들은 내가 어디에 있는 누군지 나타내기 때문에 사람들은 <button>액티비티펍</button>을 통해 소셜 웹을 넘나들며 나와 상호작용 할 수 있습니다.",
|
||||
"domain_pill.your_handle": "내 핸들:",
|
||||
"domain_pill.your_server": "내 게시물들이 살고 있는 나의 디지털 거처입니다. 마음에 들지 않나요? 팔로워를 데리고 언제든지 다른 서버로 거처를 옮길 수도 있습니다.",
|
||||
"domain_pill.your_username": "이 서버에서 유일한 내 식별자입니다. 다른 서버에서 같은 사용자명을 가진 사용자를 찾을 수도 있습니다.",
|
||||
"embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",
|
||||
"embed.preview": "이렇게 표시됩니다:",
|
||||
"emoji_button.activity": "활동",
|
||||
|
@ -466,6 +471,7 @@
|
|||
"notification.own_poll": "설문을 마침",
|
||||
"notification.poll": "참여한 설문이 종료됨",
|
||||
"notification.reblog": "{name} 님이 부스트했습니다",
|
||||
"notification.severed_relationships": "{name} 님과의 관계가 단절되었습니다",
|
||||
"notification.status": "{name} 님이 방금 게시물을 올렸습니다",
|
||||
"notification.update": "{name} 님이 게시물을 수정했습니다",
|
||||
"notification_requests.accept": "수락",
|
||||
|
@ -507,11 +513,11 @@
|
|||
"notifications.policy.filter_new_accounts_title": "새 계정",
|
||||
"notifications.policy.filter_not_followers_hint": "나를 팔로우 한 지 {days, plural, other {# 일}}이 되지 않은 사람들을 포함",
|
||||
"notifications.policy.filter_not_followers_title": "나를 팔로우하지 않는 사람들",
|
||||
"notifications.policy.filter_not_following_hint": "내가 수동으로 승인하기 전까지",
|
||||
"notifications.policy.filter_not_following_hint": "내가 수동으로 승인하지 않는 한",
|
||||
"notifications.policy.filter_not_following_title": "내가 팔로우하지 않는 사람들",
|
||||
"notifications.policy.filter_private_mentions_hint": "내가 한 멘션에 단 답글이거나 내가 발신자를 팔로우 한 것이 아닌 이상 걸러집니다",
|
||||
"notifications.policy.filter_private_mentions_title": "청하지 않은 개인적인 멘션",
|
||||
"notifications.policy.title": "알림을 거를 사람들…",
|
||||
"notifications.policy.title": "알림을 제외할 조건들…",
|
||||
"notifications_permission_banner.enable": "데스크탑 알림 활성화",
|
||||
"notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.",
|
||||
"notifications_permission_banner.title": "아무것도 놓치지 마세요",
|
||||
|
@ -582,6 +588,12 @@
|
|||
"refresh": "새로고침",
|
||||
"regeneration_indicator.label": "불러오는 중…",
|
||||
"regeneration_indicator.sublabel": "홈 피드를 준비하고 있습니다!",
|
||||
"relationship_severance_notification.purged_data": "관리자에 의해 제거되었습니다",
|
||||
"relationship_severance_notification.relationships": "{count, plural, other {# 건의 관계}}",
|
||||
"relationship_severance_notification.types.account_suspension": "계정이 정지되었습니다",
|
||||
"relationship_severance_notification.types.domain_block": "도메인이 정지되었습니다",
|
||||
"relationship_severance_notification.types.user_domain_block": "내가 이 도메인을 차단했습니다",
|
||||
"relationship_severance_notification.view": "보기",
|
||||
"relative_time.days": "{number}일 전",
|
||||
"relative_time.full.days": "{number} 일 전",
|
||||
"relative_time.full.hours": "{number} 시간 전",
|
||||
|
|
|
@ -91,7 +91,10 @@
|
|||
"audio.hide": "Eskonde audio",
|
||||
"block_modal.show_less": "Amostra manko",
|
||||
"block_modal.show_more": "Amostra mas",
|
||||
"block_modal.they_cant_mention": "No te puede enmentar ni segir.",
|
||||
"block_modal.they_will_know": "Puede ver ke esta blokado.",
|
||||
"block_modal.title": "Bloka utilizador?",
|
||||
"block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.",
|
||||
"boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez",
|
||||
"bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro",
|
||||
"bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.",
|
||||
|
@ -205,9 +208,17 @@
|
|||
"dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.",
|
||||
"dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.",
|
||||
"domain_block_modal.block": "Bloka sirvidor",
|
||||
"domain_block_modal.block_account_instead": "Bloka @{name} en su lugar",
|
||||
"domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.",
|
||||
"domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.",
|
||||
"domain_block_modal.title": "Bloka el domeno?",
|
||||
"domain_block_modal.you_will_lose_followers": "Se efasaran todos tus suivantes de este sirvidor.",
|
||||
"domain_block_modal.you_wont_see_posts": "No veras publikasyones ni avizos de utilizadores en este sirvidor.",
|
||||
"domain_pill.server": "Sirvidor",
|
||||
"domain_pill.their_handle": "Su alias:",
|
||||
"domain_pill.username": "Nombre de utilizador",
|
||||
"domain_pill.whats_in_a_handle": "En ke konsiste el alias?",
|
||||
"domain_pill.your_handle": "Tu alias:",
|
||||
"embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.",
|
||||
"embed.preview": "Paresera ansina:",
|
||||
"emoji_button.activity": "Aktivita",
|
||||
|
@ -404,6 +415,13 @@
|
|||
"loading_indicator.label": "Eskargando…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Eskonde imaje} other {Eskonde imajes}}",
|
||||
"moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Eskonde de avizos",
|
||||
"mute_modal.hide_options": "Eskonde opsyones",
|
||||
"mute_modal.indefinite": "Asta ke desho de silensyarlo",
|
||||
"mute_modal.show_options": "Amostra opsyones",
|
||||
"mute_modal.they_wont_know": "No savra ke tiene sido silensyado.",
|
||||
"mute_modal.title": "Silensiar utilizador?",
|
||||
"mute_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.",
|
||||
"navigation_bar.about": "Sovre mozotros",
|
||||
"navigation_bar.advanced_interface": "Avre en la enterfaz avanzada",
|
||||
"navigation_bar.blocks": "Utilizadores blokados",
|
||||
|
@ -553,6 +571,8 @@
|
|||
"refresh": "Arefreska",
|
||||
"regeneration_indicator.label": "Eskargando…",
|
||||
"regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!",
|
||||
"relationship_severance_notification.types.user_domain_block": "Blokates este domeno",
|
||||
"relationship_severance_notification.view": "Mira",
|
||||
"relative_time.days": "{number} d",
|
||||
"relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}",
|
||||
"relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}",
|
||||
|
|
|
@ -236,7 +236,7 @@
|
|||
"empty_column.lists": "Pašlaik Tev nav neviena saraksta. Kad tādu izveidosi, tas parādīsies šeit.",
|
||||
"empty_column.mutes": "Neviens lietotājs vēl nav apklusināts.",
|
||||
"empty_column.notifications": "Tev vēl nav paziņojumu. Kad citi cilvēki ar Tevi mijiedarbosies, Tu to redzēsi šeit.",
|
||||
"empty_column.public": "Šeit nekā nav! Ieraksti kaut ko publiski vai seko lietotājiem no citiem serveriem, lai iegūtu saturu",
|
||||
"empty_column.public": "Šeit nekā nav. Ieraksti kaut ko publiski vai seko lietotājiem no citiem serveriem, lai iegūtu saturu",
|
||||
"error.unexpected_crash.explanation": "Koda kļūdas vai pārlūkprogrammas saderības problēmas dēļ šo lapu nevarēja parādīt pareizi.",
|
||||
"error.unexpected_crash.explanation_addons": "Šo lapu nevarēja parādīt pareizi. Šo kļūdu, iespējams, izraisīja pārlūkprogrammas papildinājums vai automātiskās tulkošanas rīki.",
|
||||
"error.unexpected_crash.next_steps": "Mēģini atsvaidzināt lapu. Ja tas nepalīdz, iespējams, varēsi lietot Mastodon, izmantojot citu pārlūkprogrammu vai lietotni.",
|
||||
|
@ -265,6 +265,7 @@
|
|||
"filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu",
|
||||
"filter_modal.select_filter.title": "Filtrēt šo ziņu",
|
||||
"filter_modal.title.status": "Filtrēt ziņu",
|
||||
"filtered_notifications_banner.pending_requests": "Paziņojumi no {count, plural, =0 {neviena} one {viena cilvēka} other {# cilvēkiem}}, ko Tu varētu zināt",
|
||||
"firehose.all": "Visi",
|
||||
"firehose.local": "Šis serveris",
|
||||
"firehose.remote": "Citi serveri",
|
||||
|
@ -273,6 +274,7 @@
|
|||
"follow_requests.unlocked_explanation": "Lai gan Tavs konts nav slēgts, {domain} darbinieki iedomājās, ka Tu varētu vēlēties pašrocīgi pārskatīt sekošanas pieprasījumus no šiem kontiem.",
|
||||
"follow_suggestions.curated_suggestion": "Darbinieku izvēle",
|
||||
"follow_suggestions.dismiss": "Vairs nerādīt",
|
||||
"follow_suggestions.personalized_suggestion": "Pielāgots ieteikums",
|
||||
"follow_suggestions.view_all": "Skatīt visu",
|
||||
"follow_suggestions.who_to_follow": "Kam sekot",
|
||||
"followed_tags": "Sekojamie tēmturi",
|
||||
|
@ -413,7 +415,7 @@
|
|||
"navigation_bar.security": "Drošība",
|
||||
"not_signed_in_indicator.not_signed_in": "Ir jāpiesakās, lai piekļūtu šim resursam.",
|
||||
"notification.admin.report": "{name} ziņoja par {target}",
|
||||
"notification.admin.sign_up": "{name} ir pierakstījies",
|
||||
"notification.admin.sign_up": "{name} pierakstījās",
|
||||
"notification.favourite": "{name} pievienoja tavu ziņu izlasei",
|
||||
"notification.follow": "{name} uzsāka Tev sekot",
|
||||
"notification.follow_request": "{name} nosūtīja Tev sekošanas pieprasījumu",
|
||||
|
@ -464,7 +466,7 @@
|
|||
"onboarding.compose.template": "Sveiki, #Mastodon!",
|
||||
"onboarding.follows.empty": "Diemžēl pašlaik nevar parādīt rezultātus. Vari mēģināt izmantot meklēšanu vai pārlūkot izpētes lapu, lai atrastu cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.",
|
||||
"onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā izbaudīt Mastodon. Jo vairāk cilvēku sekosi, jo aktīvāk un interesantāk tas būs. Lai sāktu, šeit ir daži ieteikumi:",
|
||||
"onboarding.follows.title": "Populārs Mastodon",
|
||||
"onboarding.follows.title": "Pielāgo savu mājas barotni",
|
||||
"onboarding.profile.discoverable": "Padarīt manu profilu atklājamu",
|
||||
"onboarding.profile.display_name": "Attēlojamais vārds",
|
||||
"onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…",
|
||||
|
@ -482,7 +484,7 @@
|
|||
"onboarding.start.skip": "Nav nepieciešama palīdzība darba sākšanai?",
|
||||
"onboarding.start.title": "Tev tas izdevās!",
|
||||
"onboarding.steps.follow_people.body": "Tu pats veido savu plūsmu. Piepildīsim to ar interesantiem cilvēkiem.",
|
||||
"onboarding.steps.follow_people.title": "Sekot {count, plural, one {one person} other {# cilvēkiem}}",
|
||||
"onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni",
|
||||
"onboarding.steps.publish_status.body": "Sveicini pasauli ar tekstu, fotoattēliem, video, vai aptaujām {emoji}",
|
||||
"onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu",
|
||||
"onboarding.steps.setup_profile.body": "Palielini mijiedarbību ar aptverošu profilu!",
|
||||
|
@ -492,14 +494,14 @@
|
|||
"onboarding.tips.2fa": "<strong>Vai zināji?</strong> Tu vari aizsargāt savu kontu, konta iestatījumos iestatot divpakāpju autentifikāciju. Tas darbojas ar jebkuru Tevis izvēlētu TOTP lietotni, nav nepieciešams tālruņa numurs!",
|
||||
"onboarding.tips.accounts_from_other_servers": "<strong>Vai zināji?</strong> Tā kā Mastodon ir decentralizēts, daži profili, ar kuriem saskaraties, tiks mitināti citos, nevis tavos serveros. Un tomēr tu varat sazināties ar viņiem nevainojami! Viņu serveris atrodas viņu lietotājvārda otrajā pusē!",
|
||||
"onboarding.tips.migration": "<strong>Vai zināji?</strong> Ja uzskati, ka {domain} nākotnē nav lieliska servera izvēle, vari pāriet uz citu Mastodon serveri, nezaudējot savus sekotājus. Tu pat vari mitināt savu serveri!",
|
||||
"onboarding.tips.verification": "<strong>Vai zināji?</strong> Tu vari verificēt savu kontu, ievietojot saiti uz savu Mastodon profilu savā vietnē un pievienojot vietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti!",
|
||||
"onboarding.tips.verification": "<strong>Vai zināji?</strong> Tu vari apliecināt savu kontu, ievietojot savā tīmekļvietnē saiti uz savu Mastodon profilu un pievienojot tīmekļvietni savam profilam. Nav nepieciešami nekādi maksājumi vai dokumenti.",
|
||||
"password_confirmation.exceeds_maxlength": "Paroles apstiprināšana pārsniedz maksimālo paroles garumu",
|
||||
"password_confirmation.mismatching": "Paroles apstiprinājums neatbilst",
|
||||
"picture_in_picture.restore": "Novietot atpakaļ",
|
||||
"poll.closed": "Pabeigta",
|
||||
"poll.refresh": "Atsvaidzināt",
|
||||
"poll.reveal": "Skatīt rezultātus",
|
||||
"poll.total_people": "{count, plural, zero {# cilvēku} one {# persona} other {# cilvēki}}",
|
||||
"poll.total_people": "{count, plural, zero {# cilvēku} one {# cilvēks} other {# cilvēki}}",
|
||||
"poll.total_votes": "{count, plural, zero {# balsojumu} one {# balsojums} other {# balsojumi}}",
|
||||
"poll.vote": "Balsot",
|
||||
"poll.voted": "Tu balsoji par šo atbildi",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Jouw peiling is beëindigd",
|
||||
"notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd",
|
||||
"notification.reblog": "{name} boostte jouw bericht",
|
||||
"notification.severed_relationships": "Volgrelaties met {name} verbroken",
|
||||
"notification.status": "{name} heeft zojuist een bericht geplaatst",
|
||||
"notification.update": "{name} heeft een bericht bewerkt",
|
||||
"notification_requests.accept": "Accepteren",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Vernieuwen",
|
||||
"regeneration_indicator.label": "Aan het laden…",
|
||||
"regeneration_indicator.sublabel": "Jouw starttijdlijn wordt aangemaakt!",
|
||||
"relationship_severance_notification.purged_data": "verwijderd door beheerders",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# volgrelatie} other {# volgrelaties}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Account is opgeschort",
|
||||
"relationship_severance_notification.types.domain_block": "Domein is opgeschort",
|
||||
"relationship_severance_notification.types.user_domain_block": "Je hebt dit domein geblokkeerd",
|
||||
"relationship_severance_notification.view": "Weergeven",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# dag} other {# dagen}} geleden",
|
||||
"relative_time.full.hours": "{number, plural, one {# uur} other {# uur}} geleden",
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"account.featured_tags.last_status_never": "Ingen innlegg",
|
||||
"account.featured_tags.title": "{name} sine framheva emneknaggar",
|
||||
"account.follow": "Fylg",
|
||||
"account.follow_back": "Følg tilbake",
|
||||
"account.follow_back": "Fylg tilbake",
|
||||
"account.followers": "Fylgjarar",
|
||||
"account.followers.empty": "Ingen fylgjer denne brukaren enno.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} fylgjar} other {{counter} fylgjarar}}",
|
||||
|
@ -49,7 +49,7 @@
|
|||
"account.media": "Media",
|
||||
"account.mention": "Nemn @{name}",
|
||||
"account.moved_to": "{name} seier at deira nye konto no er:",
|
||||
"account.mute": "Målbind @{name}",
|
||||
"account.mute": "Demp @{name}",
|
||||
"account.mute_notifications_short": "Demp varslingar",
|
||||
"account.mute_short": "Demp",
|
||||
"account.muted": "Målbunden",
|
||||
|
@ -69,9 +69,9 @@
|
|||
"account.unblock_short": "Stopp blokkering",
|
||||
"account.unendorse": "Ikkje vis på profil",
|
||||
"account.unfollow": "Slutt å fylgja",
|
||||
"account.unmute": "Opphev målbinding av @{name}",
|
||||
"account.unmute": "Opphev demping av @{name}",
|
||||
"account.unmute_notifications_short": "Opphev demping av varslingar",
|
||||
"account.unmute_short": "Opphev målbinding",
|
||||
"account.unmute_short": "Opphev demping",
|
||||
"account_note.placeholder": "Klikk for å leggja til merknad",
|
||||
"admin.dashboard.daily_retention": "Mengda brukarar aktive ved dagar etter registrering",
|
||||
"admin.dashboard.monthly_retention": "Mengda brukarar aktive ved månader etter registrering",
|
||||
|
@ -79,8 +79,8 @@
|
|||
"admin.dashboard.retention.cohort": "Registrert månad",
|
||||
"admin.dashboard.retention.cohort_size": "Nye brukarar",
|
||||
"admin.impact_report.instance_accounts": "Kontoprofilar dette vil sletta",
|
||||
"admin.impact_report.instance_followers": "Følgjarar våre brukarar vil mista",
|
||||
"admin.impact_report.instance_follows": "Følgjarar deira brukarar vil mista",
|
||||
"admin.impact_report.instance_followers": "Fylgjarar som brukarane våre ville mista",
|
||||
"admin.impact_report.instance_follows": "Fylgjarar som brukarane deira ville mista",
|
||||
"admin.impact_report.title": "Samandrag av konsekvensane",
|
||||
"alert.rate_limited.message": "Ver venleg å prøv på nytt etter {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Redusert kapasitet",
|
||||
|
@ -89,9 +89,14 @@
|
|||
"announcement.announcement": "Kunngjering",
|
||||
"attachments_list.unprocessed": "(ubehandla)",
|
||||
"audio.hide": "Gøym lyd",
|
||||
"block_modal.remote_users_caveat": "Vi vil be tenaren {domain} om å respektere di avgjerd. Det kan ikkje garanterast at det vert etterfølgd, sidan nokre tenarar kan handtere blokkering ulikt. Offentlege innlegg kan framleis vere synlege for ikkje-innlogga brukarar.",
|
||||
"block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektere di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.",
|
||||
"block_modal.show_less": "Vis mindre",
|
||||
"block_modal.show_more": "Vis meir",
|
||||
"block_modal.they_cant_mention": "Dei kan ikkje nemna eller fylgja deg.",
|
||||
"block_modal.they_cant_see_posts": "Dei kan ikkje sjå innlegga dine, og du vil ikkje sjå deira.",
|
||||
"block_modal.they_will_know": "Dei kan sjå at dei er blokkerte.",
|
||||
"block_modal.title": "Blokker brukaren?",
|
||||
"block_modal.you_wont_see_mentions": "Du ser ikkje innlegg som nemner dei.",
|
||||
"boost_modal.combo": "Du kan trykkja {combo} for å hoppa over dette neste gong",
|
||||
"bundle_column_error.copy_stacktrace": "Kopier feilrapport",
|
||||
"bundle_column_error.error.body": "Den etterspurde sida kan ikke hentast fram. Det kan skuldast ein feil i koden vår eller eit kompatibilitetsproblem.",
|
||||
|
@ -172,12 +177,13 @@
|
|||
"confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?",
|
||||
"confirmations.discard_edit_media.confirm": "Forkast",
|
||||
"confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?",
|
||||
"confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller målbindingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.",
|
||||
"confirmations.domain_block.confirm": "Blokker tenaren",
|
||||
"confirmations.domain_block.message": "Er du heilt, heilt sikker på at du vil skjula heile {domain}? I dei fleste tilfelle er det godt nok og føretrekt med nokre få målretta blokkeringar eller dempingar. Du kjem ikkje til å sjå innhald frå domenet i fødererte tidsliner eller i varsla dine. Fylgjarane dine frå domenet vert fjerna.",
|
||||
"confirmations.edit.confirm": "Rediger",
|
||||
"confirmations.edit.message": "Å redigera no vil overskriva den meldinga du er i ferd med å skriva. Er du sikker på at du vil halda fram?",
|
||||
"confirmations.logout.confirm": "Logg ut",
|
||||
"confirmations.logout.message": "Er du sikker på at du vil logga ut?",
|
||||
"confirmations.mute.confirm": "Målbind",
|
||||
"confirmations.mute.confirm": "Demp",
|
||||
"confirmations.redraft.confirm": "Slett & skriv på nytt",
|
||||
"confirmations.redraft.message": "Er du sikker på at du vil sletta denne statusen og skriva han på nytt? Då misser du favorittar og framhevingar, og svar til det opprinnelege innlegget vert foreldrelause.",
|
||||
"confirmations.reply.confirm": "Svar",
|
||||
|
@ -202,7 +208,15 @@
|
|||
"dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.",
|
||||
"dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.",
|
||||
"dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.",
|
||||
"dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} følgjer.",
|
||||
"dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} fylgjer.",
|
||||
"domain_block_modal.block": "Blokker tenaren",
|
||||
"domain_block_modal.block_account_instead": "Blokker @{name} i staden",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Folk på denne tenaren kan samhandla med dei gamle innlegga dine.",
|
||||
"domain_block_modal.they_cant_follow": "Ingen på denne tenaren kan fylgja deg.",
|
||||
"domain_block_modal.they_wont_know": "Dei veit ikkje at dei er blokkerte.",
|
||||
"domain_block_modal.title": "Blokker domenet?",
|
||||
"domain_block_modal.you_will_lose_followers": "Alle fylgjarane dine frå denne tenaren blir fjerna.",
|
||||
"domain_block_modal.you_wont_see_posts": "Du vil ikkje sjå innlegg eller varslingar frå brukarar på denne tenaren.",
|
||||
"domain_pill.activitypub_lets_connect": "Den lar deg kople til og samhandle med folk ikkje berre på Mastodon, men òg på tvers av forskjellige sosiale appar.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub er som språket Mastodon snakkar med andre sosiale nettverk.",
|
||||
"domain_pill.server": "Tenar",
|
||||
|
@ -214,7 +228,7 @@
|
|||
"domain_pill.who_they_are": "Sidan handtak seier kven nokon er og kvar dei er, kan du interagere med folk på tvers av det sosiale nettverket av <button>plattformar som støttar ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Sidan handtaket ditt seier kven du er og kvar du er, kan folk interagere med deg på tvers av det sosiale nettverket av <button>plattformar som støttar ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "Handtaket ditt:",
|
||||
"domain_pill.your_server": "Din digitale heim, som alle postane dine bur i. Liker du ikkje dette? Overfør tenarar når som helst og ta med følgjarane dine òg.",
|
||||
"domain_pill.your_server": "Din digitale heim, der alle innlegga dine bur i. Liker du ikkje dette? Byt til ein ny tenar når som helst og ta med fylgjarane dine òg.",
|
||||
"domain_pill.your_username": "Din unike identifikator på denne tenaren. Det er mogleg å finne brukarar med same brukarnamn på forskjellige tenarar.",
|
||||
"embed.instructions": "Bygg inn denne statusen på nettsida di ved å kopiera koden nedanfor.",
|
||||
"embed.preview": "Slik kjem det til å sjå ut:",
|
||||
|
@ -234,7 +248,7 @@
|
|||
"emoji_button.symbols": "Symbol",
|
||||
"emoji_button.travel": "Reise & stader",
|
||||
"empty_column.account_hides_collections": "Denne brukaren har valt å ikkje gjere denne informasjonen tilgjengeleg",
|
||||
"empty_column.account_suspended": "Kontoen er suspendert",
|
||||
"empty_column.account_suspended": "Kontoen er utestengd",
|
||||
"empty_column.account_timeline": "Ingen tut her!",
|
||||
"empty_column.account_unavailable": "Profil ikkje tilgjengeleg",
|
||||
"empty_column.blocks": "Du har ikkje blokkert nokon enno.",
|
||||
|
@ -245,16 +259,16 @@
|
|||
"empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!",
|
||||
"empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.",
|
||||
"empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.",
|
||||
"empty_column.follow_requests": "Du har ingen følgjeførespurnadar ennå. Når du får ein, så vil den dukke opp her.",
|
||||
"empty_column.follow_requests": "Ingen har spurt om å fylgja deg enno. Når nokon gjer det, vil det dukka opp her.",
|
||||
"empty_column.followed_tags": "Du fylgjer ingen emneknaggar enno. Når du gjer det, vil dei syna her.",
|
||||
"empty_column.hashtag": "Det er ingenting i denne emneknaggen enno.",
|
||||
"empty_column.home": "Heime-tidslina di er tom! Følg fleire folk for å fylle ho med innhald. {suggestions}",
|
||||
"empty_column.home": "Heime-tidslina di er tom! Fylg fleire folk for å fylla ho med innhald. {suggestions}.",
|
||||
"empty_column.list": "Det er ingenting i denne lista enno. Når medlemer av denne lista legg ut nye statusar, så dukkar dei opp her.",
|
||||
"empty_column.lists": "Du har ingen lister enno. Når du lagar ei, så dukkar ho opp her.",
|
||||
"empty_column.mutes": "Du har ikkje målbunde nokon enno.",
|
||||
"empty_column.notification_requests": "Ferdig! Her er det ingenting. Når du får nye varsel, kjem dei opp her slik du har valt.",
|
||||
"empty_column.notifications": "Du har ingen varsel enno. Kommuniser med andre for å starte samtalen.",
|
||||
"empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller følg brukarar frå andre tenarar manuelt for å fylle det opp",
|
||||
"empty_column.public": "Det er ingenting her! Skriv noko offentleg, eller fylg brukarar frå andre tenarar manuelt for å få meir her",
|
||||
"error.unexpected_crash.explanation": "På grunn av eit nettlesarkompatibilitetsproblem eller ein feil i koden vår, kunne ikkje denne sida bli vist slik den skal.",
|
||||
"error.unexpected_crash.explanation_addons": "Denne sida kunne ikkje visast som den skulle. Feilen kjem truleg frå ei nettleserutviding eller frå automatiske omsetjingsverktøy.",
|
||||
"error.unexpected_crash.next_steps": "Prøv å lasta inn sida på nytt. Hjelper ikkje dette kan du framleis nytta Mastodon i ein annan nettlesar eller app.",
|
||||
|
@ -301,7 +315,7 @@
|
|||
"follow_suggestions.personalized_suggestion": "Personleg forslag",
|
||||
"follow_suggestions.popular_suggestion": "Populært forslag",
|
||||
"follow_suggestions.view_all": "Vis alle",
|
||||
"follow_suggestions.who_to_follow": "Kven som skal følgjast",
|
||||
"follow_suggestions.who_to_follow": "Kven du kan fylgja",
|
||||
"followed_tags": "Fylgde emneknaggar",
|
||||
"footer.about": "Om",
|
||||
"footer.directory": "Profilmappe",
|
||||
|
@ -413,6 +427,15 @@
|
|||
"loading_indicator.label": "Lastar…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Skjul bilete} other {Skjul bilete}}",
|
||||
"moved_to_account_banner.text": "Kontoen din, {disabledAccount} er for tida deaktivert fordi du har flytta til {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Ikkje vis varslingar",
|
||||
"mute_modal.hide_options": "Gøym val",
|
||||
"mute_modal.indefinite": "Til eg avdempar dei",
|
||||
"mute_modal.show_options": "Vis val",
|
||||
"mute_modal.they_can_mention_and_follow": "Dei kan nemna og fylgja deg, men du vil ikkje sjå dei.",
|
||||
"mute_modal.they_wont_know": "Dei veit ikkje at dei er dempa.",
|
||||
"mute_modal.title": "Demp brukaren?",
|
||||
"mute_modal.you_wont_see_mentions": "Du vil ikkje sjå innlegg som nemner dei.",
|
||||
"mute_modal.you_wont_see_posts": "Dei kan framleis sjå innlegga dine, men du vil ikkje sjå deira.",
|
||||
"navigation_bar.about": "Om",
|
||||
"navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt",
|
||||
"navigation_bar.blocks": "Blokkerte brukarar",
|
||||
|
@ -448,6 +471,7 @@
|
|||
"notification.own_poll": "Rundspørjinga di er ferdig",
|
||||
"notification.poll": "Ei rundspørjing du har røysta i er ferdig",
|
||||
"notification.reblog": "{name} framheva innlegget ditt",
|
||||
"notification.severed_relationships": "Forholda med {name} er brotne",
|
||||
"notification.status": "{name} la nettopp ut",
|
||||
"notification.update": "{name} redigerte eit innlegg",
|
||||
"notification_requests.accept": "Godkjenn",
|
||||
|
@ -551,8 +575,8 @@
|
|||
"privacy.change": "Endre personvernet på innlegg",
|
||||
"privacy.direct.long": "Alle nemnde i innlegget",
|
||||
"privacy.direct.short": "Spesifikke folk",
|
||||
"privacy.private.long": "Berre dine følgjarar",
|
||||
"privacy.private.short": "Følgjarar",
|
||||
"privacy.private.long": "Berre dei som fylgjer deg",
|
||||
"privacy.private.short": "Fylgjarar",
|
||||
"privacy.public.long": "Kven som helst på og av Mastodon",
|
||||
"privacy.public.short": "Offentleg",
|
||||
"privacy.unlisted.additional": "Dette er akkurat som offentleg, bortsett frå at innlegga ikkje dukkar opp i direktestraumar eller merkelappar, i oppdagingar eller Mastodon-søk, sjølv om du har sagt ja til at kontoen skal vera synleg.",
|
||||
|
@ -564,6 +588,12 @@
|
|||
"refresh": "Oppdater",
|
||||
"regeneration_indicator.label": "Lastar…",
|
||||
"regeneration_indicator.sublabel": "Heimetidslina di vert førebudd!",
|
||||
"relationship_severance_notification.purged_data": "sletta av administratorar",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# forhold} other {# forhold}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Kontoen er utvist",
|
||||
"relationship_severance_notification.types.domain_block": "Domenet er utestengt",
|
||||
"relationship_severance_notification.types.user_domain_block": "Du blokkerte dette domenet",
|
||||
"relationship_severance_notification.view": "Sjå",
|
||||
"relative_time.days": "{number}dg",
|
||||
"relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sidan",
|
||||
"relative_time.full.hours": "{number, plural, one {# time} other {# timar}} sidan",
|
||||
|
@ -592,7 +622,7 @@
|
|||
"report.comment.title": "Er det noko anna du meiner me bør vite?",
|
||||
"report.forward": "Vidaresend til {target}",
|
||||
"report.forward_hint": "Kontoen er frå ein annan tenar. Vil du senda ein anonymisert kopi av rapporten dit òg?",
|
||||
"report.mute": "Målbind",
|
||||
"report.mute": "Demp",
|
||||
"report.mute_explanation": "Du vil ikkje lenger sjå innlegga deira. Dei kan framleis fylgje deg og sjå innlegga dine, men vil ikkje vite at du har valt å ikkje sjå innlegga deira.",
|
||||
"report.next": "Neste",
|
||||
"report.placeholder": "Tilleggskommentarar",
|
||||
|
@ -663,16 +693,18 @@
|
|||
"status.block": "Blokker @{name}",
|
||||
"status.bookmark": "Set bokmerke",
|
||||
"status.cancel_reblog_private": "Opphev framheving",
|
||||
"status.cannot_reblog": "Denne posten kan ikkje framhevast",
|
||||
"status.cannot_reblog": "Du kan ikkje framheva dette innlegget",
|
||||
"status.copy": "Kopier lenke til status",
|
||||
"status.delete": "Slett",
|
||||
"status.detailed_status": "Detaljert samtalevisning",
|
||||
"status.direct": "Nevn @{name} privat",
|
||||
"status.direct_indicator": "Privat omtale",
|
||||
"status.edit": "Rediger",
|
||||
"status.edited": "Sist endra {date}",
|
||||
"status.edited_x_times": "Redigert {count, plural, one {{count} gong} other {{count} gonger}}",
|
||||
"status.embed": "Bygg inn",
|
||||
"status.favourite": "Favoritt",
|
||||
"status.favourites": "{count, plural, one {favoritt} other {favorittar}}",
|
||||
"status.filter": "Filtrer dette innlegget",
|
||||
"status.filtered": "Filtrert",
|
||||
"status.hide": "Skjul innlegget",
|
||||
|
@ -684,8 +716,8 @@
|
|||
"status.media_hidden": "Mediet er gøymt",
|
||||
"status.mention": "Nemn @{name}",
|
||||
"status.more": "Meir",
|
||||
"status.mute": "Målbind @{name}",
|
||||
"status.mute_conversation": "Målbind samtale",
|
||||
"status.mute": "Demp @{name}",
|
||||
"status.mute_conversation": "Demp samtale",
|
||||
"status.open": "Utvid denne statusen",
|
||||
"status.pin": "Fest på profil",
|
||||
"status.pinned": "Festa tut",
|
||||
|
@ -693,6 +725,7 @@
|
|||
"status.reblog": "Framhev",
|
||||
"status.reblog_private": "Framhev til dei originale mottakarane",
|
||||
"status.reblogged_by": "{name} framheva",
|
||||
"status.reblogs": "{count, plural, one {framheving} other {framhevingar}}",
|
||||
"status.reblogs.empty": "Ingen har framheva dette tutet enno. Om nokon gjer, så dukkar det opp her.",
|
||||
"status.redraft": "Slett & skriv på nytt",
|
||||
"status.remove_bookmark": "Fjern bokmerke",
|
||||
|
@ -708,11 +741,11 @@
|
|||
"status.show_more": "Vis meir",
|
||||
"status.show_more_all": "Vis meir for alle",
|
||||
"status.show_original": "Vis original",
|
||||
"status.title.with_attachments": "{user} postet {attachmentCount, plural, one {et vedlegg} other {{attachmentCount} vedlegg}}",
|
||||
"status.title.with_attachments": "{user} la ut {attachmentCount, plural, one {eitt vedlegg} other {{attachmentCount} vedlegg}}",
|
||||
"status.translate": "Omset",
|
||||
"status.translated_from_with": "Omsett frå {lang} ved bruk av {provider}",
|
||||
"status.uncached_media_warning": "Førehandsvisning er ikkje tilgjengeleg",
|
||||
"status.unmute_conversation": "Opphev målbinding av samtalen",
|
||||
"status.unmute_conversation": "Opphev demping av samtalen",
|
||||
"status.unpin": "Løys frå profil",
|
||||
"subscribed_languages.lead": "Kun innlegg på valde språk vil bli dukke opp i heimestraumen din og i listene dine etter denne endringa. For å motta innlegg på alle språk, la vere å velje nokon.",
|
||||
"subscribed_languages.save": "Lagre endringar",
|
||||
|
|
|
@ -89,6 +89,14 @@
|
|||
"announcement.announcement": "Anúncio",
|
||||
"attachments_list.unprocessed": "(não processado)",
|
||||
"audio.hide": "Ocultar áudio",
|
||||
"block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.",
|
||||
"block_modal.show_less": "Mostrar menos",
|
||||
"block_modal.show_more": "Mostrar mais",
|
||||
"block_modal.they_cant_mention": "Eles não o podem mencionar ou seguir.",
|
||||
"block_modal.they_cant_see_posts": "Eles não podem ver as suas publicações e você não verá as deles.",
|
||||
"block_modal.they_will_know": "Eles podem ver que estão bloqueados.",
|
||||
"block_modal.title": "Bloquear utilizador?",
|
||||
"block_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.",
|
||||
"boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
|
||||
"bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
|
||||
"bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
|
||||
|
@ -169,6 +177,7 @@
|
|||
"confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?",
|
||||
"confirmations.discard_edit_media.confirm": "Descartar",
|
||||
"confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição ou pré-visualização do conteúdo. Descartar mesmo assim?",
|
||||
"confirmations.domain_block.confirm": "Bloquear servidor",
|
||||
"confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.",
|
||||
"confirmations.edit.confirm": "Editar",
|
||||
"confirmations.edit.message": "Editar agora irá sobrescrever a mensagem que está a compor. Tem a certeza de que deseja continuar?",
|
||||
|
@ -200,6 +209,27 @@
|
|||
"dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.",
|
||||
"dismissable_banner.explore_tags": "Estas #etiquetas estão presentemente a ganhar atenção entre as pessoas neste e noutros servidores da rede descentralizada.",
|
||||
"dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.",
|
||||
"domain_block_modal.block": "Bloquear servidor",
|
||||
"domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as suas publicações antigas.",
|
||||
"domain_block_modal.they_cant_follow": "Ninguém deste servidor pode segui-lo.",
|
||||
"domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.",
|
||||
"domain_block_modal.title": "Bloquear domínio?",
|
||||
"domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.",
|
||||
"domain_block_modal.you_wont_see_posts": "Não verá publicações ou notificações de utilizadores neste servidor.",
|
||||
"domain_pill.activitypub_lets_connect": "Permite-lhe conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.",
|
||||
"domain_pill.activitypub_like_language": "O ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.",
|
||||
"domain_pill.server": "Servidor",
|
||||
"domain_pill.their_handle": "O seu identificador:",
|
||||
"domain_pill.their_server": "A sua casa digital, onde se encontram todas as suas publicações.",
|
||||
"domain_pill.their_username": "O seu identificador único no seu servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.",
|
||||
"domain_pill.username": "Nome de utilizador",
|
||||
"domain_pill.whats_in_a_handle": "Em que consiste um identificador?",
|
||||
"domain_pill.who_they_are": "Uma vez que os identificadores dizem quem é alguém e onde está, pode interagir com as pessoas através da rede social de <button>plataformas que suportam ActivityPub</button>.",
|
||||
"domain_pill.who_you_are": "Uma vez que o seu identificador indica quem é e onde está, as pessoas podem interagir consigo através da rede social de <button>plataformas que suportam ActivityPub</button>.",
|
||||
"domain_pill.your_handle": "O seu identificador:",
|
||||
"domain_pill.your_server": "A sua casa digital, onde se encontram todas as suas publicações. Não gosta deste? Mude de servidor a qualquer momento e leve também os seus seguidores.",
|
||||
"domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.",
|
||||
"embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.",
|
||||
"embed.preview": "Podes ver aqui como irá ficar:",
|
||||
"emoji_button.activity": "Actividade",
|
||||
|
@ -397,6 +427,15 @@
|
|||
"loading_indicator.label": "A carregar…",
|
||||
"media_gallery.toggle_visible": "Alternar visibilidade",
|
||||
"moved_to_account_banner.text": "A sua conta {disabledAccount} está, no momento, desativada, porque você migrou para {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Ocultar das notificações",
|
||||
"mute_modal.hide_options": "Ocultar opções",
|
||||
"mute_modal.indefinite": "Até que eu os tire do silêncio",
|
||||
"mute_modal.show_options": "Mostrar opções",
|
||||
"mute_modal.they_can_mention_and_follow": "Eles podem mencioná-lo e segui-lo, mas você não os verá.",
|
||||
"mute_modal.they_wont_know": "Eles não saberão que foram silenciados.",
|
||||
"mute_modal.title": "Silenciar utilizador?",
|
||||
"mute_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.",
|
||||
"mute_modal.you_wont_see_posts": "Eles podem continuar a ver as suas publicações, mas você não verá as deles.",
|
||||
"navigation_bar.about": "Sobre",
|
||||
"navigation_bar.advanced_interface": "Abrir na interface web avançada",
|
||||
"navigation_bar.blocks": "Utilizadores bloqueados",
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
"about.domain_blocks.silenced.title": "Обмежено",
|
||||
"about.domain_blocks.suspended.explanation": "Ниякі податкы из сього сервера не будут уброблені, усокочені ци поміняні, што чинит невозможнов хоть-яку інтеракцію ци зязок из хосновачами из сього сервера.",
|
||||
"about.domain_blocks.suspended.title": "Заблоковано",
|
||||
"about.not_available": "Ися інформація не была доступна на сюм сервері.",
|
||||
"about.powered_by": "Децентралізована медіа основана на {mastodon}",
|
||||
"about.rules": "Правила сервера",
|
||||
"account.account_note_header": "Примітка",
|
||||
"account.add_or_remove_from_list": "Дати авадь забрати из исписа",
|
||||
|
@ -16,22 +18,30 @@
|
|||
"account.block_short": "Заблоковати",
|
||||
"account.blocked": "Заблоковано",
|
||||
"account.browse_more_on_origin_server": "Позирайте бульше на ориґіналнум профілю",
|
||||
"account.cancel_follow_request": "Удмінити пудписку",
|
||||
"account.copy": "Зкопіровати удкликованя на профіл",
|
||||
"account.disable_notifications": "Бульше не сповіщати ми коли {name} пише",
|
||||
"account.domain_blocked": "Домен заблокованый",
|
||||
"account.edit_profile": "Управити профіл",
|
||||
"account.enable_notifications": "Уповістити ня, кой {name} пише",
|
||||
"account.endorse": "Указовати на профілови",
|
||||
"account.featured_tags.last_status_at": "Датум послідньої публикації {date}",
|
||||
"account.featured_tags.last_status_never": "Ниє публикацій",
|
||||
"account.featured_tags.title": "Ублюблені гештеґы {name}",
|
||||
"account.follow": "Пудписати ся",
|
||||
"account.follow_back": "Пудписати ся тоже",
|
||||
"account.followers": "Пудписникы",
|
||||
"account.followers.empty": "У сього хосновача раз ниє пудписникув.",
|
||||
"account.following": "Слідуєте",
|
||||
"account.follows.empty": "Сись хосновач щи никого не слідує.",
|
||||
"account.go_to_profile": "Перейти на профіл",
|
||||
"account.hide_reblogs": "Спрятати друленя уд @{name}",
|
||||
"account.joined_short": "Датум прикапчованя",
|
||||
"account.languages": "Поміняти убрані языкы",
|
||||
"account.link_verified_on": "Властность сього удкликованя было звірено {date}",
|
||||
"account.media": "Медіа",
|
||||
"account.moved_to": "Хосновач {name} указав, ож новый профіл йим є:",
|
||||
"account.mute": "Стишити {name}",
|
||||
"account.mute_notifications_short": "Стишити голошіня",
|
||||
"account.mute_short": "Стишити",
|
||||
"account.muted": "Стишено",
|
||||
|
@ -44,8 +54,22 @@
|
|||
"account.requested": "Чекат ся на пудтвердженя. Нажміт убы удмінити запрос на слідованя",
|
||||
"account.requested_follow": "Хосновач {name} просит ся пудписати ся на вас",
|
||||
"account.share": "Пошырити профіл хосновача {name}",
|
||||
"account.show_reblogs": "Указати друленя уд {name}",
|
||||
"account.unblock": "Розблоковати {name}",
|
||||
"account.unblock_domain": "Розблоковати домен {domain}",
|
||||
"account.unblock_short": "Розблоковати",
|
||||
"account.unendorse": "Не указовати на профілови",
|
||||
"account.unfollow": "Удписати ся",
|
||||
"account.unmute_notifications_short": "Указовати голошіня",
|
||||
"account.unmute_short": "Указовати",
|
||||
"account_note.placeholder": "Клопкніт обы додати примітку",
|
||||
"admin.dashboard.retention.cohort_size": "Нові хосновачі",
|
||||
"admin.impact_report.instance_accounts": "Профілі из акаунтув, котрі ся удалят",
|
||||
"admin.impact_report.instance_followers": "Пудписникы, котрых стратят наші хосновачі",
|
||||
"admin.impact_report.instance_follows": "Пудписникы, котрых стратят їхні хосновачі",
|
||||
"admin.impact_report.title": "Вплыв цілком",
|
||||
"alert.rate_limited.message": "Попробуйте зась по {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Частота обмежена",
|
||||
"bundle_column_error.return": "Вернути ся на головну",
|
||||
"bundle_column_error.routing.body": "Не можеме найти сяку сторунку. Бизувні сьте, ож URL у адресному шорикови є добрый?",
|
||||
"bundle_column_error.routing.title": "404",
|
||||
|
|
|
@ -89,6 +89,9 @@
|
|||
"announcement.announcement": "Oznámenie",
|
||||
"attachments_list.unprocessed": "(nespracované)",
|
||||
"audio.hide": "Skryť zvuk",
|
||||
"block_modal.show_less": "Zobraziť menej",
|
||||
"block_modal.show_more": "Zobraziť viac",
|
||||
"block_modal.title": "Blokovať užívateľa?",
|
||||
"boost_modal.combo": "Nabudúce môžete preskočiť stlačením {combo}",
|
||||
"bundle_column_error.copy_stacktrace": "Kopírovať chybovú hlášku",
|
||||
"bundle_column_error.error.body": "Požadovanú stránku nebolo možné vykresliť. Môže to byť spôsobené chybou v našom kóde alebo problémom s kompatibilitou prehliadača.",
|
||||
|
@ -169,6 +172,7 @@
|
|||
"confirmations.delete_list.message": "Určite chcete tento zoznam trvalo vymazať?",
|
||||
"confirmations.discard_edit_media.confirm": "Zahodiť",
|
||||
"confirmations.discard_edit_media.message": "Máte neuložené zmeny v popise alebo náhľade média, zahodiť ich aj tak?",
|
||||
"confirmations.domain_block.confirm": "Blokovať server",
|
||||
"confirmations.domain_block.message": "Určite chcete blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych účtov, čo aj odporúčame. Obsah z tejto domény neuvidíte v žiadnej verejnej časovej osi ani v upozorneniach. Vaši sledujúci pochádzajúci z tejto domény budú odstránení.",
|
||||
"confirmations.edit.confirm": "Upraviť",
|
||||
"confirmations.edit.message": "Úpravou prepíšete príspevok, ktorý máte rozpísaný. Určite chcete pokračovať?",
|
||||
|
@ -200,6 +204,12 @@
|
|||
"dismissable_banner.explore_statuses": "Toto sú príspevky z celej sociálnej siete, ktoré sú dnes populárne. Novšie príspevky s viacerými ohviezdičkovaniami a zdieľaniami sú radené vyššie.",
|
||||
"dismissable_banner.explore_tags": "Toto sú hashtagy zo sociálnej siete, ktoré sú dnes populárne. Novšie hashtagy používané viacerými ľuďmi sú radené vyššie.",
|
||||
"dismissable_banner.public_timeline": "Toto sú najnovšie verejné príspevky od účtov na sociálnej sieti, ktoré sú sledované účtami z {domain}.",
|
||||
"domain_block_modal.block": "Blokovať server",
|
||||
"domain_block_modal.block_account_instead": "Namiesto toho zablokuj @{name}",
|
||||
"domain_block_modal.title": "Blokovať doménu?",
|
||||
"domain_pill.server": "Server",
|
||||
"domain_pill.their_server": "Ich digitálny domov, kde žijú všetky ich príspevky.",
|
||||
"domain_pill.username": "Používateľské meno",
|
||||
"embed.instructions": "Tento príspevok môžete pridať na svoju webovú stránku použitím tohto kódu.",
|
||||
"embed.preview": "Takto bude vyzerať:",
|
||||
"emoji_button.activity": "Aktivita",
|
||||
|
@ -267,6 +277,7 @@
|
|||
"filter_modal.select_filter.title": "Filtrovanie tohto príspevku",
|
||||
"filter_modal.title.status": "Filtrovanie príspevku",
|
||||
"filtered_notifications_banner.pending_requests": "Oboznámenia od {count, plural, =0 {nikoho} one {jedného človeka} other {# ľudí}} čo môžeš poznať",
|
||||
"filtered_notifications_banner.title": "Filtrované oznámenia",
|
||||
"firehose.all": "Všetko",
|
||||
"firehose.local": "Tento server",
|
||||
"firehose.remote": "Ostatné servery",
|
||||
|
@ -395,6 +406,9 @@
|
|||
"loading_indicator.label": "Načítavanie…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Skryť obrázok} other {Skryť obrázky}}",
|
||||
"moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný, pretože ste sa presunuli na {movedToAccount}.",
|
||||
"mute_modal.hide_options": "Skryť možnosti",
|
||||
"mute_modal.show_options": "Zobraziť možnosti",
|
||||
"mute_modal.title": "Stíšiť užívateľa?",
|
||||
"navigation_bar.about": "O tomto serveri",
|
||||
"navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní",
|
||||
"navigation_bar.blocks": "Blokované účty",
|
||||
|
@ -433,6 +447,7 @@
|
|||
"notification.status": "{name} uverejňuje niečo nové",
|
||||
"notification.update": "{name} upravuje príspevok",
|
||||
"notification_requests.accept": "Prijať",
|
||||
"notification_requests.dismiss": "Zamietnuť",
|
||||
"notification_requests.notifications_from": "Oboznámenia od {name}",
|
||||
"notification_requests.title": "Filtrované oboznámenia",
|
||||
"notifications.clear": "Vyčistiť upozornenia",
|
||||
|
@ -469,6 +484,7 @@
|
|||
"notifications.policy.filter_new_accounts_title": "Nové účty",
|
||||
"notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú",
|
||||
"notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ",
|
||||
"notifications.policy.title": "Filtrovať oznámenia od…",
|
||||
"notifications_permission_banner.enable": "Povoliť upozornenia na ploche",
|
||||
"notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.",
|
||||
"notifications_permission_banner.title": "Nenechajte si nič ujsť",
|
||||
|
@ -539,6 +555,7 @@
|
|||
"refresh": "Obnoviť",
|
||||
"regeneration_indicator.label": "Načítavanie…",
|
||||
"regeneration_indicator.sublabel": "Váš domovský kanál sa pripravuje.",
|
||||
"relationship_severance_notification.view": "Zobraziť",
|
||||
"relative_time.days": "{number} dní",
|
||||
"relative_time.full.days": "Pred {number, plural, one {# dňom} other {# dňami}}",
|
||||
"relative_time.full.hours": "Pred {number, plural, one {# hodinou} other {# hodinami}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Vaša anketa je zaključena",
|
||||
"notification.poll": "Anketa, v kateri ste sodelovali, je zaključena",
|
||||
"notification.reblog": "{name} je izpostavila/a vašo objavo",
|
||||
"notification.severed_relationships": "Veze z {name} prekinjene",
|
||||
"notification.status": "{name} je pravkar objavil/a",
|
||||
"notification.update": "{name} je uredil(a) objavo",
|
||||
"notification_requests.accept": "Sprejmi",
|
||||
|
@ -516,7 +517,7 @@
|
|||
"notifications.policy.filter_not_following_title": "Ljudje, ki jim ne sledite",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrirano, razen če je odgovor na vašo lastno omembo ali če sledite pošiljatelju",
|
||||
"notifications.policy.filter_private_mentions_title": "Neželene zasebne omembe",
|
||||
"notifications.policy.title": "Skrij obvestila od …",
|
||||
"notifications.policy.title": "Filtriraj obvestila od …",
|
||||
"notifications_permission_banner.enable": "Omogoči obvestila na namizju",
|
||||
"notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.",
|
||||
"notifications_permission_banner.title": "Nikoli ne zamudite ničesar",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Osveži",
|
||||
"regeneration_indicator.label": "Nalaganje …",
|
||||
"regeneration_indicator.sublabel": "Vaš domači vir se pripravlja!",
|
||||
"relationship_severance_notification.purged_data": "očistili skrbniki",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# veza} two {# vezi} few {# veze} other {# vez}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Račun je bil suspendiran",
|
||||
"relationship_severance_notification.types.domain_block": "Domena je bila suspendirana",
|
||||
"relationship_severance_notification.types.user_domain_block": "Domeno ste blokirali",
|
||||
"relationship_severance_notification.view": "Pogled",
|
||||
"relative_time.days": "{number} d",
|
||||
"relative_time.full.days": "{number, plural, one {pred # dnem} two {pred # dnevoma} few {pred # dnevi} other {pred # dnevi}}",
|
||||
"relative_time.full.hours": "{number, plural, one {pred # uro} two {pred # urama} few {pred # urami} other {pred # urami}}",
|
||||
|
|
|
@ -470,6 +470,7 @@
|
|||
"notification.own_poll": "Pyetësori juaj ka përfunduar",
|
||||
"notification.poll": "Ka përfunduar një pyetësor ku keni votuar",
|
||||
"notification.reblog": "{name} përforcoi mesazhin tuaj",
|
||||
"notification.severed_relationships": "Marrëdhëniet me {name} u ndërprenë",
|
||||
"notification.status": "{name} sapo postoi",
|
||||
"notification.update": "{name} përpunoi një postim",
|
||||
"notification_requests.accept": "Pranoje",
|
||||
|
@ -584,6 +585,12 @@
|
|||
"refresh": "Rifreskoje",
|
||||
"regeneration_indicator.label": "Po ngarkohet…",
|
||||
"regeneration_indicator.sublabel": "Prurja juaj vetjake po përgatitet!",
|
||||
"relationship_severance_notification.purged_data": "spastruar nga përgjegjës",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# marrëdhënie} other {# marrëdhënie}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Llogaria është pezulluar",
|
||||
"relationship_severance_notification.types.domain_block": "Përkatësia është pezulluar",
|
||||
"relationship_severance_notification.types.user_domain_block": "E bllokuat këtë përkatësi",
|
||||
"relationship_severance_notification.view": "Shiheni",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# ditë} other {# ditë}} më parë",
|
||||
"relative_time.full.hours": "{number, plural, one {# orë} other {# orë}} më parë",
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
"announcement.announcement": "Meddelande",
|
||||
"attachments_list.unprocessed": "(obehandlad)",
|
||||
"audio.hide": "Dölj audio",
|
||||
"block_modal.remote_users_caveat": "Vi kommer att be servern {domain} att respektera ditt beslut. Dock garanteras inte efterlevnad eftersom vissa servrar kan hantera blockeringar på olika sätt. Offentliga inlägg kan fortfarande vara synliga för icke-inloggade användare.",
|
||||
"block_modal.show_less": "Visa mindre",
|
||||
"block_modal.show_more": "Visa mer",
|
||||
"block_modal.they_cant_mention": "De kan inte nämna eller följa dig.",
|
||||
|
@ -212,8 +213,12 @@
|
|||
"domain_block_modal.block_account_instead": "Blockera @{name} istället",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Personer från denna server kan interagera med dina gamla inlägg.",
|
||||
"domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.",
|
||||
"domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.",
|
||||
"domain_block_modal.title": "Blockera domän?",
|
||||
"domain_block_modal.you_will_lose_followers": "Alla dina följare från denna server kommer att tas bort.",
|
||||
"domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.",
|
||||
"domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.",
|
||||
"domain_pill.server": "Server",
|
||||
"domain_pill.their_username": "Deras unika identifierare på deras server. Det är möjligt att hitta användare med samma användarnamn på olika servrar.",
|
||||
"domain_pill.username": "Användarnamn",
|
||||
|
@ -415,6 +420,8 @@
|
|||
"mute_modal.hide_options": "Dölj alternativ",
|
||||
"mute_modal.show_options": "Visa alternativ",
|
||||
"mute_modal.they_can_mention_and_follow": "De kan nämna och följa dig, men du ser dem inte.",
|
||||
"mute_modal.they_wont_know": "De vet inte att de har blivit tysta.",
|
||||
"mute_modal.title": "Tysta användare?",
|
||||
"mute_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.",
|
||||
"mute_modal.you_wont_see_posts": "De kan fortfarande se dina inlägg, men du kan inte se deras.",
|
||||
"navigation_bar.about": "Om",
|
||||
|
@ -454,6 +461,10 @@
|
|||
"notification.reblog": "{name} boostade ditt inlägg",
|
||||
"notification.status": "{name} publicerade just ett inlägg",
|
||||
"notification.update": "{name} redigerade ett inlägg",
|
||||
"notification_requests.accept": "Godkänn",
|
||||
"notification_requests.dismiss": "Avfärda",
|
||||
"notification_requests.notifications_from": "Aviseringar från {name}",
|
||||
"notification_requests.title": "Filtrerade meddelanden",
|
||||
"notifications.clear": "Rensa aviseringar",
|
||||
"notifications.clear_confirmation": "Är du säker på att du vill rensa alla dina aviseringar permanent?",
|
||||
"notifications.column_settings.admin.report": "Nya rapporter:",
|
||||
|
@ -485,9 +496,12 @@
|
|||
"notifications.permission_denied": "Skrivbordsaviseringar är otillgängliga på grund av tidigare nekade förfrågningar om behörighet i webbläsaren",
|
||||
"notifications.permission_denied_alert": "Skrivbordsaviseringar kan inte aktiveras, eftersom att webbläsarens behörighet har nekats innan",
|
||||
"notifications.permission_required": "Skrivbordsaviseringar är otillgängliga eftersom att rättigheten som krävs inte har godkänts.",
|
||||
"notifications.policy.filter_new_accounts.hint": "Skapad inom de senaste {days, plural, one {dagen} other {# dagarna}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Nya konton",
|
||||
"notifications.policy.filter_not_followers_title": "Personer som inte följer dig",
|
||||
"notifications.policy.filter_not_following_title": "Personer du inte följer",
|
||||
"notifications.policy.filter_private_mentions_title": "Oombedda privata omnämnanden",
|
||||
"notifications.policy.title": "Filtrera ut aviseringar från…",
|
||||
"notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar",
|
||||
"notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.",
|
||||
"notifications_permission_banner.title": "Missa aldrig något",
|
||||
|
@ -558,6 +572,11 @@
|
|||
"refresh": "Läs om",
|
||||
"regeneration_indicator.label": "Laddar…",
|
||||
"regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!",
|
||||
"relationship_severance_notification.purged_data": "rensad av administratörer",
|
||||
"relationship_severance_notification.types.account_suspension": "Ditt konto har blivit avstängt",
|
||||
"relationship_severance_notification.types.domain_block": "Domänen har stängts av",
|
||||
"relationship_severance_notification.types.user_domain_block": "Du blockerade denna domän",
|
||||
"relationship_severance_notification.view": "Visa",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# dag} other {# dagar}} sedan",
|
||||
"relative_time.full.hours": "{number, plural, one {# timme} other {# timmar}} sedan",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Anketiniz sona erdi",
|
||||
"notification.poll": "Oy verdiğiniz bir anket sona erdi",
|
||||
"notification.reblog": "{name} gönderini yeniden paylaştı",
|
||||
"notification.severed_relationships": "{name} ile ilişkiler koptu",
|
||||
"notification.status": "{name} az önce gönderdi",
|
||||
"notification.update": "{name} bir gönderiyi düzenledi",
|
||||
"notification_requests.accept": "Onayla",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Yenile",
|
||||
"regeneration_indicator.label": "Yükleniyor…",
|
||||
"regeneration_indicator.sublabel": "Ana akışın hazırlanıyor!",
|
||||
"relationship_severance_notification.purged_data": "yöneticiler tarafından temizlendi",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# ilişki} other {# ilişki}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Hesap askıya alındı",
|
||||
"relationship_severance_notification.types.domain_block": "Alan adı askıya alındı",
|
||||
"relationship_severance_notification.types.user_domain_block": "Bu alan adını engellediniz",
|
||||
"relationship_severance_notification.view": "Görüntüle",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "{number, plural, one {# gün} other {# gün}} önce",
|
||||
"relative_time.full.hours": "{number, plural, one {# saat} other {# saat}} önce",
|
||||
|
|
|
@ -89,6 +89,14 @@
|
|||
"announcement.announcement": "Оголошення",
|
||||
"attachments_list.unprocessed": "(не оброблено)",
|
||||
"audio.hide": "Сховати аудіо",
|
||||
"block_modal.remote_users_caveat": "Ми попросимо сервер {domain} поважати ваше рішення. Однак дотримання вимог не гарантується, оскільки деякі сервери можуть обробляти блоки по-різному. Загальнодоступні дописи все ще можуть бути видимими для користувачів, які не увійшли в систему.",
|
||||
"block_modal.show_less": "Згорнути",
|
||||
"block_modal.show_more": "Розгорнути",
|
||||
"block_modal.they_cant_mention": "Вони не можуть згадувати та стежити за вами.",
|
||||
"block_modal.they_cant_see_posts": "Вони не можуть бачити ваших дописів, а ви бачитимете їхні.",
|
||||
"block_modal.they_will_know": "Вони можуть бачити, що вони заблоковані.",
|
||||
"block_modal.title": "Заблокувати користувача?",
|
||||
"block_modal.you_wont_see_mentions": "Ви не бачитимете дописів, де їх згадано.",
|
||||
"boost_modal.combo": "Ви можете натиснути {combo}, щоби пропустити це наступного разу",
|
||||
"bundle_column_error.copy_stacktrace": "Копіювати звіт про помилку",
|
||||
"bundle_column_error.error.body": "Неможливо показати запитану сторінку. Це може бути спричинено помилкою у нашому коді, або через проблему сумісності з браузером.",
|
||||
|
@ -169,6 +177,7 @@
|
|||
"confirmations.delete_list.message": "Ви впевнені, що хочете видалити цей список назавжди?",
|
||||
"confirmations.discard_edit_media.confirm": "Відкинути",
|
||||
"confirmations.discard_edit_media.message": "У вас є незбережені зміни в описі медіа або попереднього перегляду, все одно відкинути їх?",
|
||||
"confirmations.domain_block.confirm": "Блокувати сервер",
|
||||
"confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати або приховати лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.",
|
||||
"confirmations.edit.confirm": "Змінити",
|
||||
"confirmations.edit.message": "Редагування перезапише повідомлення, яке ви зараз пишете. Ви впевнені, що хочете продовжити?",
|
||||
|
@ -200,6 +209,16 @@
|
|||
"dismissable_banner.explore_statuses": "Ці дописи з цього та інших серверів децентралізованої мережі зараз набирають популярності на цьому сервері. Новіші дописи з частішим поширенням та додаванням до вподобаного мають вищий рейтинг.",
|
||||
"dismissable_banner.explore_tags": "Ці хештеги зараз набирають популярності серед людей на цьому та інших серверах децентралізованої мережі. Хештеги, які використовуються більшою кількістю людей, мають вищий рейтинг.",
|
||||
"dismissable_banner.public_timeline": "Це найновіші загальнодоступні дописи від людей в соціальній мережі, на які підписані люди в {domain}.",
|
||||
"domain_block_modal.block": "Блокувати сервер",
|
||||
"domain_block_modal.block_account_instead": "Блокувати @{name} натомість",
|
||||
"domain_block_modal.they_can_interact_with_old_posts": "Люди з цього сервера можуть взаємодіяти зі своїми старими дописами.",
|
||||
"domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.",
|
||||
"domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.",
|
||||
"domain_block_modal.title": "Заблокувати домен?",
|
||||
"domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.",
|
||||
"domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.",
|
||||
"domain_pill.server": "Сервер",
|
||||
"domain_pill.username": "Ім'я користувача",
|
||||
"embed.instructions": "Вбудуйте цей допис до вашого вебсайту, скопіювавши код нижче.",
|
||||
"embed.preview": "Ось який вигляд це матиме:",
|
||||
"emoji_button.activity": "Діяльність",
|
||||
|
@ -397,6 +416,15 @@
|
|||
"loading_indicator.label": "Завантаження…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Приховати зображення} other {Приховати зображення}}",
|
||||
"moved_to_account_banner.text": "Ваш обліковий запис {disabledAccount} наразі вимкнений, оскільки вас перенесено до {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Сховати зі сповіщень",
|
||||
"mute_modal.hide_options": "Сховати опції",
|
||||
"mute_modal.indefinite": "Доки я не перестану ігнорувати їх",
|
||||
"mute_modal.show_options": "Показати опції",
|
||||
"mute_modal.they_can_mention_and_follow": "Вони зможуть згадувати та стежити за вами, але ви їх не бачитимете.",
|
||||
"mute_modal.they_wont_know": "Вони не знатимуть, що їх ігнорують.",
|
||||
"mute_modal.title": "Ігнорувати користувача?",
|
||||
"mute_modal.you_wont_see_mentions": "Ви не бачитимете дописів, де їх згадано.",
|
||||
"mute_modal.you_wont_see_posts": "Вони все ще можуть бачити ваші дописи, але ви не бачитимете їхніх.",
|
||||
"navigation_bar.about": "Про застосунок",
|
||||
"navigation_bar.advanced_interface": "Відкрити в розширеному вебінтерфейсі",
|
||||
"navigation_bar.blocks": "Заблоковані користувачі",
|
||||
|
@ -432,6 +460,7 @@
|
|||
"notification.own_poll": "Ваше опитування завершилося",
|
||||
"notification.poll": "Опитування, у якому ви голосували, скінчилося",
|
||||
"notification.reblog": "{name} поширює ваш допис",
|
||||
"notification.severed_relationships": "Зв'язки з {name} розірвані",
|
||||
"notification.status": "{name} щойно дописує",
|
||||
"notification.update": "{name} змінює допис",
|
||||
"notification_requests.accept": "Прийняти",
|
||||
|
@ -544,6 +573,12 @@
|
|||
"refresh": "Оновити",
|
||||
"regeneration_indicator.label": "Завантаження…",
|
||||
"regeneration_indicator.sublabel": "Хвилинку, ми готуємо вашу стрічку!",
|
||||
"relationship_severance_notification.purged_data": "очищено адміністраторами",
|
||||
"relationship_severance_notification.relationships": "{count, plural, one {# зв'язок} few {# зв'язки} many {# зв'язків} other {# зв'язок}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Обліковий запис призупинено",
|
||||
"relationship_severance_notification.types.domain_block": "Домен призупинено",
|
||||
"relationship_severance_notification.types.user_domain_block": "Ви заблокували цей домен",
|
||||
"relationship_severance_notification.view": "Вигляд",
|
||||
"relative_time.days": "{number}д",
|
||||
"relative_time.full.days": "{number, plural, one {# день} few {# дні} other {# днів}} тому",
|
||||
"relative_time.full.hours": "{number, plural, one {# година} few {# години} other {# годин}} тому",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc",
|
||||
"notification.poll": "Cuộc bình chọn đã kết thúc",
|
||||
"notification.reblog": "{name} đăng lại tút của bạn",
|
||||
"notification.severed_relationships": "Mối quan hệ với {name} bị cắt đứt",
|
||||
"notification.status": "{name} đăng tút mới",
|
||||
"notification.update": "{name} đã sửa tút",
|
||||
"notification_requests.accept": "Chấp nhận",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "Làm mới",
|
||||
"regeneration_indicator.label": "Đang tải…",
|
||||
"regeneration_indicator.sublabel": "Trang chủ của bạn đang được cập nhật!",
|
||||
"relationship_severance_notification.purged_data": "bị quản trị viên xóa",
|
||||
"relationship_severance_notification.relationships": "{count, plural, other {# mối quan hệ}}",
|
||||
"relationship_severance_notification.types.account_suspension": "Người này đã bị vô hiệu hóa",
|
||||
"relationship_severance_notification.types.domain_block": "Máy chủ này đã bị vô hiệu hóa",
|
||||
"relationship_severance_notification.types.user_domain_block": "Bạn đã chặn máy chủ này",
|
||||
"relationship_severance_notification.view": "Chi tiết",
|
||||
"relative_time.days": "{number} ngày",
|
||||
"relative_time.full.days": "{number, plural, other {# ngày}}",
|
||||
"relative_time.full.hours": "{number, plural, other {# giờ}}",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "你的投票已经结束",
|
||||
"notification.poll": "你参与的一个投票已经结束",
|
||||
"notification.reblog": "{name} 转发了你的嘟文",
|
||||
"notification.severed_relationships": "与 {name} 的关系已被切断",
|
||||
"notification.status": "{name} 刚刚发布嘟文",
|
||||
"notification.update": "{name} 编辑了嘟文",
|
||||
"notification_requests.accept": "接受",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "刷新",
|
||||
"regeneration_indicator.label": "加载中…",
|
||||
"regeneration_indicator.sublabel": "你的主页动态正在准备中!",
|
||||
"relationship_severance_notification.purged_data": "被管理员清除",
|
||||
"relationship_severance_notification.relationships": "{count, plural, other {# 条关系}}",
|
||||
"relationship_severance_notification.types.account_suspension": "账户已被封禁",
|
||||
"relationship_severance_notification.types.domain_block": "域名已被封禁",
|
||||
"relationship_severance_notification.types.user_domain_block": "你屏蔽了这个域名",
|
||||
"relationship_severance_notification.view": "查看",
|
||||
"relative_time.days": "{number} 天前",
|
||||
"relative_time.full.days": "{number, plural, one {# 天} other {# 天}}前",
|
||||
"relative_time.full.hours": "{number, plural, one {# 小时} other {# 小时}}前",
|
||||
|
|
|
@ -471,6 +471,7 @@
|
|||
"notification.own_poll": "您的投票已結束",
|
||||
"notification.poll": "您曾投過的投票已經結束",
|
||||
"notification.reblog": "{name} 已轉嘟您的嘟文",
|
||||
"notification.severed_relationships": "已斷絕與 {name} 之服務關係",
|
||||
"notification.status": "{name} 剛剛嘟文",
|
||||
"notification.update": "{name} 已編輯嘟文",
|
||||
"notification_requests.accept": "接受",
|
||||
|
@ -587,6 +588,12 @@
|
|||
"refresh": "重新整理",
|
||||
"regeneration_indicator.label": "載入中…",
|
||||
"regeneration_indicator.sublabel": "您的首頁時間軸正在準備中!",
|
||||
"relationship_severance_notification.purged_data": "已被管理員清除",
|
||||
"relationship_severance_notification.relationships": "{count, plural, other {# 個服務關係}}",
|
||||
"relationship_severance_notification.types.account_suspension": "該帳號已被停權",
|
||||
"relationship_severance_notification.types.domain_block": "該網域已被停權",
|
||||
"relationship_severance_notification.types.user_domain_block": "您已封鎖此網域",
|
||||
"relationship_severance_notification.view": "檢視",
|
||||
"relative_time.days": "{number} 天",
|
||||
"relative_time.full.days": "{number, plural, other {# 天}}前",
|
||||
"relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前",
|
||||
|
|
|
@ -45,6 +45,7 @@ import {
|
|||
INIT_MEDIA_EDIT_MODAL,
|
||||
COMPOSE_CHANGE_MEDIA_DESCRIPTION,
|
||||
COMPOSE_CHANGE_MEDIA_FOCUS,
|
||||
COMPOSE_CHANGE_MEDIA_ORDER,
|
||||
COMPOSE_SET_STATUS,
|
||||
COMPOSE_FOCUS,
|
||||
} from '../actions/compose';
|
||||
|
@ -536,6 +537,14 @@ export default function compose(state = initialState, action) {
|
|||
return state.set('language', action.language);
|
||||
case COMPOSE_FOCUS:
|
||||
return state.set('focusDate', new Date()).update('text', text => text.length > 0 ? text : action.defaultText);
|
||||
case COMPOSE_CHANGE_MEDIA_ORDER:
|
||||
return state.update('media_attachments', list => {
|
||||
const indexA = list.findIndex(x => x.get('id') === action.a);
|
||||
const moveItem = list.get(indexA);
|
||||
const indexB = list.findIndex(x => x.get('id') === action.b);
|
||||
|
||||
return list.splice(indexA, 1).splice(indexB, 0, moveItem);
|
||||
});
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ export const notificationToMap = notification => ImmutableMap({
|
|||
created_at: notification.created_at,
|
||||
status: notification.status ? notification.status.id : null,
|
||||
report: notification.report ? fromJS(notification.report) : null,
|
||||
event: notification.event ? fromJS(notification.event) : null,
|
||||
});
|
||||
|
||||
const normalizeNotification = (state, notification, usePendingItems) => {
|
||||
|
|
1
app/javascript/material-icons/400-20px/settings-fill.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="m403-96-22-114q-23-9-44.5-21T296-259l-110 37-77-133 87-76q-2-12-3-24t-1-25q0-13 1-25t3-24l-87-76 77-133 110 37q19-16 40.5-28t44.5-21l22-114h154l22 114q23 9 44.5 21t40.5 28l110-37 77 133-87 76q2 12 3 24t1 25q0 13-1 25t-3 24l87 76-77 133-110-37q-19 16-40.5 28T579-210L557-96H403Zm77-240q60 0 102-42t42-102q0-60-42-102t-102-42q-60 0-102 42t-42 102q0 60 42 102t102 42Z"/></svg>
|
After Width: | Height: | Size: 470 B |
1
app/javascript/material-icons/400-20px/settings.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" width="20"><path d="m403-96-22-114q-23-9-44.5-21T296-259l-110 37-77-133 87-76q-2-12-3-24t-1-25q0-13 1-25t3-24l-87-76 77-133 110 37q19-16 40.5-28t44.5-21l22-114h154l22 114q23 9 44.5 21t40.5 28l110-37 77 133-87 76q2 12 3 24t1 25q0 13-1 25t-3 24l87 76-77 133-110-37q-19 16-40.5 28T579-210L557-96H403Zm59-72h36l19-99q38-7 71-26t57-48l96 32 18-30-76-67q6-17 9.5-35.5T696-480q0-20-3.5-38.5T683-554l76-67-18-30-96 32q-24-29-57-48t-71-26l-19-99h-36l-19 99q-38 7-71 26t-57 48l-96-32-18 30 76 67q-6 17-9.5 35.5T264-480q0 20 3.5 38.5T277-406l-76 67 18 30 96-32q24 29 57 48t71 26l19 99Zm18-168q60 0 102-42t42-102q0-60-42-102t-102-42q-60 0-102 42t-42 102q0 60 42 102t102 42Zm0-144Z"/></svg>
|
After Width: | Height: | Size: 754 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m480-240 160-160-56-56-64 64v-168h-80v168l-64-64-56 56 160 160ZM200-120q-33 0-56.5-23.5T120-200v-499q0-14 4.5-27t13.5-24l50-61q11-14 27.5-21.5T250-840h460q18 0 34.5 7.5T772-811l50 61q9 11 13.5 24t4.5 27v499q0 33-23.5 56.5T760-120H200Zm16-600h528l-34-40H250l-34 40Z"/></svg>
|
Before Width: | Height: | Size: 370 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m480-240 160-160-56-56-64 64v-168h-80v168l-64-64-56 56 160 160ZM200-640v440h560v-440H200Zm0 520q-33 0-56.5-23.5T120-200v-499q0-14 4.5-27t13.5-24l50-61q11-14 27.5-21.5T250-840h460q18 0 34.5 7.5T772-811l50 61q9 11 13.5 24t4.5 27v499q0 33-23.5 56.5T760-120H200Zm16-600h528l-34-40H250l-34 40Zm264 300Z"/></svg>
|
Before Width: | Height: | Size: 403 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M481-83Q347-218 267.5-301t-121-138q-41.5-55-54-94T80-620q0-92 64-156t156-64q45 0 87 16.5t75 47.5l-62 216h120l-34 335 114-375H480l71-212q25-14 52.5-21t56.5-7q92 0 156 64t64 156q0 48-13 88t-55 95.5q-42 55.5-121 138T481-83Z"/></svg>
|
After Width: | Height: | Size: 326 B |
1
app/javascript/material-icons/400-24px/heart_broken.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M481-83Q347-218 267.5-301t-121-138q-41.5-55-54-94T80-620q0-92 64-156t156-64q45 0 87 16.5t75 47.5l-62 216h120l-34 335 114-375H480l71-212q25-14 52.5-21t56.5-7q92 0 156 64t64 156q0 48-13 88t-55 95.5q-42 55.5-121 138T481-83Zm-71-186 21-211H294l75-263q-16-8-33.5-12.5T300-760q-58 0-99 41t-41 99q0 31 11.5 62t40 70.5q28.5 39.5 77 92T410-269Zm188-48q111-113 156.5-180T800-620q0-58-41-99t-99-41q-11 0-22 1.5t-22 5.5l-24 73h116L598-317Zm110-363ZM294-480Z"/></svg>
|
After Width: | Height: | Size: 551 B |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-451q-18-11-29-28.5T80-680v-120q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v120q0 23-11 40.5T840-611v451q0 33-23.5 56.5T760-80H200Zm-40-600h640v-120H160v120Zm200 280h240v-80H360v80Z"/></svg>
|
After Width: | Height: | Size: 325 B |
1
app/javascript/material-icons/400-24px/inventory_2.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-80q-33 0-56.5-23.5T120-160v-451q-18-11-29-28.5T80-680v-120q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v120q0 23-11 40.5T840-611v451q0 33-23.5 56.5T760-80H200Zm0-520v440h560v-440H200Zm-40-80h640v-120H160v120Zm200 280h240v-80H360v80Zm120 20Z"/></svg>
|
After Width: | Height: | Size: 356 B |
1
app/javascript/material-icons/400-24px/link_off-fill.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m770-302-60-62q40-11 65-42.5t25-73.5q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 57-29.5 105T770-302ZM634-440l-80-80h86v80h-6ZM792-56 56-792l56-56 736 736-56 56ZM440-280H280q-83 0-141.5-58.5T80-480q0-69 42-123t108-71l74 74h-24q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h65l79 80H320Z"/></svg>
|
After Width: | Height: | Size: 414 B |
1
app/javascript/material-icons/400-24px/link_off.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m770-302-60-62q40-11 65-42.5t25-73.5q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 57-29.5 105T770-302ZM634-440l-80-80h86v80h-6ZM792-56 56-792l56-56 736 736-56 56ZM440-280H280q-83 0-141.5-58.5T80-480q0-69 42-123t108-71l74 74h-24q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h65l79 80H320Z"/></svg>
|
After Width: | Height: | Size: 414 B |
|
@ -1688,6 +1688,7 @@ body > [data-popper-placement] {
|
|||
|
||||
.animated-number {
|
||||
color: $secondary-text-color;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4847,6 +4848,11 @@ a.status-card {
|
|||
position: relative;
|
||||
margin-top: 5px;
|
||||
z-index: 2;
|
||||
background: var(--dropdown-background-color);
|
||||
backdrop-filter: var(--background-filter);
|
||||
border: 1px solid var(--dropdown-border-color);
|
||||
box-shadow: var(--dropdown-shadow);
|
||||
border-radius: 5px;
|
||||
|
||||
.emoji-mart-scroll {
|
||||
transition: opacity 200ms ease;
|
||||
|
@ -8580,6 +8586,12 @@ noscript {
|
|||
color: $darker-text-color;
|
||||
margin-bottom: 15px;
|
||||
text-align: center;
|
||||
|
||||
.icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8811,8 +8823,9 @@ noscript {
|
|||
|
||||
.safety-action-modal,
|
||||
.interaction-modal {
|
||||
max-width: 90vw;
|
||||
max-width: 100vw;
|
||||
width: 600px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.interaction-modal {
|
||||
|
|
|
@ -14,21 +14,9 @@
|
|||
}
|
||||
|
||||
.emoji-mart-bar {
|
||||
border: 0 solid var(--dropdown-border-color);
|
||||
|
||||
&:first-child {
|
||||
border-bottom-width: 1px;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
background: var(--dropdown-border-color);
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-top-width: 1px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.emoji-mart-anchors {
|
||||
|
@ -94,7 +82,6 @@
|
|||
height: 270px;
|
||||
max-height: 35vh;
|
||||
padding: 0 6px 6px;
|
||||
background: var(--dropdown-background-color);
|
||||
will-change: transform;
|
||||
|
||||
&::-webkit-scrollbar-track:hover,
|
||||
|
@ -106,7 +93,6 @@
|
|||
.emoji-mart-search {
|
||||
padding: 10px;
|
||||
padding-inline-end: 45px;
|
||||
background: var(--dropdown-background-color);
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
|
@ -195,7 +181,6 @@
|
|||
width: 100%;
|
||||
font-weight: 500;
|
||||
padding: 5px 6px;
|
||||
background: var(--dropdown-background-color);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
.status__content__text,
|
||||
.e-content,
|
||||
.edit-indicator__content,
|
||||
.reply-indicator__content {
|
||||
pre,
|
||||
blockquote {
|
||||
|
@ -55,10 +56,3 @@
|
|||
list-style-type: decimal;
|
||||
}
|
||||
}
|
||||
|
||||
.reply-indicator__content {
|
||||
blockquote {
|
||||
border-left-color: $inverted-text-color;
|
||||
color: $inverted-text-color;
|
||||
}
|
||||
}
|
||||
|
|
41
app/models/account_relationship_severance_event.rb
Normal file
|
@ -0,0 +1,41 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
#
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: account_relationship_severance_events
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# account_id :bigint(8) not null
|
||||
# relationship_severance_event_id :bigint(8) not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# followers_count :integer default(0), not null
|
||||
# following_count :integer default(0), not null
|
||||
#
|
||||
class AccountRelationshipSeveranceEvent < ApplicationRecord
|
||||
self.ignored_columns += %w(
|
||||
relationships_count
|
||||
)
|
||||
|
||||
belongs_to :account
|
||||
belongs_to :relationship_severance_event
|
||||
|
||||
has_many :severed_relationships, through: :relationship_severance_event
|
||||
|
||||
delegate :type,
|
||||
:target_name,
|
||||
:purged,
|
||||
:purged?,
|
||||
to: :relationship_severance_event,
|
||||
prefix: false
|
||||
|
||||
before_create :set_relationships_count!
|
||||
|
||||
private
|
||||
|
||||
def set_relationships_count!
|
||||
self.followers_count = severed_relationships.about_local_account(account).passive.count
|
||||
self.following_count = severed_relationships.about_local_account(account).active.count
|
||||
end
|
||||
end
|
|
@ -20,6 +20,7 @@ class CanonicalEmailBlock < ApplicationRecord
|
|||
validates :canonical_email_hash, presence: true, uniqueness: true
|
||||
|
||||
scope :matching_email, ->(email) { where(canonical_email_hash: email_to_canonical_email_hash(email)) }
|
||||
scope :matching_account, ->(account) { matching_email(account&.user_email).or(where(reference_account: account)) }
|
||||
|
||||
def to_log_human_identifier
|
||||
canonical_email_hash
|
||||
|
|
|
@ -83,6 +83,11 @@ module Account::Interactions
|
|||
has_many :following, -> { order('follows.id desc') }, through: :active_relationships, source: :target_account
|
||||
has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account
|
||||
|
||||
with_options class_name: 'SeveredRelationship', dependent: :destroy do
|
||||
has_many :severed_relationships, foreign_key: 'local_account_id', inverse_of: :local_account
|
||||
has_many :remote_severed_relationships, foreign_key: 'remote_account_id', inverse_of: :remote_account
|
||||
end
|
||||
|
||||
# Account notes
|
||||
has_many :account_notes, dependent: :destroy
|
||||
|
||||
|
|
|
@ -27,6 +27,16 @@ module Account::Merging
|
|||
end
|
||||
end
|
||||
|
||||
[
|
||||
Notification, NotificationPermission, NotificationRequest
|
||||
].each do |klass|
|
||||
klass.where(from_account_id: other_account.id).reorder(nil).find_each do |record|
|
||||
record.update_attribute(:from_account_id, id)
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
next
|
||||
end
|
||||
end
|
||||
|
||||
target_classes = [
|
||||
Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin,
|
||||
AccountNote
|
||||
|
@ -48,6 +58,18 @@ module Account::Merging
|
|||
record.update_attribute(:account_warning_id, id)
|
||||
end
|
||||
|
||||
SeveredRelationship.about_local_account(other_account).reorder(nil).find_each do |record|
|
||||
record.update_attribute(:local_account_id, id)
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
next
|
||||
end
|
||||
|
||||
SeveredRelationship.about_remote_account(other_account).reorder(nil).find_each do |record|
|
||||
record.update_attribute(:remote_account_id, id)
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
next
|
||||
end
|
||||
|
||||
# Some follow relationships have moved, so the cache is stale
|
||||
Rails.cache.delete_matched("followers_hash:#{id}:*")
|
||||
Rails.cache.delete_matched("relationships:#{id}:*")
|
||||
|
|
27
app/models/concerns/browser_detection.rb
Normal file
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module BrowserDetection
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
before_save :assign_user_agent
|
||||
end
|
||||
|
||||
def detection
|
||||
@detection ||= Browser.new(user_agent)
|
||||
end
|
||||
|
||||
def browser
|
||||
detection.id
|
||||
end
|
||||
|
||||
def platform
|
||||
detection.platform.id
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def assign_user_agent
|
||||
self.user_agent ||= ''
|
||||
end
|
||||
end
|
|
@ -27,10 +27,6 @@ module User::HasSettings
|
|||
settings['default_sensitive']
|
||||
end
|
||||
|
||||
def setting_unfollow_modal
|
||||
settings['web.unfollow_modal']
|
||||
end
|
||||
|
||||
def setting_boost_modal
|
||||
settings['web.reblog_modal']
|
||||
end
|
||||
|
|
|
@ -16,21 +16,11 @@
|
|||
#
|
||||
|
||||
class LoginActivity < ApplicationRecord
|
||||
include BrowserDetection
|
||||
|
||||
enum :authentication_method, { password: 'password', otp: 'otp', webauthn: 'webauthn', sign_in_token: 'sign_in_token', omniauth: 'omniauth' }
|
||||
|
||||
belongs_to :user
|
||||
|
||||
validates :authentication_method, inclusion: { in: authentication_methods.keys }
|
||||
|
||||
def detection
|
||||
@detection ||= Browser.new(user_agent)
|
||||
end
|
||||
|
||||
def browser
|
||||
detection.id
|
||||
end
|
||||
|
||||
def platform
|
||||
detection.platform.id
|
||||
end
|
||||
end
|
||||
|
|
|
@ -54,6 +54,9 @@ class Notification < ApplicationRecord
|
|||
update: {
|
||||
filterable: false,
|
||||
}.freeze,
|
||||
severed_relationships: {
|
||||
filterable: false,
|
||||
}.freeze,
|
||||
'admin.sign_up': {
|
||||
filterable: false,
|
||||
}.freeze,
|
||||
|
@ -86,6 +89,7 @@ class Notification < ApplicationRecord
|
|||
belongs_to :favourite, inverse_of: :notification
|
||||
belongs_to :poll, inverse_of: false
|
||||
belongs_to :report, inverse_of: false
|
||||
belongs_to :account_relationship_severance_event, inverse_of: false
|
||||
end
|
||||
|
||||
validates :type, inclusion: { in: TYPES }
|
||||
|
@ -182,6 +186,11 @@ class Notification < ApplicationRecord
|
|||
self.from_account_id = activity&.status&.account_id
|
||||
when 'Account'
|
||||
self.from_account_id = activity&.id
|
||||
when 'AccountRelationshipSeveranceEvent'
|
||||
# These do not really have an originating account, but this is mandatory
|
||||
# in the data model, and the recipient's account will by definition
|
||||
# always exist
|
||||
self.from_account_id = account_id
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# id :bigint(8) not null, primary key
|
||||
# account_id :bigint(8) not null
|
||||
# from_account_id :bigint(8) not null
|
||||
# last_status_id :bigint(8) not null
|
||||
# last_status_id :bigint(8)
|
||||
# notifications_count :bigint(8) default(0), not null
|
||||
# dismissed :boolean default(FALSE), not null
|
||||
# created_at :datetime not null
|
||||
|
|
56
app/models/relationship_severance_event.rb
Normal file
|
@ -0,0 +1,56 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: relationship_severance_events
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# type :integer not null
|
||||
# target_name :string not null
|
||||
# purged :boolean default(FALSE), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
class RelationshipSeveranceEvent < ApplicationRecord
|
||||
self.inheritance_column = nil
|
||||
|
||||
has_many :severed_relationships, inverse_of: :relationship_severance_event, dependent: :delete_all
|
||||
|
||||
enum :type, {
|
||||
domain_block: 0,
|
||||
user_domain_block: 1,
|
||||
account_suspension: 2,
|
||||
}
|
||||
|
||||
scope :about_local_account, ->(account) { where(id: SeveredRelationship.about_local_account(account).select(:relationship_severance_event_id)) }
|
||||
|
||||
def import_from_active_follows!(follows)
|
||||
import_from_follows!(follows, true)
|
||||
end
|
||||
|
||||
def import_from_passive_follows!(follows)
|
||||
import_from_follows!(follows, false)
|
||||
end
|
||||
|
||||
def affected_local_accounts
|
||||
Account.where(id: severed_relationships.select(:local_account_id))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def import_from_follows!(follows, active)
|
||||
SeveredRelationship.insert_all(
|
||||
follows.pluck(:account_id, :target_account_id, :show_reblogs, :notify, :languages).map do |account_id, target_account_id, show_reblogs, notify, languages|
|
||||
{
|
||||
local_account_id: active ? account_id : target_account_id,
|
||||
remote_account_id: active ? target_account_id : account_id,
|
||||
show_reblogs: show_reblogs,
|
||||
notify: notify,
|
||||
languages: languages,
|
||||
relationship_severance_event_id: id,
|
||||
direction: active ? :active : :passive,
|
||||
}
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
|
@ -16,6 +16,8 @@
|
|||
#
|
||||
|
||||
class SessionActivation < ApplicationRecord
|
||||
include BrowserDetection
|
||||
|
||||
belongs_to :user, inverse_of: :session_activations
|
||||
belongs_to :access_token, class_name: 'Doorkeeper::AccessToken', dependent: :destroy, optional: true
|
||||
belongs_to :web_push_subscription, class_name: 'Web::PushSubscription', dependent: :destroy, optional: true
|
||||
|
@ -24,19 +26,6 @@ class SessionActivation < ApplicationRecord
|
|||
to: :access_token,
|
||||
allow_nil: true
|
||||
|
||||
def detection
|
||||
@detection ||= Browser.new(user_agent)
|
||||
end
|
||||
|
||||
def browser
|
||||
detection.id
|
||||
end
|
||||
|
||||
def platform
|
||||
detection.platform.id
|
||||
end
|
||||
|
||||
before_save :assign_user_agent
|
||||
before_create :assign_access_token
|
||||
|
||||
class << self
|
||||
|
@ -67,10 +56,6 @@ class SessionActivation < ApplicationRecord
|
|||
|
||||
private
|
||||
|
||||
def assign_user_agent
|
||||
self.user_agent = '' if user_agent.nil?
|
||||
end
|
||||
|
||||
def assign_access_token
|
||||
self.access_token = Doorkeeper::AccessToken.create!(access_token_attributes)
|
||||
end
|
||||
|
|
41
app/models/severed_relationship.rb
Normal file
|
@ -0,0 +1,41 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: severed_relationships
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# relationship_severance_event_id :bigint(8) not null
|
||||
# local_account_id :bigint(8) not null
|
||||
# remote_account_id :bigint(8) not null
|
||||
# direction :integer not null
|
||||
# show_reblogs :boolean
|
||||
# notify :boolean
|
||||
# languages :string is an Array
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
class SeveredRelationship < ApplicationRecord
|
||||
belongs_to :relationship_severance_event
|
||||
belongs_to :local_account, class_name: 'Account'
|
||||
belongs_to :remote_account, class_name: 'Account'
|
||||
|
||||
enum :direction, {
|
||||
passive: 0, # analogous to `local_account.passive_relationships`
|
||||
active: 1, # analogous to `local_account.active_relationships`
|
||||
}
|
||||
|
||||
scope :about_local_account, ->(account) { where(local_account: account) }
|
||||
scope :about_remote_account, ->(account) { where(remote_account: account) }
|
||||
|
||||
scope :active, -> { where(direction: :active) }
|
||||
scope :passive, -> { where(direction: :passive) }
|
||||
|
||||
def account
|
||||
active? ? local_account : remote_account
|
||||
end
|
||||
|
||||
def target_account
|
||||
active? ? remote_account : local_account
|
||||
end
|
||||
end
|
|
@ -14,7 +14,6 @@
|
|||
# sign_in_count :integer default(0), not null
|
||||
# current_sign_in_at :datetime
|
||||
# last_sign_in_at :datetime
|
||||
# admin :boolean default(FALSE), not null
|
||||
# confirmation_token :string
|
||||
# confirmed_at :datetime
|
||||
# confirmation_sent_at :datetime
|
||||
|
@ -29,7 +28,6 @@
|
|||
# otp_backup_codes :string is an Array
|
||||
# account_id :bigint(8) not null
|
||||
# disabled :boolean default(FALSE), not null
|
||||
# moderator :boolean default(FALSE), not null
|
||||
# invite_id :bigint(8)
|
||||
# chosen_languages :string is an Array
|
||||
# created_by_application_id :bigint(8)
|
||||
|
|
|
@ -27,7 +27,6 @@ class UserSettings
|
|||
setting :disable_swiping, default: false
|
||||
setting :delete_modal, default: true
|
||||
setting :reblog_modal, default: false
|
||||
setting :unfollow_modal, default: true
|
||||
setting :reduce_motion, default: false
|
||||
setting :expand_content_warnings, default: false
|
||||
setting :display_media, default: 'default', in: %w(default show_all hide_all)
|
||||
|
|
|
@ -17,7 +17,6 @@ class InitialStateSerializer < ActiveModel::Serializer
|
|||
|
||||
if object.current_account
|
||||
store[:me] = object.current_account.id.to_s
|
||||
store[:unfollow_modal] = object_account_user.setting_unfollow_modal
|
||||
store[:boost_modal] = object_account_user.setting_boost_modal
|
||||
store[:delete_modal] = object_account_user.setting_delete_modal
|
||||
store[:auto_play_gif] = object_account_user.setting_auto_play_gif
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class REST::AccountRelationshipSeveranceEventSerializer < ActiveModel::Serializer
|
||||
attributes :id, :type, :purged, :target_name, :followers_count, :following_count, :created_at
|
||||
|
||||
def id
|
||||
object.id.to_s
|
||||
end
|
||||
end
|