Compare commits

..

1 Commits

Author SHA1 Message Date
renovate[bot]
52f54ee8a1
chore(deps): update dependency aws-sdk-s3 to v1.192.0 2025-07-03 07:29:11 +00:00
214 changed files with 1241 additions and 3172 deletions

View File

@ -14,7 +14,6 @@ on:
- config/locales/devise.en.yml
- config/locales/doorkeeper.en.yml
- .github/workflows/crowdin-upload.yml
workflow_dispatch:
jobs:
upload-translations:

View File

@ -2,17 +2,7 @@
All notable changes to this project will be documented in this file.
## [4.4.1] - 2025-07-09
### Fixed
- Fix nearly every sub-directory being crawled as part of Vite build (#35323 by @ClearlyClaire)
- Fix assets not building when Redis is unavailable (#35321 by @oneiros)
- Fix replying from media modal or pop-in-player tagging user `@undefined` (#35317 by @ClearlyClaire)
- Fix support for special characters in various environment variables (#35314 by @mjankowski and @ClearlyClaire)
- Fix some database migrations failing for indexes manually removed by admins (#35309 by @mjankowski)
## [4.4.0] - 2025-07-08
## [4.4.0] - UNRELEASED
### Added
@ -48,7 +38,7 @@ All notable changes to this project will be documented in this file.
Server administrators can now chose to opt in to transmit referrer information when following an external link. Only the domain name is transmitted, not the referrer path.
- Add double tap to zoom and swipe to dismiss to media modal in web UI (#34210 by @Gargron)
- Add link from Web UI for Hashtags to the Moderation UI (#31448 by @ThisIsMissEm)
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126, #35127 and #35233 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126 and #35127 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
Server administrators can now fill in Terms of Service and notify their users of upcoming changes.
- Add optional bulk mailer settings (#35191 and #35203 by @oneiros)\
This adds the optional environment variables `BULK_SMTP_PORT`, `BULK_SMTP_SERVER`, `BULK_SMTP_LOGIN` and so on analogous to `SMTP_PORT`, `SMTP_SERVER`, `SMTP_LOGIN` and related SMTP configuration environment variables.\
@ -61,7 +51,7 @@ All notable changes to this project will be documented in this file.
- Add ability to dismiss alt text badge by tapping it in web UI (#33737 by @Gargron)
- Add loading indicator to timeline gap indicators in web UI (#33762 by @Gargron)
- Add interaction modal when trying to interact with a poll while logged out (#32609 by @ThisIsMissEm)
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033, #35218, #35262 and #35263 by @oneiros)\
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033 and #35218 by @oneiros)\
This is a first step towards supporting “Fediverse Auxiliary Service Providers” (https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications). This is mostly interesting to developers who would like to implement their own FASP, but also includes the capability to share data with a discovery provider (see https://www.fediscovery.org).
- Add ability for admins to send announcements to all users via email (#33928 and #34411 by @ClearlyClaire)\
This is meant for critical announcements only, as this will potentially send a lot of emails and cannot be opted out of by users.
@ -74,7 +64,7 @@ All notable changes to this project will be documented in this file.
- Add dropdown menu with quick actions to lists of accounts in web UI (#34391, #34709, and #34767 by @Gargron, @diondiondion, and @mkljczk)
- Add support for displaying “year in review” notification in web UI (#32710, #32765, #32709, #32807, #32914, #33148, and #33882 by @Gargron and @mjankowski)\
Note that the notification is currently not generated automatically, and at the moment requires a manual undocumented administrator action.
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033, #35109 and #35278 by @oneiros)\
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033 and #35109 by @oneiros)\
For now, this needs to be explicitly enabled through the `http_message_signatures` feature flag (`EXPERIMENTAL_FEATURES=http_message_signatures`). This currently only covers verifying such signatures (inbound HTTP requests), not issuing them (outbound HTTP requests).
- Add experimental Async Refreshes API (#34918 by @oneiros)
- Add experimental server-side feature to fetch remote replies (#32615, #34147, #34149, #34151, #34615, #34682, and #34702 by @ClearlyClaire and @sneakers-the-rat)\
@ -228,7 +218,6 @@ All notable changes to this project will be documented in this file.
- Fix admin dashboard crash on specific Elasticsearch connection errors (#34683 by @ClearlyClaire)
- Fix OIDC account creation failing for long display names (#34639 by @defnull)
- Fix use of the deprecated `/api/v1/instance` endpoint in the moderation interface (#34613 by @renchap)
- Fix inaccessible “Clear search” button (#35152 and #35281 by @diondiondion)
- Fix search operators sometimes getting lost (#35190 by @ClearlyClaire)
- Fix directory scroll position reset (#34560 by @przucidlo)
- Fix needlessly complex SVG paths for oEmbed and logo (#34538 by @edent)
@ -243,7 +232,7 @@ All notable changes to this project will be documented in this file.
- Fix extra space under left-indented vertical videos (#34313 by @ClearlyClaire)
- Fix glitchy iOS media attachment drag interactions (#35057 by @diondiondion)
- Fix zoomed images being blurry in Safari (#35052 by @diondiondion)
- Fix redundant focus stop within status component in Web UI and make focus style more noticeable (#35037, #35051, #35096, #35150 and #35251 by @diondiondion)
- Fix redundant focus stop within status component in Web UI and make focus style more noticeable (#35037, #35051, #35096 and #35150 by @diondiondion)
- Fix digits in media player time readout not having a consistent width (#35038 by @diondiondion)
- Fix wrong text color for “Open in advanced web interface” banner in high-contrast theme (#35032 by @diondiondion)
- Fix hover card for limited accounts not hiding information as expected (#35024 by @diondiondion)

View File

@ -186,7 +186,7 @@ FROM build AS libvips
# libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"]
# renovate: datasource=github-releases depName=libvips packageName=libvips/libvips
ARG VIPS_VERSION=8.17.1
ARG VIPS_VERSION=8.17.0
# libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"]
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download

View File

@ -90,13 +90,13 @@ GEM
public_suffix (>= 2.0.2, < 7.0)
aes_key_wrap (1.1.0)
android_key_attestation (0.3.0)
annotaterb (4.17.0)
annotaterb (4.16.0)
activerecord (>= 6.0.0)
activesupport (>= 6.0.0)
ast (2.4.3)
attr_required (1.0.2)
aws-eventstream (1.4.0)
aws-partitions (1.1127.0)
aws-partitions (1.1124.0)
aws-sdk-core (3.215.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
@ -365,7 +365,7 @@ GEM
json-ld-preloaded (3.3.1)
json-ld (~> 3.3)
rdf (~> 3.3)
json-schema (5.2.1)
json-schema (5.1.1)
addressable (~> 2.8)
bigdecimal (~> 3.1)
jsonapi-renderer (0.2.2)
@ -403,7 +403,7 @@ GEM
rexml
link_header (0.0.8)
lint_roller (1.1.0)
linzer (0.7.7)
linzer (0.7.3)
cgi (~> 0.4.2)
forwardable (~> 1.3, >= 1.3.3)
logger (~> 1.7, >= 1.7.0)
@ -682,7 +682,7 @@ GEM
activesupport (= 8.0.2)
bundler (>= 1.15.0)
railties (= 8.0.2)
rails-dom-testing (2.3.0)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
@ -761,7 +761,7 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 9)
rspec-support (3.13.4)
rubocop (1.78.0)
rubocop (1.77.0)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@ -815,7 +815,7 @@ GEM
sanitize (7.0.0)
crass (~> 1.0.2)
nokogiri (>= 1.16.8)
scenic (1.9.0)
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
securerandom (0.4.1)

View File

@ -51,8 +51,8 @@ Mastodon is a **free, open-source social network server** based on [ActivityPub]
- [Redis](https://redis.io/) and [Sidekiq](https://sidekiq.org/) are used for caching and queueing.
- [Node.js](https://nodejs.org/) powers the streaming API.
- [React.js](https://reactjs.org/) and [Redux](https://redux.js.org/) are used for the dynamic parts of the interface.
- [BrowserStack](https://www.browserstack.com/) supports testing on real devices and browsers. (This project is tested with BrowserStack)
- [Chromatic](https://www.chromatic.com/) provides visual regression testing. (This project is tested with Chromatic)
- [BrowserStack](https://www.browserstack.com/) supports testing on real devices and browsers.
- [Chromatic](https://www.chromatic.com/) provides visual regression testing.
### Requirements

View File

@ -13,9 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
## Supported Versions
| Version | Supported |
| ------- | ---------------- |
| 4.4.x | Yes |
| 4.3.x | Yes |
| 4.2.x | Until 2026-01-08 |
| < 4.2 | No |
| Version | Supported |
| ------- | --------- |
| 4.3.x | Yes |
| 4.2.x | Yes |
| < 4.2 | No |

View File

@ -14,20 +14,16 @@ module Admin
def create
authorize @account, :show?
@account_action = Admin::AccountAction.new(resource_params)
@account_action.target_account = @account
@account_action.current_account = current_account
account_action = Admin::AccountAction.new(resource_params)
account_action.target_account = @account
account_action.current_account = current_account
if @account_action.save
if @account_action.with_report?
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: resource_params[:report_id])
else
redirect_to admin_account_path(@account.id)
end
account_action.save!
if account_action.with_report?
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: resource_params[:report_id])
else
@warning_presets = AccountWarningPreset.all
render :new
redirect_to admin_account_path(@account.id)
end
end

View File

@ -13,9 +13,27 @@ class Admin::Reports::ActionsController < Admin::BaseController
case action_from_button
when 'delete', 'mark_as_sensitive'
Admin::StatusBatchAction.new(status_batch_action_params).save!
status_batch_action = Admin::StatusBatchAction.new(
type: action_from_button,
status_ids: @report.status_ids,
current_account: current_account,
report_id: @report.id,
send_email_notification: !@report.spam?,
text: params[:text]
)
status_batch_action.save!
when 'silence', 'suspend'
Admin::AccountAction.new(account_action_params).save!
account_action = Admin::AccountAction.new(
type: action_from_button,
report_id: @report.id,
target_account: @report.target_account,
current_account: current_account,
send_email_notification: !@report.spam?,
text: params[:text]
)
account_action.save!
else
return redirect_to admin_report_path(@report), alert: I18n.t('admin.reports.unknown_action_msg', action: action_from_button)
end
@ -25,26 +43,6 @@ class Admin::Reports::ActionsController < Admin::BaseController
private
def status_batch_action_params
shared_params
.merge(status_ids: @report.status_ids)
end
def account_action_params
shared_params
.merge(target_account: @report.target_account)
end
def shared_params
{
current_account: current_account,
report_id: @report.id,
send_email_notification: !@report.spam?,
text: params[:text],
type: action_from_button,
}
end
def set_report
@report = Report.find(params[:report_id])
end

View File

@ -38,7 +38,8 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
private
def record_login_activity
@user.login_activities.create(
LoginActivity.create(
user: @user,
success: true,
authentication_method: :omniauth,
provider: @provider,

View File

@ -151,11 +151,12 @@ class Auth::SessionsController < Devise::SessionsController
sign_in(user)
flash.delete(:notice)
user.login_activities.create(
request_details.merge(
authentication_method: security_measure,
success: true
)
LoginActivity.create(
user: user,
success: true,
authentication_method: security_measure,
ip: request.remote_ip,
user_agent: request.user_agent
)
UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if @login_is_suspicious
@ -166,12 +167,13 @@ class Auth::SessionsController < Devise::SessionsController
end
def on_authentication_failure(user, security_measure, failure_reason)
user.login_activities.create(
request_details.merge(
authentication_method: security_measure,
failure_reason: failure_reason,
success: false
)
LoginActivity.create(
user: user,
success: false,
authentication_method: security_measure,
failure_reason: failure_reason,
ip: request.remote_ip,
user_agent: request.user_agent
)
# Only send a notification email every hour at most
@ -180,13 +182,6 @@ class Auth::SessionsController < Devise::SessionsController
UserMailer.failed_2fa(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later!
end
def request_details
{
ip: request.remote_ip,
user_agent: request.user_agent,
}
end
def second_factor_attempts_key(user)
"2fa_auth_attempts:#{user.id}:#{Time.now.utc.hour}"
end

View File

@ -64,9 +64,6 @@ module SignatureVerification
return (@signed_request_actor = actor) if signed_request.verified?(actor)
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri}"
rescue Mastodon::MalformedHeaderError => e
@signature_verification_failure_code = 400
fail_with! e.message
rescue Mastodon::SignatureVerificationError => e
fail_with! e.message
rescue *Mastodon::HTTP_CONNECTION_ERRORS => e

View File

@ -5,6 +5,6 @@ class Settings::LoginActivitiesController < Settings::BaseController
skip_before_action :require_functional!
def index
@login_activities = current_user.login_activities.order(id: :desc).page(params[:page])
@login_activities = LoginActivity.where(user: current_user).order(id: :desc).page(params[:page])
end
end

View File

@ -66,7 +66,7 @@ module ApplicationHelper
def provider_sign_in_link(provider)
label = Devise.omniauth_configs[provider]&.strategy&.display_name.presence || I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize)
link_to label, omniauth_authorize_path(:user, provider), class: "btn button-#{provider}", method: :post
link_to label, omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
end
def locale_direction

View File

@ -26,12 +26,6 @@ module ContextHelper
suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' },
attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } },
quote_requests: { 'QuoteRequest' => 'https://w3id.org/fep/044f#QuoteRequest' },
quotes: {
'quote' => 'https://w3id.org/fep/044f#quote',
'quoteUri' => 'http://fedibird.com/ns#quoteUri',
'_misskey_quote' => 'https://misskey-hub.net/ns#_misskey_quote',
'quoteAuthorization' => { '@id' => 'https://w3id.org/fep/044f#quoteAuthorization', '@type' => '@id' },
},
interaction_policies: {
'gts' => 'https://gotosocial.org/ns#',
'interactionPolicy' => { '@id' => 'gts:interactionPolicy', '@type' => '@id' },

View File

@ -1,30 +1,12 @@
import { useCallback } from 'react';
import { useLinks } from 'mastodon/hooks/useLinks';
interface AccountBioProps {
export const AccountBio: React.FC<{
note: string;
className: string;
dropdownAccountId?: string;
}
}> = ({ note, className }) => {
const handleClick = useLinks();
export const AccountBio: React.FC<AccountBioProps> = ({
note,
className,
dropdownAccountId,
}) => {
const handleClick = useLinks(!!dropdownAccountId);
const handleNodeChange = useCallback(
(node: HTMLDivElement | null) => {
if (!dropdownAccountId || !node || node.childNodes.length === 0) {
return;
}
addDropdownToHashtags(node, dropdownAccountId);
},
[dropdownAccountId],
);
if (note.length === 0) {
if (note.length === 0 || note === '<p></p>') {
return null;
}
@ -33,28 +15,6 @@ export const AccountBio: React.FC<AccountBioProps> = ({
className={`${className} translate`}
dangerouslySetInnerHTML={{ __html: note }}
onClickCapture={handleClick}
ref={handleNodeChange}
/>
);
};
function addDropdownToHashtags(node: HTMLElement | null, accountId: string) {
if (!node) {
return;
}
for (const childNode of node.childNodes) {
if (!(childNode instanceof HTMLElement)) {
continue;
}
if (
childNode instanceof HTMLAnchorElement &&
(childNode.classList.contains('hashtag') ||
childNode.innerText.startsWith('#')) &&
!childNode.dataset.menuHashtag
) {
childNode.dataset.menuHashtag = accountId;
} else if (childNode.childNodes.length > 0) {
addDropdownToHashtags(childNode, accountId);
}
}
}

View File

@ -5,7 +5,6 @@ import {
useCallback,
cloneElement,
Children,
useId,
} from 'react';
import classNames from 'classnames';
@ -17,7 +16,6 @@ import Overlay from 'react-overlays/Overlay';
import type {
OffsetValue,
UsePopperOptions,
Placement,
} from 'react-overlays/esm/usePopper';
import { fetchRelationships } from 'mastodon/actions/accounts';
@ -297,11 +295,6 @@ interface DropdownProps<Item = MenuItem> {
title?: string;
disabled?: boolean;
scrollable?: boolean;
placement?: Placement;
/**
* Prevent the `ScrollableList` with this scrollKey
* from being scrolled while the dropdown is open
*/
scrollKey?: string;
status?: ImmutableMap<string, unknown>;
forceDropdown?: boolean;
@ -323,7 +316,6 @@ export const Dropdown = <Item = MenuItem,>({
title = 'Menu',
disabled,
scrollable,
placement = 'bottom',
status,
forceDropdown = false,
renderItem,
@ -339,15 +331,16 @@ export const Dropdown = <Item = MenuItem,>({
);
const [currentId] = useState(id++);
const open = currentId === openDropdownId;
const buttonRef = useRef<HTMLButtonElement | null>(null);
const menuId = useId();
const activeElement = useRef<HTMLElement | null>(null);
const targetRef = useRef<HTMLButtonElement | null>(null);
const prefetchAccountId = status
? status.getIn(['account', 'id'])
: undefined;
const handleClose = useCallback(() => {
if (buttonRef.current) {
buttonRef.current.focus({ preventScroll: true });
if (activeElement.current) {
activeElement.current.focus({ preventScroll: true });
activeElement.current = null;
}
dispatch(
@ -382,7 +375,7 @@ export const Dropdown = <Item = MenuItem,>({
[handleClose, onItemClick, items],
);
const toggleDropdown = useCallback(
const handleClick = useCallback(
(e: React.MouseEvent | React.KeyboardEvent) => {
const { type } = e;
@ -430,6 +423,38 @@ export const Dropdown = <Item = MenuItem,>({
],
);
const handleMouseDown = useCallback(() => {
if (!open && document.activeElement instanceof HTMLElement) {
activeElement.current = document.activeElement;
}
}, [open]);
const handleButtonKeyDown = useCallback(
(e: React.KeyboardEvent) => {
switch (e.key) {
case ' ':
case 'Enter':
handleMouseDown();
break;
}
},
[handleMouseDown],
);
const handleKeyPress = useCallback(
(e: React.KeyboardEvent) => {
switch (e.key) {
case ' ':
case 'Enter':
handleClick(e);
e.stopPropagation();
e.preventDefault();
break;
}
},
[handleClick],
);
useEffect(() => {
return () => {
if (currentId === openDropdownId) {
@ -440,16 +465,14 @@ export const Dropdown = <Item = MenuItem,>({
let button: React.ReactElement;
const buttonProps = {
disabled,
onClick: toggleDropdown,
'aria-expanded': open,
'aria-controls': menuId,
ref: buttonRef,
};
if (children) {
button = cloneElement(Children.only(children), buttonProps);
button = cloneElement(Children.only(children), {
onClick: handleClick,
onMouseDown: handleMouseDown,
onKeyDown: handleButtonKeyDown,
onKeyPress: handleKeyPress,
ref: targetRef,
});
} else if (icon && iconComponent) {
button = (
<IconButton
@ -457,7 +480,12 @@ export const Dropdown = <Item = MenuItem,>({
iconComponent={iconComponent}
title={title}
active={open}
{...buttonProps}
disabled={disabled}
onClick={handleClick}
onMouseDown={handleMouseDown}
onKeyDown={handleButtonKeyDown}
onKeyPress={handleKeyPress}
ref={targetRef}
/>
);
} else {
@ -471,13 +499,13 @@ export const Dropdown = <Item = MenuItem,>({
<Overlay
show={open}
offset={offset}
placement={placement}
placement='bottom'
flip
target={buttonRef}
target={targetRef}
popperConfig={popperConfig}
>
{({ props, arrowProps, placement }) => (
<div {...props} id={menuId}>
<div {...props}>
<div className={`dropdown-animation dropdown-menu ${placement}`}>
<div
className={`dropdown-menu__arrow ${placement}`}

View File

@ -14,6 +14,7 @@ interface Props {
onClick?: React.MouseEventHandler<HTMLButtonElement>;
onMouseDown?: React.MouseEventHandler<HTMLButtonElement>;
onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
onKeyPress?: React.KeyboardEventHandler<HTMLButtonElement>;
active?: boolean;
expanded?: boolean;
style?: React.CSSProperties;
@ -44,6 +45,7 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
activeStyle,
onClick,
onKeyDown,
onKeyPress,
onMouseDown,
active = false,
disabled = false,
@ -83,6 +85,16 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
[disabled, onClick],
);
const handleKeyPress: React.KeyboardEventHandler<HTMLButtonElement> =
useCallback(
(e) => {
if (!disabled) {
onKeyPress?.(e);
}
},
[disabled, onKeyPress],
);
const handleMouseDown: React.MouseEventHandler<HTMLButtonElement> =
useCallback(
(e) => {
@ -149,6 +161,7 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
onClick={handleClick}
onMouseDown={handleMouseDown}
onKeyDown={handleKeyDown}
onKeyPress={handleKeyPress} // eslint-disable-line @typescript-eslint/no-deprecated
style={buttonStyle}
tabIndex={tabIndex}
disabled={disabled}

View File

@ -6,7 +6,6 @@ import classNames from 'classnames';
import { Helmet } from 'react-helmet';
import { NavLink } from 'react-router-dom';
import { AccountBio } from '@/mastodon/components/account_bio';
import CheckIcon from '@/material-icons/400-24px/check.svg?react';
import LockIcon from '@/material-icons/400-24px/lock.svg?react';
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
@ -774,6 +773,7 @@ export const AccountHeader: React.FC<{
);
}
const content = { __html: account.note_emojified };
const displayNameHtml = { __html: account.display_name_html };
const fields = account.fields;
const isLocal = !account.acct.includes('@');
@ -897,11 +897,12 @@ export const AccountHeader: React.FC<{
<AccountNote accountId={accountId} />
)}
<AccountBio
note={account.note_emojified}
dropdownAccountId={accountId}
className='account__header__content'
/>
{account.note.length > 0 && account.note !== '<p></p>' && (
<div
className='account__header__content translate'
dangerouslySetInnerHTML={content}
/>
)}
<div className='account__header__fields'>
<dl>

View File

@ -47,6 +47,10 @@ const labelForRecentSearch = (search: RecentSearch) => {
}
};
const unfocus = () => {
document.querySelector('.ui')?.parentElement?.focus();
};
const ClearButton: React.FC<{
onClick: () => void;
hasValue: boolean;
@ -103,11 +107,6 @@ export const Search: React.FC<{
}, [initialValue]);
const searchOptions: SearchOption[] = [];
const unfocus = useCallback(() => {
document.querySelector('.ui')?.parentElement?.focus();
setExpanded(false);
}, []);
if (searchEnabled) {
searchOptions.push(
{
@ -283,7 +282,7 @@ export const Search: React.FC<{
history.push({ pathname: '/search', search: queryParams.toString() });
unfocus();
},
[dispatch, history, unfocus],
[dispatch, history],
);
const handleChange = useCallback(
@ -403,7 +402,7 @@ export const Search: React.FC<{
setQuickActions(newQuickActions);
},
[signedIn, dispatch, unfocus, history, submit],
[dispatch, history, signedIn, setValue, setQuickActions, submit],
);
const handleClear = useCallback(() => {
@ -411,7 +410,7 @@ export const Search: React.FC<{
setQuickActions([]);
setSelectedOption(-1);
unfocus();
}, [unfocus]);
}, [setValue, setQuickActions, setSelectedOption]);
const handleKeyDown = useCallback(
(e: React.KeyboardEvent) => {
@ -462,7 +461,7 @@ export const Search: React.FC<{
break;
}
},
[unfocus, navigableOptions, selectedOption, submit, value],
[navigableOptions, value, selectedOption, setSelectedOption, submit],
);
const handleFocus = useCallback(() => {
@ -482,38 +481,12 @@ export const Search: React.FC<{
}, [setExpanded, setSelectedOption, singleColumn]);
const handleBlur = useCallback(() => {
setExpanded(false);
setSelectedOption(-1);
}, [setSelectedOption]);
const formRef = useRef<HTMLFormElement>(null);
useEffect(() => {
// If the search popover is expanded, close it when tabbing or
// clicking outside of it or the search form, while allowing
// tabbing or clicking inside of the popover
if (expanded) {
function closeOnLeave(event: FocusEvent | MouseEvent) {
const form = formRef.current;
const isClickInsideForm =
form &&
(form === event.target || form.contains(event.target as Node));
if (!isClickInsideForm) {
setExpanded(false);
}
}
document.addEventListener('focusin', closeOnLeave);
document.addEventListener('click', closeOnLeave);
return () => {
document.removeEventListener('focusin', closeOnLeave);
document.removeEventListener('click', closeOnLeave);
};
}
return () => null;
}, [expanded]);
}, [setExpanded, setSelectedOption]);
return (
<form ref={formRef} className={classNames('search', { active: expanded })}>
<form className={classNames('search', { active: expanded })}>
<input
ref={searchInputRef}
className='search__input'
@ -533,7 +506,7 @@ export const Search: React.FC<{
<ClearButton hasValue={hasValue} onClick={handleClear} />
<div className='search__popout' tabIndex={-1}>
<div className='search__popout'>
{!hasValue && (
<>
<h4>

View File

@ -1,110 +0,0 @@
// Utility codes
export const VARIATION_SELECTOR_CODE = 0xfe0f;
export const KEYCAP_CODE = 0x20e3;
// Gender codes
export const GENDER_FEMALE_CODE = 0x2640;
export const GENDER_MALE_CODE = 0x2642;
// Skin tone codes
export const SKIN_TONE_CODES = [
0x1f3fb, // Light skin tone
0x1f3fc, // Medium-light skin tone
0x1f3fd, // Medium skin tone
0x1f3fe, // Medium-dark skin tone
0x1f3ff, // Dark skin tone
] as const;
export const EMOJIS_WITH_DARK_BORDER = [
'🎱', // 1F3B1
'🐜', // 1F41C
'⚫', // 26AB
'🖤', // 1F5A4
'⬛', // 2B1B
'◼️', // 25FC-FE0F
'◾', // 25FE
'◼️', // 25FC-FE0F
'✒️', // 2712-FE0F
'▪️', // 25AA-FE0F
'💣', // 1F4A3
'🎳', // 1F3B3
'📷', // 1F4F7
'📸', // 1F4F8
'♣️', // 2663-FE0F
'🕶️', // 1F576-FE0F
'✴️', // 2734-FE0F
'🔌', // 1F50C
'💂‍♀️', // 1F482-200D-2640-FE0F
'📽️', // 1F4FD-FE0F
'🍳', // 1F373
'🦍', // 1F98D
'💂', // 1F482
'🔪', // 1F52A
'🕳️', // 1F573-FE0F
'🕹️', // 1F579-FE0F
'🕋', // 1F54B
'🖊️', // 1F58A-FE0F
'🖋️', // 1F58B-FE0F
'💂‍♂️', // 1F482-200D-2642-FE0F
'🎤', // 1F3A4
'🎓', // 1F393
'🎥', // 1F3A5
'🎼', // 1F3BC
'♠️', // 2660-FE0F
'🎩', // 1F3A9
'🦃', // 1F983
'📼', // 1F4FC
'📹', // 1F4F9
'🎮', // 1F3AE
'🐃', // 1F403
'🏴', // 1F3F4
'🐞', // 1F41E
'🕺', // 1F57A
'📱', // 1F4F1
'📲', // 1F4F2
'🚲', // 1F6B2
'🪮', // 1FAA6
'🐦‍⬛', // 1F426-200D-2B1B
];
export const EMOJIS_WITH_LIGHT_BORDER = [
'👽', // 1F47D
'⚾', // 26BE
'🐔', // 1F414
'☁️', // 2601-FE0F
'💨', // 1F4A8
'🕊️', // 1F54A-FE0F
'👀', // 1F440
'🍥', // 1F365
'👻', // 1F47B
'🐐', // 1F410
'❕', // 2755
'❔', // 2754
'⛸️', // 26F8-FE0F
'🌩️', // 1F329-FE0F
'🔊', // 1F50A
'🔇', // 1F507
'📃', // 1F4C3
'🌧️', // 1F327-FE0F
'🐏', // 1F40F
'🍚', // 1F35A
'🍙', // 1F359
'🐓', // 1F413
'🐑', // 1F411
'💀', // 1F480
'☠️', // 2620-FE0F
'🌨️', // 1F328-FE0F
'🔉', // 1F509
'🔈', // 1F508
'💬', // 1F4AC
'💭', // 1F4AD
'🏐', // 1F3D0
'🏳️', // 1F3F3-FE0F
'⚪', // 26AA
'⬜', // 2B1C
'◽', // 25FD
'◻️', // 25FB-FE0F
'▫️', // 25AB-FE0F
'🪽', // 1FAE8
'🪿', // 1FABF
];

View File

@ -1,102 +0,0 @@
import { SUPPORTED_LOCALES } from 'emojibase';
import type { FlatCompactEmoji, Locale } from 'emojibase';
import type { DBSchema } from 'idb';
import { openDB } from 'idb';
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
import type { LocaleOrCustom } from './locale';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
interface EmojiDB extends LocaleTables, DBSchema {
custom: {
key: string;
value: ApiCustomEmojiJSON;
indexes: {
category: string;
};
};
etags: {
key: LocaleOrCustom;
value: string;
};
}
interface LocaleTable {
key: string;
value: FlatCompactEmoji;
indexes: {
group: number;
label: string;
order: number;
tags: string[];
};
}
type LocaleTables = Record<Locale, LocaleTable>;
const SCHEMA_VERSION = 1;
const db = await openDB<EmojiDB>('mastodon-emoji', SCHEMA_VERSION, {
upgrade(database) {
const customTable = database.createObjectStore('custom', {
keyPath: 'shortcode',
autoIncrement: false,
});
customTable.createIndex('category', 'category');
database.createObjectStore('etags');
for (const locale of SUPPORTED_LOCALES) {
const localeTable = database.createObjectStore(locale, {
keyPath: 'hexcode',
autoIncrement: false,
});
localeTable.createIndex('group', 'group');
localeTable.createIndex('label', 'label');
localeTable.createIndex('order', 'order');
localeTable.createIndex('tags', 'tags', { multiEntry: true });
}
},
});
export async function putEmojiData(emojis: FlatCompactEmoji[], locale: Locale) {
const trx = db.transaction(locale, 'readwrite');
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
await trx.done;
}
export async function putCustomEmojiData(emojis: ApiCustomEmojiJSON[]) {
const trx = db.transaction('custom', 'readwrite');
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
await trx.done;
}
export function putLatestEtag(etag: string, localeString: string) {
const locale = toSupportedLocaleOrCustom(localeString);
return db.put('etags', etag, locale);
}
export function searchEmojiByHexcode(hexcode: string, localeString: string) {
const locale = toSupportedLocale(localeString);
return db.get(locale, hexcode);
}
export function searchEmojiByTag(tag: string, localeString: string) {
const locale = toSupportedLocale(localeString);
const range = IDBKeyRange.only(tag.toLowerCase());
return db.getAllFromIndex(locale, 'tags', range);
}
export function searchCustomEmojiByShortcode(shortcode: string) {
return db.get('custom', shortcode);
}
export async function loadLatestEtag(localeString: string) {
const locale = toSupportedLocaleOrCustom(localeString);
const rowCount = await db.count(locale);
if (!rowCount) {
return null; // No data for this locale, return null even if there is an etag.
}
const etag = await db.get('etags', locale);
return etag ?? null;
}

View File

@ -1,38 +0,0 @@
import initialState from '@/mastodon/initial_state';
import { toSupportedLocale } from './locale';
const serverLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
const worker =
'Worker' in window
? new Worker(new URL('./worker', import.meta.url), {
type: 'module',
})
: null;
export async function initializeEmoji() {
if (worker) {
worker.addEventListener('message', (event: MessageEvent<string>) => {
const { data: message } = event;
if (message === 'ready') {
worker.postMessage(serverLocale);
worker.postMessage('custom');
}
});
} else {
const { importCustomEmojiData, importEmojiData } = await import('./loader');
await Promise.all([importCustomEmojiData(), importEmojiData(serverLocale)]);
}
}
export async function loadEmojiLocale(localeString: string) {
const locale = toSupportedLocale(localeString);
if (worker) {
worker.postMessage(locale);
} else {
const { importEmojiData } = await import('./loader');
await importEmojiData(locale);
}
}

View File

@ -1,77 +0,0 @@
import { flattenEmojiData } from 'emojibase';
import type { CompactEmoji, FlatCompactEmoji } from 'emojibase';
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
import { isDevelopment } from '@/mastodon/utils/environment';
import {
putEmojiData,
putCustomEmojiData,
loadLatestEtag,
putLatestEtag,
} from './database';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
import type { LocaleOrCustom } from './locale';
export async function importEmojiData(localeString: string) {
const locale = toSupportedLocale(localeString);
const emojis = await fetchAndCheckEtag<CompactEmoji[]>(locale);
if (!emojis) {
return;
}
const flattenedEmojis: FlatCompactEmoji[] = flattenEmojiData(emojis);
await putEmojiData(flattenedEmojis, locale);
}
export async function importCustomEmojiData() {
const emojis = await fetchAndCheckEtag<ApiCustomEmojiJSON[]>('custom');
if (!emojis) {
return;
}
await putCustomEmojiData(emojis);
}
async function fetchAndCheckEtag<ResultType extends object[]>(
localeOrCustom: LocaleOrCustom,
): Promise<ResultType | null> {
const locale = toSupportedLocaleOrCustom(localeOrCustom);
let uri: string;
if (locale === 'custom') {
uri = '/api/v1/custom_emojis';
} else {
uri = `/packs${isDevelopment() ? '-dev' : ''}/emoji/${locale}.json`;
}
const oldEtag = await loadLatestEtag(locale);
const response = await fetch(uri, {
headers: {
'Content-Type': 'application/json',
'If-None-Match': oldEtag ?? '', // Send the old ETag to check for modifications
},
});
// If not modified, return null
if (response.status === 304) {
return null;
}
if (!response.ok) {
throw new Error(
`Failed to fetch emoji data for ${localeOrCustom}: ${response.statusText}`,
);
}
const data = (await response.json()) as ResultType;
if (!Array.isArray(data)) {
throw new Error(
`Unexpected data format for ${localeOrCustom}: expected an array`,
);
}
// Store the ETag for future requests
const etag = response.headers.get('ETag');
if (etag) {
await putLatestEtag(etag, localeOrCustom);
}
return data;
}

View File

@ -1,6 +1,52 @@
import { SUPPORTED_LOCALES } from 'emojibase';
import { flattenEmojiData, SUPPORTED_LOCALES } from 'emojibase';
import emojiEnData from 'emojibase-data/en/compact.json';
import emojiFrData from 'emojibase-data/fr/compact.json';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
import { toSupportedLocale, unicodeToLocaleLabel } from './locale';
describe('unicodeToLocaleLabel', () => {
const emojiTestCases = [
'1F3CB-1F3FF-200D-2640-FE0F', // 🏋🏿‍♀️ Woman weightlifter, dark skin
'1F468-1F3FB', // 👨🏻 Man, light skin
'1F469-1F3FB-200D-2695-FE0F', // 👩🏻‍⚕️ Woman health worker, light skin
'1F468-1F3FD-200D-1F692', // 👨🏽‍🚒 Man firefighter, medium skin
'1F469-1F3FE', // 👩🏾 Woman, medium-dark skin
'1F469-1F3FF-200D-1F4BB', // 👩🏿‍💻 Woman technologist, dark skin
'1F478-1F3FF', // 👸🏿 Princess with dark skin tone
'1F935-1F3FC-200D-2640-FE0F', // 🤵🏼‍♀️ Woman in tuxedo, medium-light skin
'1F9D1-1F3FC', // 🧑🏼 Person, medium-light skin
'1F9D4-1F3FE', // 🧔🏾 Person with beard, medium-dark skin
];
const flattenedEnData = flattenEmojiData(emojiEnData);
const flattenedFrData = flattenEmojiData(emojiFrData);
const emojiTestEnLabels = new Map(
emojiTestCases.map((code) => [
code,
flattenedEnData.find((emoji) => emoji.hexcode === code)?.label,
]),
);
const emojiTestFrLabels = new Map(
emojiTestCases.map((code) => [
code,
flattenedFrData.find((emoji) => emoji.hexcode === code)?.label,
]),
);
test.for(
emojiTestCases.flatMap((code) => [
[code, 'en', emojiTestEnLabels.get(code)],
[code, 'fr', emojiTestFrLabels.get(code)],
]) satisfies [string, string, string | undefined][],
)(
'returns correct label for %s for %s locale',
async ([unicodeHex, locale, expectedLabel]) => {
const label = await unicodeToLocaleLabel(unicodeHex, locale);
expect(label).toBe(expectedLabel);
},
);
});
describe('toSupportedLocale', () => {
test('returns the same locale if it is supported', () => {
@ -16,14 +62,3 @@ describe('toSupportedLocale', () => {
}
});
});
describe('toSupportedLocaleOrCustom', () => {
test('returns custom for "custom" locale', () => {
expect(toSupportedLocaleOrCustom('custom')).toBe('custom');
});
test('returns supported locale for valid locales', () => {
for (const locale of SUPPORTED_LOCALES) {
expect(toSupportedLocaleOrCustom(locale)).toBe(locale);
}
});
});

View File

@ -1,23 +1,51 @@
import type { Locale } from 'emojibase';
import { SUPPORTED_LOCALES } from 'emojibase';
import type { CompactEmoji, Locale } from 'emojibase';
import { flattenEmojiData, SUPPORTED_LOCALES } from 'emojibase';
export type LocaleOrCustom = Locale | 'custom';
// Simple cache. This will be replaced with an IndexedDB cache in the future.
const localeCache = new Map<Locale, Map<string, CompactEmoji>>();
export function toSupportedLocale(localeBase: string): Locale {
const locale = localeBase.toLowerCase();
export async function unicodeToLocaleLabel(
unicodeHex: string,
localeString: string,
) {
const locale = toSupportedLocale(localeString);
let hexMap = localeCache.get(locale);
if (!hexMap) {
hexMap = await loadLocaleLabels(locale);
localeCache.set(locale, hexMap);
}
const label = hexMap.get(unicodeHex)?.label;
if (!label) {
throw new Error(
`Label for unicode hex ${unicodeHex} not found in locale ${locale}`,
);
}
return label;
}
async function loadLocaleLabels(
locale: Locale,
): Promise<Map<string, CompactEmoji>> {
const { default: localeEmoji } = ((await import(
`emojibase-data/${locale}/compact.json`
)) ?? { default: [] }) as { default: CompactEmoji[] };
if (!Array.isArray(localeEmoji)) {
throw new Error(`Locale data for ${locale} not found`);
}
const hexMapEntries = flattenEmojiData(localeEmoji).map(
(emoji) => [emoji.hexcode, emoji] satisfies [string, CompactEmoji],
);
return new Map(hexMapEntries);
}
export function toSupportedLocale(locale: string): Locale {
if (isSupportedLocale(locale)) {
return locale;
}
return 'en'; // Default to English if unsupported
}
export function toSupportedLocaleOrCustom(locale: string): LocaleOrCustom {
if (locale.toLowerCase() === 'custom') {
return 'custom';
}
return toSupportedLocale(locale);
}
function isSupportedLocale(locale: string): locale is Locale {
return SUPPORTED_LOCALES.includes(locale.toLowerCase() as Locale);
return SUPPORTED_LOCALES.includes(locale as Locale);
}

View File

@ -1,17 +1,9 @@
import { readdir } from 'fs/promises';
import { basename, resolve } from 'path';
import { flattenEmojiData } from 'emojibase';
import unicodeRawEmojis from 'emojibase-data/en/data.json';
import unicodeEmojis from 'emojibase-data/en/data.json';
import {
twemojiHasBorder,
twemojiToUnicodeInfo,
unicodeToTwemojiHex,
CODES_WITH_DARK_BORDER,
CODES_WITH_LIGHT_BORDER,
emojiToUnicodeHex,
} from './normalize';
import { twemojiToUnicodeInfo, unicodeToTwemojiHex } from './normalize';
const emojiSVGFiles = await readdir(
// This assumes tests are run from project root
@ -21,81 +13,60 @@ const emojiSVGFiles = await readdir(
},
);
const svgFileNames = emojiSVGFiles
.filter((file) => file.isFile() && file.name.endsWith('.svg'))
.filter(
(file) =>
file.isFile() &&
file.name.endsWith('.svg') &&
!file.name.endsWith('_border.svg'),
)
.map((file) => basename(file.name, '.svg').toUpperCase());
const svgFileNamesWithoutBorder = svgFileNames.filter(
(fileName) => !fileName.endsWith('_BORDER'),
);
const unicodeEmojis = flattenEmojiData(unicodeRawEmojis);
describe('emojiToUnicodeHex', () => {
test.concurrent.for([
['🎱', '1F3B1'],
['🐜', '1F41C'],
['⚫', '26AB'],
['🖤', '1F5A4'],
['💀', '1F480'],
['💂‍♂️', '1F482-200D-2642-FE0F'],
] as const)(
'emojiToUnicodeHex converts %s to %s',
([emoji, hexcode], { expect }) => {
expect(emojiToUnicodeHex(emoji)).toBe(hexcode);
},
);
});
describe('unicodeToTwemojiHex', () => {
test.concurrent.for(
unicodeEmojis
// Our version of Twemoji only supports up to version 15.1
.filter((emoji) => emoji.version < 16)
.map((emoji) => [emoji.hexcode, emoji.label] as [string, string]),
)('verifying an emoji exists for %s (%s)', ([hexcode], { expect }) => {
const result = unicodeToTwemojiHex(hexcode);
expect(svgFileNamesWithoutBorder).toContain(result);
describe('normalizeEmoji', () => {
describe('unicodeToSVGName', () => {
test.concurrent.for(
unicodeEmojis
// Our version of Twemoji only supports up to version 15.1
.filter((emoji) => emoji.version < 16)
.map((emoji) => [emoji.hexcode, emoji.label] as [string, string]),
)('verifying an emoji exists for %s (%s)', ([hexcode], { expect }) => {
const result = unicodeToTwemojiHex(hexcode);
expect(svgFileNames).toContain(result);
});
});
});
describe('twemojiHasBorder', () => {
test.concurrent.for(
svgFileNames
.filter((file) => file.endsWith('_BORDER'))
.map((file) => {
const hexCode = file.replace('_BORDER', '');
return [
hexCode,
CODES_WITH_LIGHT_BORDER.includes(hexCode),
CODES_WITH_DARK_BORDER.includes(hexCode),
] as const;
describe('twemojiToUnicodeInfo', () => {
const unicodeMap = new Map(
unicodeEmojis.flatMap((emoji) => {
const base: [string, string][] = [[emoji.hexcode, emoji.label]];
if (emoji.skins) {
base.push(
...emoji.skins.map(
(skin) => [skin.hexcode, skin.label] as [string, string],
),
);
}
return base;
}),
)('twemojiHasBorder for %s', ([hexCode, isLight, isDark], { expect }) => {
const result = twemojiHasBorder(hexCode);
expect(result).toHaveProperty('hexCode', hexCode);
expect(result).toHaveProperty('hasLightBorder', isLight);
expect(result).toHaveProperty('hasDarkBorder', isDark);
);
test.concurrent.for(svgFileNames)(
'verifying SVG file %s maps to Unicode emoji',
(svgFileName, { expect }) => {
assert(!!svgFileName);
const result = twemojiToUnicodeInfo(svgFileName);
const hexcode =
typeof result === 'string' ? result : result.unqualified;
if (!hexcode) {
// No hexcode means this is a special case like the Shibuya 109 emoji
expect(result).toHaveProperty('label');
return;
}
assert(!!hexcode);
expect(
unicodeMap.has(hexcode),
`${hexcode} (${svgFileName}) not found`,
).toBeTruthy();
},
);
});
});
describe('twemojiToUnicodeInfo', () => {
const unicodeCodeSet = new Set(unicodeEmojis.map((emoji) => emoji.hexcode));
test.concurrent.for(svgFileNamesWithoutBorder)(
'verifying SVG file %s maps to Unicode emoji',
(svgFileName, { expect }) => {
assert(!!svgFileName);
const result = twemojiToUnicodeInfo(svgFileName);
const hexcode = typeof result === 'string' ? result : result.unqualified;
if (!hexcode) {
// No hexcode means this is a special case like the Shibuya 109 emoji
expect(result).toHaveProperty('label');
return;
}
assert(!!hexcode);
expect(
unicodeCodeSet.has(hexcode),
`${hexcode} (${svgFileName}) not found`,
).toBeTruthy();
},
);
});

View File

@ -1,12 +1,19 @@
import {
VARIATION_SELECTOR_CODE,
KEYCAP_CODE,
GENDER_FEMALE_CODE,
GENDER_MALE_CODE,
SKIN_TONE_CODES,
EMOJIS_WITH_DARK_BORDER,
EMOJIS_WITH_LIGHT_BORDER,
} from './constants';
// Utility codes
const VARIATION_SELECTOR_CODE = 0xfe0f;
const KEYCAP_CODE = 0x20e3;
// Gender codes
const GENDER_FEMALE_CODE = 0x2640;
const GENDER_MALE_CODE = 0x2642;
// Skin tone codes
const SKIN_TONE_CODES = [
0x1f3fb, // Light skin tone
0x1f3fc, // Medium-light skin tone
0x1f3fd, // Medium skin tone
0x1f3fe, // Medium-dark skin tone
0x1f3ff, // Dark skin tone
] as const;
// Misc codes that have special handling
const SKIER_CODE = 0x26f7;
@ -17,17 +24,6 @@ const LEVITATING_PERSON_CODE = 0x1f574;
const SPEECH_BUBBLE_CODE = 0x1f5e8;
const MS_CLAUS_CODE = 0x1f936;
export function emojiToUnicodeHex(emoji: string): string {
const codes: number[] = [];
for (const char of emoji) {
const code = char.codePointAt(0);
if (code !== undefined) {
codes.push(code);
}
}
return hexNumbersToString(codes);
}
export function unicodeToTwemojiHex(unicodeHex: string): string {
const codes = hexStringToNumbers(unicodeHex);
const normalizedCodes: number[] = [];
@ -54,35 +50,6 @@ export function unicodeToTwemojiHex(unicodeHex: string): string {
return hexNumbersToString(normalizedCodes, 0);
}
interface TwemojiBorderInfo {
hexCode: string;
hasLightBorder: boolean;
hasDarkBorder: boolean;
}
export const CODES_WITH_DARK_BORDER =
EMOJIS_WITH_DARK_BORDER.map(emojiToUnicodeHex);
export const CODES_WITH_LIGHT_BORDER =
EMOJIS_WITH_LIGHT_BORDER.map(emojiToUnicodeHex);
export function twemojiHasBorder(twemojiHex: string): TwemojiBorderInfo {
const normalizedHex = twemojiHex.toUpperCase();
let hasLightBorder = false;
let hasDarkBorder = false;
if (CODES_WITH_LIGHT_BORDER.includes(normalizedHex)) {
hasLightBorder = true;
}
if (CODES_WITH_DARK_BORDER.includes(normalizedHex)) {
hasDarkBorder = true;
}
return {
hexCode: normalizedHex,
hasLightBorder,
hasDarkBorder,
};
}
interface TwemojiSpecificEmoji {
unqualified?: string;
gender?: number;
@ -117,16 +84,11 @@ export function twemojiToUnicodeInfo(
let gender: undefined | number;
let skin: undefined | number;
for (const code of codes) {
if (!gender && code in GENDER_CODES_MAP) {
if (code in GENDER_CODES_MAP) {
gender = GENDER_CODES_MAP[code];
} else if (!skin && code in SKIN_TONE_CODES) {
} else if (code in SKIN_TONE_CODES) {
skin = code;
}
// Exit if we have both skin and gender
if (skin && gender) {
break;
}
}
let mappedCodes: unknown[] = codes;
@ -141,8 +103,8 @@ export function twemojiToUnicodeInfo(
// For key emoji, insert the variation selector
mappedCodes = [codes[0], VARIATION_SELECTOR_CODE, KEYCAP_CODE];
} else if (
(codes.at(0) === SKIER_CODE || codes.at(0) === LEVITATING_PERSON_CODE) &&
codes.length > 1
codes.at(0) === SKIER_CODE ||
codes.at(0) === LEVITATING_PERSON_CODE
) {
// Twemoji offers more gender and skin options for the skier and levitating person emoji.
return {

View File

@ -1,13 +0,0 @@
import { importEmojiData, importCustomEmojiData } from './loader';
addEventListener('message', handleMessage);
self.postMessage('ready'); // After the worker is ready, notify the main thread
function handleMessage(event: MessageEvent<string>) {
const { data: locale } = event;
if (locale !== 'custom') {
void importEmojiData(locale);
} else {
void importCustomEmojiData();
}
}

View File

@ -50,22 +50,16 @@ export const MoreLink: React.FC = () => {
const menu = useMemo(() => {
const arr: MenuItem[] = [
{ text: intl.formatMessage(messages.filters), href: '/filters' },
{ text: intl.formatMessage(messages.mutes), to: '/mutes' },
{ text: intl.formatMessage(messages.blocks), to: '/blocks' },
{
href: '/filters',
text: intl.formatMessage(messages.filters),
},
{
to: '/mutes',
text: intl.formatMessage(messages.mutes),
},
{
to: '/blocks',
text: intl.formatMessage(messages.blocks),
},
{
to: '/domain_blocks',
text: intl.formatMessage(messages.domainBlocks),
to: '/domain_blocks',
},
];
arr.push(
null,
{
href: '/settings/privacy',
@ -83,7 +77,7 @@ export const MoreLink: React.FC = () => {
href: '/settings/export',
text: intl.formatMessage(messages.importExport),
},
];
);
if (canManageReports(permissions)) {
arr.push(null, {
@ -112,7 +106,7 @@ export const MoreLink: React.FC = () => {
}, [intl, dispatch, permissions]);
return (
<Dropdown items={menu} placement='bottom-start'>
<Dropdown items={menu}>
<button className='column-link column-link--transparent'>
<Icon id='' icon={MoreHorizIcon} className='column-link__icon' />

View File

@ -1,4 +1,4 @@
import { useCallback, useMemo } from 'react';
import { useCallback } from 'react';
import { defineMessages, useIntl } from 'react-intl';
@ -21,9 +21,6 @@ import { openModal } from 'mastodon/actions/modal';
import { IconButton } from 'mastodon/components/icon_button';
import { useIdentity } from 'mastodon/identity_context';
import { me } from 'mastodon/initial_state';
import type { Status } from 'mastodon/models/status';
import { makeGetStatus } from 'mastodon/selectors';
import type { RootState } from 'mastodon/store';
import { useAppSelector, useAppDispatch } from 'mastodon/store';
const messages = defineMessages({
@ -50,11 +47,6 @@ const messages = defineMessages({
open: { id: 'status.open', defaultMessage: 'Expand this status' },
});
type GetStatusSelector = (
state: RootState,
props: { id?: string | null; contextType?: string },
) => Status | null;
export const Footer: React.FC<{
statusId: string;
withOpenButton?: boolean;
@ -64,8 +56,7 @@ export const Footer: React.FC<{
const intl = useIntl();
const history = useHistory();
const dispatch = useAppDispatch();
const getStatus = useMemo(() => makeGetStatus(), []) as GetStatusSelector;
const status = useAppSelector((state) => getStatus(state, { id: statusId }));
const status = useAppSelector((state) => state.statuses.get(statusId));
const accountId = status?.get('account') as string | undefined;
const account = useAppSelector((state) =>
accountId ? state.accounts.get(accountId) : undefined,

View File

@ -8,14 +8,13 @@ import { openURL } from 'mastodon/actions/search';
import { useAppDispatch } from 'mastodon/store';
const isMentionClick = (element: HTMLAnchorElement) =>
element.classList.contains('mention') &&
!element.classList.contains('hashtag');
element.classList.contains('mention');
const isHashtagClick = (element: HTMLAnchorElement) =>
element.textContent?.[0] === '#' ||
element.previousSibling?.textContent?.endsWith('#');
export const useLinks = (skipHashtags?: boolean) => {
export const useLinks = () => {
const history = useHistory();
const dispatch = useAppDispatch();
@ -62,12 +61,12 @@ export const useLinks = (skipHashtags?: boolean) => {
if (isMentionClick(target)) {
e.preventDefault();
void handleMentionClick(target);
} else if (isHashtagClick(target) && !skipHashtags) {
} else if (isHashtagClick(target)) {
e.preventDefault();
handleHashtagClick(target);
}
},
[skipHashtags, handleMentionClick, handleHashtagClick],
[handleMentionClick, handleHashtagClick],
);
return handleClick;

View File

@ -1,5 +1,6 @@
// @ts-check
/**
* @typedef {[code: string, name: string, localName: string]} InitialStateLanguage
*/
@ -63,7 +64,6 @@
* @property {boolean=} critical_updates_pending
* @property {InitialStateMeta} meta
* @property {Role?} role
* @property {string[]} features
*/
const element = document.getElementById('initial-state');
@ -140,12 +140,4 @@ export function getAccessToken() {
return getMeta('access_token');
}
/**
* @param {string} feature
* @returns {boolean}
*/
export function isFeatureEnabled(feature) {
return initialState?.features?.includes(feature) || false;
}
export default initialState;

View File

@ -1,7 +1,7 @@
{
"about.blocks": "خوادم تحت الإشراف",
"about.contact": "للاتصال:",
"about.default_locale": "افتراضيالافتراضية",
"about.default_locale": "الافتراضية",
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
"about.domain_blocks.preamble": "يتيح مَستُدون عمومًا لمستخدميه مطالعة المحتوى من المستخدمين من الخواديم الأخرى في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم.",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "Мадэраваныя серверы",
"about.contact": "Кантакт:",
"about.default_locale": "Прадвызначаная",
"about.disclaimer": "Mastodon - свабоднае праграмнае забеспячэнне, з адкрытым зыходным кодам, і гандлёвай маркай Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Прычына недаступная",
"about.domain_blocks.preamble": "Mastodon, у асноўным, дазваляе вам праглядаць кантэнт і ўзаемадзейнічаць з карыстальнікамі з іншых сервераў у федэсвету. Гэтыя выключэнні былі зроблены дакладна на гэтым серверы.",
@ -9,7 +8,6 @@
"about.domain_blocks.silenced.title": "Абмежаваны",
"about.domain_blocks.suspended.explanation": "Ніякая інфармацыя з гэтага сервера не будзе апрацавана, захавана або абменена, узаемадзеянне або камунікацыя з карыстальнікамі гэтага сервера немагчымы.",
"about.domain_blocks.suspended.title": "Прыпынены",
"about.language_label": "Мова",
"about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.",
"about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}",
"about.rules": "Правілы сервера",
@ -21,21 +19,13 @@
"account.block_domain": "Заблакіраваць дамен {domain}",
"account.block_short": "Заблакіраваць",
"account.blocked": "Заблакіраваны",
"account.blocking": "Блакіраванне",
"account.cancel_follow_request": "Скасаваць запыт на падпіску",
"account.copy": "Скапіраваць спасылку на профіль",
"account.direct": "Згадаць асабіста @{name}",
"account.disable_notifications": "Не паведамляць мне пра публікацыі @{name}",
"account.domain_blocking": "Блакіраванне дамена",
"account.edit_profile": "Рэдагаваць профіль",
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
"account.endorse": "Паказваць у профілі",
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага вам} few {яшчэ # чалавекі, знаёмыя вам} many {яшчэ # чалавек, знаёмых вам} other {яшчэ # чалавекі, знаёмыя вам}}",
"account.familiar_followers_one": "Мае сярод падпісчыкаў {name1}",
"account.familiar_followers_two": "Мае сярод падпісчыкаў {name1} і {name2}",
"account.featured": "Рэкамендаванае",
"account.featured.accounts": "Профілі",
"account.featured.hashtags": "Хэштэгі",
"account.featured_tags.last_status_at": "Апошні допіс ад {date}",
"account.featured_tags.last_status_never": "Няма допісаў",
"account.follow": "Падпісацца",
@ -43,11 +33,9 @@
"account.followers": "Падпісчыкі",
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
"account.followers_you_know_counter": "{count, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
"account.following": "Падпіскі",
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
"account.follows_you": "Падпісаны на вас",
"account.go_to_profile": "Перайсці да профілю",
"account.hide_reblogs": "Схаваць пашырэнні ад @{name}",
"account.in_memoriam": "У памяць.",
@ -62,22 +50,18 @@
"account.mute_notifications_short": "Не апавяшчаць",
"account.mute_short": "Ігнараваць",
"account.muted": "Ігнаруецца",
"account.mutual": "Вы падпісаны адно на аднаго",
"account.no_bio": "Апісанне адсутнічае.",
"account.open_original_page": "Адкрыць арыгінальную старонку",
"account.posts": "Допісы",
"account.posts_with_replies": "Допісы і адказы",
"account.remove_from_followers": "Выдаліць карыстальніка {name} з падпісчыкаў",
"account.report": "Паскардзіцца на @{name}",
"account.requested": "Чакаецца ўхваленне. Націсніце, каб скасаваць запыт на падпіску",
"account.requested_follow": "{name} адправіў запыт на падпіску",
"account.requests_to_follow_you": "Хоча падпісацца на вас",
"account.share": "Абагуліць профіль @{name}",
"account.show_reblogs": "Паказаць падштурхоўванні ад @{name}",
"account.statuses_counter": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
"account.unblock": "Разблакіраваць @{name}",
"account.unblock_domain": "Разблакіраваць дамен {domain}",
"account.unblock_domain_short": "Разблакіраваць",
"account.unblock_short": "Разблакіраваць",
"account.unendorse": "Не паказваць у профілі",
"account.unfollow": "Адпісацца",
@ -99,30 +83,26 @@
"alert.unexpected.message": "Узнікла нечаканая памылка.",
"alert.unexpected.title": "Вой!",
"alt_text_badge.title": "Альтэрнатыўны тэкст",
"alt_text_modal.add_alt_text": "Дадаць альтэрнатыўны тэкст",
"alt_text_modal.add_text_from_image": "Дадаць тэкст з відарыса",
"alt_text_modal.cancel": "Скасаваць",
"alt_text_modal.change_thumbnail": "Змяніць мініяцюру",
"alt_text_modal.done": "Гатова",
"announcement.announcement": "Аб'ява",
"annual_report.summary.archetype.booster": "Паляўнічы на трэнды",
"annual_report.summary.archetype.booster": "Трэнда-сьледнік",
"annual_report.summary.archetype.lurker": "Назіральнік",
"annual_report.summary.archetype.oracle": "Аракул",
"annual_report.summary.archetype.pollster": "Апытвальнік",
"annual_report.summary.archetype.replier": "Душа кампаніі",
"annual_report.summary.followers.followers": "падпісчыкі",
"annual_report.summary.followers.total": "Агулам {count}",
"annual_report.summary.here_it_is": "Вось вашы вынікі {year} за год:",
"annual_report.summary.archetype.replier": "Душа кампанійі",
"annual_report.summary.followers.followers": "падпісанты",
"annual_report.summary.followers.total": "Усяго {count}",
"annual_report.summary.here_it_is": "Вось вашыя вынікі {year} году:",
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
"annual_report.summary.highlighted_post.possessive": "{name}",
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся часцей",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся часцей",
"annual_report.summary.most_used_app.most_used_app": "самая выкарыстоўваная аплікацыя",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "самы выкарыстоўваны гэштаґ",
"annual_report.summary.most_used_hashtag.none": "Няма",
"annual_report.summary.new_posts.new_posts": "новыя допісы",
"annual_report.summary.percentile.text": "<topLabel>З-за гэтага, вы знаходзіцеся ў топе</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "КДБ пра гэта не даведаецца.",
"annual_report.summary.percentile.text": "<topLabel>Мэта месьціць вас у топ</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "Мы ня скажам аб гэтым Сіняпальцаму.",
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
"attachments_list.unprocessed": "(неапрацаваны)",
"audio.hide": "Схаваць аўдыя",
@ -147,7 +127,7 @@
"bundle_column_error.routing.body": "Запытаная старонка не знойдзена. Вы ўпэўнены, што URL у адрасным радку правільны?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Закрыць",
"bundle_modal_error.message": "Падчас загрузкі гэтага экрана штосьці пайшло не так.",
"bundle_modal_error.message": "Падчас загрузкі гэтага экрана штосьці пайшло ня так.",
"bundle_modal_error.retry": "Паспрабуйце зноў",
"closed_registrations.other_server_instructions": "Паколькі Mastodon дэцэнтралізаваны, вы можаце стварыць уліковы запіс на іншым серверы і працягваць узаемадзейнічаць з ім.",
"closed_registrations_modal.description": "Стварэнне ўліковага запісу на {domain} цяпер немагчыма. Заўважце, што няма неабходнасці мець уліковы запіс менавіта на {domain}, каб выкарыстоўваць Mastodon.",
@ -167,7 +147,7 @@
"column.firehose": "Стужкі",
"column.follow_requests": "Запыты на падпіску",
"column.home": "Галоўная",
"column.list_members": "Кіраванне ўдзельнікамі спіса",
"column.list_members": "Кіраванне ўдзельнікамі спісу",
"column.lists": "Спісы",
"column.mutes": "Ігнараваныя карыстальнікі",
"column.notifications": "Апавяшчэнні",
@ -216,24 +196,19 @@
"confirmations.delete_list.confirm": "Выдаліць",
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
"confirmations.delete_list.title": "Выдаліць спіс?",
"confirmations.discard_draft.edit.cancel": "Працягнуць рэдагаванне",
"confirmations.discard_edit_media.confirm": "Адмяніць",
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
"confirmations.follow_to_list.confirm": "Падпісацца і дадаць у спіс",
"confirmations.follow_to_list.message": "Вам трэба падпісацца на карыстальніка {name}, каб дадаць яго ў спіс.",
"confirmations.follow_to_list.confirm": "Падпісацца й дадаць у сьпіс",
"confirmations.follow_to_list.message": "Вы мусіце быць падпісаныя на {name} каб дадаць яго ў сьпіс.",
"confirmations.follow_to_list.title": "Падпісацца на карыстальніка?",
"confirmations.logout.confirm": "Выйсці",
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
"confirmations.logout.title": "Выйсці?",
"confirmations.missing_alt_text.confirm": "Дадаць альтэрнатыўны тэкст",
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
"confirmations.missing_alt_text.title": "Дадаць апісаньне?",
"confirmations.mute.confirm": "Ігнараваць",
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
"confirmations.remove_from_followers.title": "Выдаліць падпісчыка?",
"confirmations.unfollow.confirm": "Адпісацца",
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
@ -246,7 +221,7 @@
"conversation.with": "З {names}",
"copy_icon_button.copied": "Скапіявана ў буфер абмену",
"copypaste.copied": "Скапіравана",
"copypaste.copy_to_clipboard": "Скапіяваць у буфер абмену",
"copypaste.copy_to_clipboard": "Капіраваць у буфер абмену",
"directory.federated": "З вядомага федэсвету",
"directory.local": "Толькі з {domain}",
"directory.new_arrivals": "Новыя карыстальнікі",
@ -255,7 +230,7 @@
"disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
"dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
"dismissable_banner.dismiss": "Адхіліць",
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў fediverse на якіх падпісаны карыстальнікі {domain}.",
"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": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
@ -300,15 +275,15 @@
"empty_column.account_timeline": "Тут няма допісаў!",
"empty_column.account_unavailable": "Профіль недаступны",
"empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.",
"empty_column.bookmarked_statuses": "У вашых закладках яшчэ няма допісаў. Калі вы дадасце закладку, яна з’явіцца тут.",
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
"empty_column.direct": "Пакуль у вас няма асабістых згадванняў. Калі вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
"empty_column.bookmarked_statuses": "У вас яшчэ няма паведамленняў з закладкамі. Калі вы дадасце закладку, яна з'явіцца тут.",
"empty_column.community": "Мясцовая стужка пустая. Напішыце што-небудзь публічна, каб зрушыць з месца!",
"empty_column.direct": "Пакуль у вас няма асабістых згадак. Калі вы дашляце або атрымаеце штось, яно з'явіцца тут.",
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіску. Калі вы атрымаеце запыт, ён з’явіцца тут.",
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны зявяцца тут.",
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіскуі. Калі вы атрымаеце запыт, ён з'явяцца тут.",
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з'явяцца тут.",
"empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",
"empty_column.home": "Галоўная стужка пустая! Падпішыцеся на іншых людзей, каб запоўніць яе. {suggestions}",
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.",
@ -319,18 +294,13 @@
"error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.",
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выклікана дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу",
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці натыўную праграму.",
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і аднавіць старонку. Калі гэта не дапаможа, вы можаце карыстацца Мастадонт праз другі браўзер ці аплікацыю.",
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
"explore.suggested_follows": "Людзі",
"explore.title": "Трэндавае",
"explore.trending_links": "Навіны",
"explore.trending_statuses": "Допісы",
"explore.trending_tags": "Хэштэгі",
"featured_carousel.next": "Далей",
"featured_carousel.post": "Допіс",
"featured_carousel.previous": "Назад",
"featured_carousel.slide": "{index} з {total}",
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім вы адкрылі гэты пост. Калі вы хочаце, каб паведамленне таксама было адфільтравана ў гэтым кантэксце, вам трэба будзе адрэдагаваць фільтр",
"filter_modal.added.context_mismatch_title": "Неадпаведны кантэкст!",
"filter_modal.added.expired_explanation": "Тэрмін дзеяння гэтай катэгорыі фільтраў скончыўся, вам трэба будзе змяніць дату заканчэння тэрміну дзеяння, каб яна прымянялася",
@ -379,10 +349,10 @@
"footer.privacy_policy": "Палітыка прыватнасці",
"footer.source_code": "Прагледзець зыходны код",
"footer.status": "Статус",
"footer.terms_of_service": "Умовы выкарыстання",
"footer.terms_of_service": "Умовы абслугоўваньня",
"generic.saved": "Захавана",
"getting_started.heading": "Пачатак працы",
"hashtag.admin_moderation": "Адкрыць інтэрфейс мадэратара для #{name}",
"hashtag.admin_moderation": "Адкрыць інтэрфэйс мадаратара для #{name}",
"hashtag.column_header.tag_mode.all": "і {additional}",
"hashtag.column_header.tag_mode.any": "або {additional}",
"hashtag.column_header.tag_mode.none": "без {additional}",
@ -404,39 +374,35 @@
"hints.profiles.see_more_followers": "Глядзець больш падпісаных на {domain}",
"hints.profiles.see_more_follows": "Глядзець больш падпісак на {domain}",
"hints.profiles.see_more_posts": "Глядзець больш допісаў на {domain}",
"hints.threads.replies_may_be_missing": "Адказы з іншых сервераў могуць адсутнічаць.",
"hints.threads.replies_may_be_missing": "Адказы зь іншых сэрвэраў могуць адсутнічаць.",
"hints.threads.see_more": "Глядзіце больш адказаў на {domain}",
"home.column_settings.show_quotes": "Паказаць цытаты",
"home.column_settings.show_reblogs": "Паказваць пашырэнні",
"home.column_settings.show_replies": "Паказваць адказы",
"home.hide_announcements": "Схаваць аб'явы",
"home.pending_critical_update.body": "Абнавіце свой сервер Mastodon як мага хутчэй!",
"home.pending_critical_update.body": "Калі ласка, абнавіце свой сервер Mastodon як мага хутчэй!",
"home.pending_critical_update.link": "Прагледзець абнаўленні",
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
"home.show_announcements": "Паказаць аб'явы",
"ignore_notifications_modal.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
"ignore_notifications_modal.disclaimer": "Mastodon ня можа йнфармаваць карыстальнікаў аб тым, што вы прайігнаравалі йх паведамленьні. Ігнараваньне паведамленьняў не спыніць іх адпраўку.",
"ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць",
"ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў",
"ignore_notifications_modal.filter_to_avoid_confusion": "Выкарыстанне фільтраў дапамагае пазбягаць патэнцыйнай блытаніны",
"ignore_notifications_modal.filter_to_review_separately": "Вы можаце прагледзець адфільтраваныя апавяшчэнні асобна",
"ignore_notifications_modal.ignore": "Ігнараваць апавяшчэнні",
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць апавяшчэнні ад уліковых запісаў пад мадэрацыяй?",
"ignore_notifications_modal.new_accounts_title": "Ігнараваць апавяшчэнні ад новых уліковых запісаў?",
"ignore_notifications_modal.not_followers_title": "Ігнараваць апавяшчэнні ад людзей, якія не падпісаныя на вас?",
"ignore_notifications_modal.filter_to_avoid_confusion": "Фільтраваньне дапамагае пазьбегнуць патэнцыйнай блытаніны",
"ignore_notifications_modal.filter_to_review_separately": "Вы можаце прагледзець адфільтраваныя паведамленьні асобна",
"ignore_notifications_modal.ignore": "Ігнараваць паведамленьні",
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць паведамленьні ад абмежаваных уліковых запісаў?",
"ignore_notifications_modal.new_accounts_title": "Ігнараваць паведамленьні ад новых уліковых запісаў?",
"ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?",
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя асабістыя згадванні?",
"ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?",
"info_button.label": "Даведка",
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца на некага са свайго ўліковага запісу.",
"interaction_modal.go": "Перайсці",
"interaction_modal.no_account_yet": "Не маеце ўліковага запісу?",
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць з вашага ўліковага запісу.",
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца з вашага ўліковага запісу.",
"interaction_modal.on_another_server": "На іншым серверы",
"interaction_modal.on_this_server": "На гэтым серверы",
"interaction_modal.title.favourite": "Упадабаць допіс {name}",
"interaction_modal.title.follow": "Падпісацца на {name}",
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
"interaction_modal.title.reply": "Адказаць на допіс {name}",
"interaction_modal.username_prompt": "Напр., {example}",
"intervals.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
"intervals.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}}",
"intervals.full.minutes": "{number, plural, one {# хвіліна} few {# хвіліны} many {# хвілін} other {# хвіліны}}",
@ -472,32 +438,21 @@
"keyboard_shortcuts.toggle_hidden": "Паказаць/схаваць тэкст за папярэджаннем пра кантэнт",
"keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя",
"keyboard_shortcuts.toot": "Стварыць новы допіс",
"keyboard_shortcuts.translate": "каб перакласці допіс",
"keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок",
"keyboard_shortcuts.up": "Перамясціцца ўверх па спісе",
"lightbox.close": "Закрыць",
"lightbox.next": "Далей",
"lightbox.previous": "Назад",
"lightbox.zoom_in": "Маштабаваць да фактычнага памеру",
"lightbox.zoom_out": "Дапасаваць усё змесціва пад памеры экрана",
"limited_account_hint.action": "Усе роўна паказваць профіль",
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
"link_preview.author": "Ад {name}",
"link_preview.more_from_author": "Больш ад {name}",
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
"lists.add_member": "Дадаць",
"lists.add_to_list": "Дадаць у спіс",
"lists.add_to_lists": "Дадаць {name} у спісы",
"lists.create": "Стварыць",
"lists.create_list": "Стварыць спіс",
"lists.delete": "Выдаліць спіс",
"lists.done": "Гатова",
"lists.edit": "Рэдагаваць спіс",
"lists.list_name": "Назва спіса",
"lists.new_list_name": "Назва новага спіса",
"lists.no_lists_yet": "Пакуль няма спісаў.",
"lists.no_members_yet": "Пакуль няма ўдзельнікаў.",
"lists.no_results_found": "Нічога не знойдзена.",
"lists.remove_member": "Выдаліць",
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
@ -505,7 +460,7 @@
"lists.save": "Захаваць",
"lists.search": "Пошук",
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
"loading_indicator.label": "Ідзе загрузка…",
"loading_indicator.label": "Загрузка…",
"media_gallery.hide": "Схаваць",
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
"mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў",
@ -518,10 +473,7 @@
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
"navigation_bar.about": "Пра нас",
"navigation_bar.account_settings": "Пароль і бяспека",
"navigation_bar.administration": "Адміністрацыя",
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
"navigation_bar.automated_deletion": "Аўтаматычнае выдаленне допісаў",
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
"navigation_bar.bookmarks": "Закладкі",
"navigation_bar.direct": "Асабістыя згадванні",
@ -531,21 +483,13 @@
"navigation_bar.follow_requests": "Запыты на падпіску",
"navigation_bar.followed_tags": "Падпіскі",
"navigation_bar.follows_and_followers": "Падпіскі і падпісчыкі",
"navigation_bar.import_export": "Імпарт і экспарт",
"navigation_bar.lists": "Спісы",
"navigation_bar.live_feed_local": "Жывая стужка (лакальная)",
"navigation_bar.live_feed_public": "Жывая стужка (публічная)",
"navigation_bar.logout": "Выйсці",
"navigation_bar.moderation": "Мадэрацыя",
"navigation_bar.more": "Больш",
"navigation_bar.mutes": "Ігнараваныя карыстальнікі",
"navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.",
"navigation_bar.preferences": "Налады",
"navigation_bar.privacy_and_reach": "Прыватнасць і пошук",
"navigation_bar.search": "Пошук",
"navigation_bar.search_trends": "Пошук / Трэндавае",
"navigation_panel.collapse_followed_tags": "Згарнуць меню падпісак на хэштэгі",
"navigation_panel.collapse_lists": "Згарнуць меню спісаў",
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
"notification.admin.report": "{name} паскардзіўся на {target}",
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
@ -553,10 +497,7 @@
"notification.admin.report_statuses": "{name} паскардзіўся на {target} з прычыны {category}",
"notification.admin.report_statuses_other": "{name} паскардзіўся на {target}",
"notification.admin.sign_up": "{name} зарэгістраваўся",
"notification.annual_report.view": "Перайсці да #Wrapstodon",
"notification.favourite": "Ваш допіс упадабаны {name}",
"notification.favourite_pm": "Ваша асабістае згадванне ўпадабана {name}",
"notification.favourite_pm.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} few {# іншыя} many {# іншых} other {# іншых}}</a> ўпадабалі ваша асабістае згадванне",
"notification.follow": "{name} падпісаўся на вас",
"notification.follow_request": "{name} адправіў запыт на падпіску",
"notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас",
@ -567,7 +508,7 @@
"notification.mention": "Згадванне",
"notification.mentioned_you": "{name} згадаў вас",
"notification.moderation-warning.learn_more": "Даведацца больш",
"notification.moderation_warning": "Вы атрымалі папярэджанне ад мадэратараў",
"notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі",
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
@ -598,7 +539,7 @@
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
"notification_requests.view": "Прагляд апавяшчэнняў",
"notifications.clear": "Ачысціць апавяшчэнні",
"notifications.clear_confirmation": "Вы ўпэўнены, што хочаце назаўсёды сцерці ўсе свае паведамленні?",
"notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?",
"notifications.clear_title": "Ачысціць апавяшчэнні?",
"notifications.column_settings.admin.report": "Новыя скаргі:",
"notifications.column_settings.admin.sign_up": "Новыя ўваходы:",
@ -608,7 +549,7 @@
"notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі",
"notifications.column_settings.follow": "Новыя падпісчыкі:",
"notifications.column_settings.follow_request": "Новыя запыты на падпіску:",
"notifications.column_settings.group": "Абяднаць апавяшчэнні ад падпісчыкаў",
"notifications.column_settings.group": "Аб'яднаць апавяшчэнні ад падпісчыкаў",
"notifications.column_settings.mention": "Згадванні:",
"notifications.column_settings.poll": "Вынікі апытання:",
"notifications.column_settings.push": "Push-апавяшчэнні",
@ -630,13 +571,13 @@
"notifications.group": "{count} Апавяшчэнняў",
"notifications.mark_as_read": "Пазначыць усе апавяшчэнні як прачытаныя",
"notifications.permission_denied": "Апавяшчэнні на працоўным стале недаступныя з-за папярэдне адхіленага запыта праў браўзера",
"notifications.permission_denied_alert": "З-за таго, што запыт браўзера быў раней адхілены, немагчыма ўключыць апавяшчэнні на працоўным стале",
"notifications.permission_denied_alert": "Апавяшчэнні на працоўным стале не могуць быць уключаныя, з-за таго што запыт браўзера быў адхілены",
"notifications.permission_required": "Апавяшчэнні на працоўным стале недаступныя, з-за таго што неабходны дазвол не быў дадзены.",
"notifications.policy.accept": "Прыняць",
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
"notifications.policy.drop": "Iгнараваць",
"notifications.policy.filter": "Фільтраваць",
"notifications.policy.filter_limited_accounts_title": "Уліковыя запісы пад мадэрацыяй",
"notifications.policy.filter_limited_accounts_title": "Абмежаваныя ўліковыя запісы",
"notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}",
"notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы",
"notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
@ -653,13 +594,13 @@
"onboarding.follows.done": "Гатова",
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
"onboarding.follows.search": "Пошук",
"onboarding.follows.title": "Падпішыцеся на некага, каб пачаць",
"onboarding.follows.title": "Падпішыцеся каб пачаць",
"onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
"onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
"onboarding.profile.display_name": "Бачнае імя",
"onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
"onboarding.profile.note": "Біяграфія",
"onboarding.profile.note_hint": "Вы можаце @згадваць іншых людзей або выкарыстоўваць #хэштэгі…",
"onboarding.profile.note_hint": "Вы можаце @згадаць іншых людзей або выкарыстоўваць #хэштэгі…",
"onboarding.profile.save_and_continue": "Захаваць і працягнуць",
"onboarding.profile.title": "Налады профілю",
"onboarding.profile.upload_avatar": "Загрузіць фота профілю",
@ -679,7 +620,6 @@
"poll_button.remove_poll": "Выдаліць апытанне",
"privacy.change": "Змяніць прыватнасць допісу",
"privacy.direct.long": "Усе згаданыя ў допісе",
"privacy.direct.short": "Асабістае згадванне",
"privacy.private.long": "Толькі вашыя падпісчыкі",
"privacy.private.short": "Падпісчыкі",
"privacy.public.long": "Усе, хто ёсць і каго няма ў Mastodon",
@ -689,10 +629,10 @@
"privacy.unlisted.short": "Ціхі публічны",
"privacy_policy.last_updated": "Адноўлена {date}",
"privacy_policy.title": "Палітыка канфідэнцыйнасці",
"recommended": "Рэкамендаванае",
"recommended": "Рэкамендуем",
"refresh": "Абнавiць",
"regeneration_indicator.please_stand_by": "Пачакайце.",
"regeneration_indicator.preparing_your_home_feed": "Рыхтуем вашу галоўную стужку…",
"regeneration_indicator.please_stand_by": "Калі ласка, пачакайце.",
"regeneration_indicator.preparing_your_home_feed": "Рыхтуем вашую стужку…",
"relative_time.days": "{number} д",
"relative_time.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}} таму",
"relative_time.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}} таму",
@ -709,7 +649,7 @@
"reply_indicator.poll": "Апытанне",
"report.block": "Заблакіраваць",
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
"report.categories.legal": "Звязанае з правам",
"report.categories.legal": "Права",
"report.categories.other": "Іншае",
"report.categories.spam": "Спам",
"report.categories.violation": "Змест парушае адно ці некалькі правілаў сервера",
@ -776,8 +716,8 @@
"search_results.accounts": "Профілі",
"search_results.all": "Усё",
"search_results.hashtags": "Хэштэгі",
"search_results.no_results": "Няма вынікаў.",
"search_results.no_search_yet": "Паспрабуйце пашукаць допісы, профілі або хэштэгі.",
"search_results.no_results": "Анічога ня знойдзена.",
"search_results.no_search_yet": "Паспрабуйце пашукаць допісы, профілі або гэштаґі.",
"search_results.see_all": "Праглядзець усе",
"search_results.statuses": "Допісы",
"search_results.title": "Шукаць \"{q}\"",
@ -798,7 +738,7 @@
"status.bookmark": "Дадаць закладку",
"status.cancel_reblog_private": "Прыбраць",
"status.cannot_reblog": "Гэты пост нельга пашырыць",
"status.continued_thread": "Працяг ланцужка",
"status.continued_thread": "Працяг тэмы",
"status.copy": "Скапіраваць спасылку на допіс",
"status.delete": "Выдаліць",
"status.detailed_status": "Дэтальны агляд размовы",
@ -823,7 +763,6 @@
"status.mute_conversation": "Ігнараваць размову",
"status.open": "Разгарнуць гэты допіс",
"status.pin": "Замацаваць у профілі",
"status.quote_post_author": "Допіс карыстальніка @{name}",
"status.read_more": "Чытаць болей",
"status.reblog": "Пашырыць",
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
@ -832,7 +771,7 @@
"status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.",
"status.redraft": "Выдаліць і паправіць",
"status.remove_bookmark": "Выдаліць закладку",
"status.replied_in_thread": "Адказаў у ланцужку",
"status.replied_in_thread": "Адказаў у тэме",
"status.replied_to": "Адказаў {name}",
"status.reply": "Адказаць",
"status.replyAll": "Адказаць у ланцугу",
@ -852,11 +791,8 @@
"subscribed_languages.save": "Захаваць змены",
"subscribed_languages.target": "Змяніць мовы падпіскі для {target}",
"tabs_bar.home": "Галоўная",
"tabs_bar.menu": "Меню",
"tabs_bar.notifications": "Апавяшчэнні",
"tabs_bar.publish": "Новы допіс",
"tabs_bar.search": "Пошук",
"terms_of_service.title": "Умовы выкарыстання",
"terms_of_service.title": "Умовы абслугоўваньня",
"time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
"time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
@ -882,12 +818,6 @@
"video.expand": "Разгарнуць відэа",
"video.fullscreen": "Увесь экран",
"video.hide": "Схаваць відэа",
"video.mute": "Выключыць гук",
"video.pause": "Паўза",
"video.play": "Прайграць",
"video.skip_backward": "Праматаць назад",
"video.skip_forward": "Праматаць уперад",
"video.unmute": "Уключыць гук",
"video.volume_down": "Паменшыць гучнасць",
"video.volume_up": "Павялічыць гучнасць"
"video.play": "Прайграць"
}

View File

@ -8,7 +8,6 @@
"about.domain_blocks.silenced.title": "Ограничено",
"about.domain_blocks.suspended.explanation": "Никакви данни от този сървър няма да се обработват, съхраняват или обменят, правещи невъзможно всяко взаимодействие или комуникация с потребители от тези сървъри.",
"about.domain_blocks.suspended.title": "Спряно",
"about.language_label": "Език",
"about.not_available": "Тази информация не е публична на този сървър.",
"about.powered_by": "Децентрализирана социална мрежа, захранвана от {mastodon}",
"about.rules": "Правила на сървъра",
@ -29,7 +28,6 @@
"account.edit_profile": "Редактиране на профила",
"account.enable_notifications": "Известяване при публикуване от @{name}",
"account.endorse": "Представи в профила",
"account.familiar_followers_many": "Последвано от {name1}, {name2}, и {othersCount, plural, one {един друг, когото познавате} other {# други, които познавате}}",
"account.familiar_followers_one": "Последвано от {name1}",
"account.familiar_followers_two": "Последвано от {name1} и {name2}",
"account.featured": "Препоръчано",
@ -42,7 +40,6 @@
"account.followers": "Последователи",
"account.followers.empty": "Още никой не следва потребителя.",
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
"account.followers_you_know_counter": "{counter} познавате",
"account.following": "Последвано",
"account.following_counter": "{count, plural, one {{counter} последван} other {{counter} последвани}}",
"account.follows.empty": "Потребителят още никого не следва.",
@ -188,7 +185,7 @@
"community.column_settings.remote_only": "Само отдалечено",
"compose.language.change": "Смяна на езика",
"compose.language.search": "Търсене на езици...",
"compose.published.body": "Публикувано.",
"compose.published.body": "Публикувана публикация.",
"compose.published.open": "Отваряне",
"compose.saved.body": "Запазена публикация.",
"compose_form.direct_message_warning_learn_more": "Още информация",
@ -218,13 +215,6 @@
"confirmations.delete_list.confirm": "Изтриване",
"confirmations.delete_list.message": "Наистина ли искате да изтриете завинаги списъка?",
"confirmations.delete_list.title": "Изтривате ли списъка?",
"confirmations.discard_draft.confirm": "Изхвърляне и продължаване",
"confirmations.discard_draft.edit.cancel": "Възобновяване на редактиране",
"confirmations.discard_draft.edit.message": "Продължаването ще изхвърли всякакви промени, които сте правили в публикацията, която сега редактирате.",
"confirmations.discard_draft.edit.title": "Изхвърляте ли промените в публикацията си?",
"confirmations.discard_draft.post.cancel": "Възстановка на чернова",
"confirmations.discard_draft.post.message": "Продължаването ще изхвърли публикацията, която сега съставяте.",
"confirmations.discard_draft.post.title": "Изхвърляте ли черновата си публикация?",
"confirmations.discard_edit_media.confirm": "Отхвърляне",
"confirmations.discard_edit_media.message": "Не сте запазили промени на описанието или огледа на мултимедията, отхвърляте ли ги?",
"confirmations.follow_to_list.confirm": "Последване и добавяне в списък",
@ -334,15 +324,9 @@
"errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет",
"errors.unexpected_crash.report_issue": "Сигнал за проблем",
"explore.suggested_follows": "Хора",
"explore.title": "Вървежно",
"explore.trending_links": "Новини",
"explore.trending_statuses": "Публикации",
"explore.trending_tags": "Хаштагове",
"featured_carousel.header": "{count, plural, one {закачена публикация} other {закачени публикации}}",
"featured_carousel.next": "Напред",
"featured_carousel.post": "Публикация",
"featured_carousel.previous": "Назад",
"featured_carousel.slide": "{index} от {total}",
"filter_modal.added.context_mismatch_explanation": "Тази категория филтър не е приложима към контекста, в който достъпвате тази публикация. Ако желаете да филтрирате публикациите в този контекст, трябва да изберете друг филтър.",
"filter_modal.added.context_mismatch_title": "Несъвпадащ контекст!",
"filter_modal.added.expired_explanation": "Валидността на тази категория филтър е изтекла. Сменете срока на валидност, за да я приложите.",
@ -421,7 +405,6 @@
"hints.profiles.see_more_posts": "Преглед на още публикации на {domain}",
"hints.threads.replies_may_be_missing": "Отговори от други сървъри може да липсват.",
"hints.threads.see_more": "Преглед на още отговори на {domain}",
"home.column_settings.show_quotes": "Показване на цитираното",
"home.column_settings.show_reblogs": "Показване на подсилванията",
"home.column_settings.show_replies": "Показване на отговорите",
"home.hide_announcements": "Скриване на оповестяванията",
@ -544,10 +527,8 @@
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.",
"mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.",
"navigation_bar.about": "Относно",
"navigation_bar.account_settings": "Парола и сигурност",
"navigation_bar.administration": "Администрация",
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
"navigation_bar.automated_deletion": "Автоматично изтриване на публикации",
"navigation_bar.blocks": "Блокирани потребители",
"navigation_bar.bookmarks": "Отметки",
"navigation_bar.direct": "Частни споменавания",
@ -557,17 +538,13 @@
"navigation_bar.follow_requests": "Заявки за последване",
"navigation_bar.followed_tags": "Последвани хаштагове",
"navigation_bar.follows_and_followers": "Последвания и последователи",
"navigation_bar.import_export": "Внасяне и изнасяне",
"navigation_bar.lists": "Списъци",
"navigation_bar.logout": "Излизане",
"navigation_bar.moderation": "Модериране",
"navigation_bar.more": "Още",
"navigation_bar.mutes": "Заглушени потребители",
"navigation_bar.opened_in_classic_interface": "Публикации, акаунти и други особени страници се отварят по подразбиране в класическия мрежови интерфейс.",
"navigation_bar.preferences": "Предпочитания",
"navigation_bar.privacy_and_reach": "Поверителност и обхват",
"navigation_bar.search": "Търсене",
"navigation_bar.search_trends": "Търсене / Вървежно",
"not_signed_in_indicator.not_signed_in": "Трябва ви вход за достъп до ресурса.",
"notification.admin.report": "{name} докладва {target}",
"notification.admin.report_account": "{name} докладва {count, plural, one {публикация} other {# публикации}} от {target} за {category}",
@ -794,7 +771,6 @@
"report_notification.categories.violation": "Нарушение на правилото",
"report_notification.categories.violation_sentence": "нарушение на правило",
"report_notification.open": "Отваряне на доклада",
"search.clear": "Изчистване на търсенето",
"search.no_recent_searches": "Няма скорошни търсения",
"search.placeholder": "Търсене",
"search.quick_action.account_search": "Съвпадение на профили {x}",
@ -861,13 +837,6 @@
"status.mute_conversation": "Заглушаване на разговора",
"status.open": "Разширяване на публикацията",
"status.pin": "Закачане в профила",
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
"status.quote_error.not_found": "Публикацията не може да се показва.",
"status.quote_error.pending_approval": "Публикацията чака одобрение от първоначалния автор.",
"status.quote_error.rejected": "Публикацията не може да се показва като първоначалния автор не позволява цитирането ѝ.",
"status.quote_error.removed": "Публикацията е премахната от автора ѝ.",
"status.quote_error.unauthorized": "Публикацията не може да се показва, тъй като не сте упълномощени да я гледате.",
"status.quote_post_author": "Публикация от {name}",
"status.read_more": "Още за четене",
"status.reblog": "Подсилване",
"status.reblog_private": "Подсилване с оригиналната видимост",
@ -897,10 +866,7 @@
"subscribed_languages.save": "Запазване на промените",
"subscribed_languages.target": "Промяна на абонираните езици за {target}",
"tabs_bar.home": "Начало",
"tabs_bar.menu": "Меню",
"tabs_bar.notifications": "Известия",
"tabs_bar.publish": "Нова публикация",
"tabs_bar.search": "Търсене",
"terms_of_service.effective_as_of": "В сила от {date}",
"terms_of_service.title": "Условия на услугата",
"terms_of_service.upcoming_changes_on": "Предстоящи промени на {date}",

View File

@ -219,13 +219,6 @@
"confirmations.delete_list.confirm": "Elimina",
"confirmations.delete_list.message": "Segur que vols suprimir permanentment aquesta llista?",
"confirmations.delete_list.title": "Eliminar la llista?",
"confirmations.discard_draft.confirm": "Descarta i continua",
"confirmations.discard_draft.edit.cancel": "Continua l'edició",
"confirmations.discard_draft.edit.message": "Continuar descartarà tots els canvis que hàgiu fet a la publicació que editeu.",
"confirmations.discard_draft.edit.title": "Descartar els canvis a la publicació?",
"confirmations.discard_draft.post.cancel": "Reprendre l'esborrany",
"confirmations.discard_draft.post.message": "Continuar descartarà la publicació que escriviu.",
"confirmations.discard_draft.post.title": "Descartar l'esborrany?",
"confirmations.discard_edit_media.confirm": "Descarta",
"confirmations.discard_edit_media.message": "Tens canvis no desats en la descripció del contingut o en la previsualització, els vols descartar?",
"confirmations.follow_to_list.confirm": "Seguir i afegir a una llista",
@ -563,8 +556,6 @@
"navigation_bar.follows_and_followers": "Seguint i seguidors",
"navigation_bar.import_export": "Importació i exportació",
"navigation_bar.lists": "Llistes",
"navigation_bar.live_feed_local": "Canal en directe (local)",
"navigation_bar.live_feed_public": "Canal en directe (públic)",
"navigation_bar.logout": "Tanca la sessió",
"navigation_bar.moderation": "Moderació",
"navigation_bar.more": "Més",
@ -573,10 +564,7 @@
"navigation_bar.preferences": "Preferències",
"navigation_bar.privacy_and_reach": "Privacitat i abast",
"navigation_bar.search": "Cerca",
"navigation_bar.search_trends": "Cerca / En tendència",
"navigation_panel.collapse_followed_tags": "Comprimeix el menú d'etiquetes seguides",
"navigation_panel.collapse_lists": "Tanca el menú",
"navigation_panel.expand_followed_tags": "Expandeix el menú d'etiquetes seguides",
"navigation_panel.expand_lists": "Expandeix el menú",
"not_signed_in_indicator.not_signed_in": "Cal que iniciïs la sessió per a accedir a aquest recurs.",
"notification.admin.report": "{name} ha reportat {target}",
@ -804,7 +792,6 @@
"report_notification.categories.violation": "Violació de norma",
"report_notification.categories.violation_sentence": "violació de normes",
"report_notification.open": "Obre l'informe",
"search.clear": "Esborra la cerca",
"search.no_recent_searches": "No hi ha cerques recents",
"search.placeholder": "Cerca",
"search.quick_action.account_search": "Perfils coincidint amb {x}",

View File

@ -62,7 +62,7 @@
"account.mute_notifications_short": "Sluk for notifikationer",
"account.mute_short": "Skjul",
"account.muted": "Skjult",
"account.muting": "Skjuler",
"account.muting": "Tavsgørelse",
"account.mutual": "I følger hinanden",
"account.no_bio": "Ingen beskrivelse til rådighed.",
"account.open_original_page": "Åbn oprindelig side",
@ -83,7 +83,7 @@
"account.unendorse": "Vis ikke på profil",
"account.unfollow": "Følg ikke længere",
"account.unmute": "Vis @{name} igen",
"account.unmute_notifications_short": "Vis notifikationer igen",
"account.unmute_notifications_short": "Tænd for notifikationer",
"account.unmute_short": "Vis igen",
"account_note.placeholder": "Klik for at tilføje notat",
"admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding",
@ -130,7 +130,7 @@
"attachments_list.unprocessed": "(ubehandlet)",
"audio.hide": "Skjul lyd",
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
"block_modal.show_less": "Vis mindre",
"block_modal.show_less": "Vis færre",
"block_modal.show_more": "Vis flere",
"block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.",
"block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.",
@ -208,9 +208,9 @@
"compose_form.publish": "Publicér",
"compose_form.reply": "Svar",
"compose_form.save_changes": "Opdatér",
"compose_form.spoiler.marked": "Fjern indholdsadvarsel",
"compose_form.spoiler.unmarked": "Tilføj indholdsadvarsel",
"compose_form.spoiler_placeholder": "Indholdsadvarsel (valgfri)",
"compose_form.spoiler.marked": "Fjern emnefelt",
"compose_form.spoiler.unmarked": "Tilføj emnefelt",
"compose_form.spoiler_placeholder": "Emnefelt (valgfrit)",
"confirmation_modal.cancel": "Afbryd",
"confirmations.block.confirm": "Blokér",
"confirmations.delete.confirm": "Slet",
@ -239,9 +239,9 @@
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
"confirmations.mute.confirm": "Skjul",
"confirmations.redraft.confirm": "Slet og omskriv",
"confirmations.redraft.confirm": "Slet og omformulér",
"confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
"confirmations.redraft.title": "Slet og omskriv indlæg?",
"confirmations.redraft.title": "Slet og omformulér indlæg?",
"confirmations.remove_from_followers.confirm": "Fjern følger",
"confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?",
"confirmations.remove_from_followers.title": "Fjern følger?",
@ -279,14 +279,14 @@
"domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
"domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.",
"domain_pill.server": "Server",
"domain_pill.their_handle": "Deres handle:",
"domain_pill.their_handle": "Deres greb:",
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"domain_pill.username": "Brugernavn",
"domain_pill.whats_in_a_handle": "Hvad indeholder et handle?",
"domain_pill.whats_in_a_handle": "Hvad er der i et greb?",
"domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
"domain_pill.who_you_are": "Fordi dit handle fortæller, hvem du er, og hvor du er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
"domain_pill.your_handle": "Dit handle:",
"domain_pill.your_handle": "Dit greb:",
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
@ -386,7 +386,7 @@
"follow_suggestions.similar_to_recently_followed_longer": "Minder om profiler, du har fulgt for nylig",
"follow_suggestions.view_all": "Vis alle",
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
"followed_tags": "Hashtags, som følges",
"followed_tags": "Hashtag, som følges",
"footer.about": "Om",
"footer.directory": "Profiloversigt",
"footer.get_app": "Hent appen",
@ -414,7 +414,7 @@
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
"hashtag.feature": "Fremhæv på profil",
"hashtag.follow": "Følg hashtag",
"hashtag.mute": "Skjul #{hashtag}",
"hashtag.mute": "Tavsgør #{hashtag}",
"hashtag.unfeature": "Fremhæv ikke på profil",
"hashtag.unfollow": "Følg ikke længere hashtag",
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
@ -492,9 +492,9 @@
"keyboard_shortcuts.reply": "Besvar indlægget",
"keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger",
"keyboard_shortcuts.search": "Fokusér søgebjælke",
"keyboard_shortcuts.spoilers": "Vis/skjul indholdsadvarsel-felt",
"keyboard_shortcuts.spoilers": "Vis/skjul emnefelt",
"keyboard_shortcuts.start": "Åbn \"komme i gang\"-kolonne",
"keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag indholdsadvarsel",
"keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag emnefelt",
"keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier",
"keyboard_shortcuts.toot": "Påbegynd nyt indlæg",
"keyboard_shortcuts.translate": "for at oversætte et indlæg",
@ -543,10 +543,10 @@
"mute_modal.hide_options": "Skjul valgmuligheder",
"mute_modal.indefinite": "Indtil jeg vælger at se dem igen",
"mute_modal.show_options": "Vis valgmuligheder",
"mute_modal.they_can_mention_and_follow": "Vedkommende kan nævne og følge dig, men vil ikke blive vist.",
"mute_modal.they_can_mention_and_follow": "De kan omtale og følge dig, men du vil ikke se dem.",
"mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.",
"mute_modal.title": "Skjul bruger?",
"mute_modal.you_wont_see_mentions": "Indlæg, som nævner vedkommende, vises ikke.",
"mute_modal.you_wont_see_mentions": "Du vil ikke se indlæg som omtaler dem.",
"mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.",
"navigation_bar.about": "Om",
"navigation_bar.account_settings": "Adgangskode og sikkerhed",
@ -560,7 +560,7 @@
"navigation_bar.favourites": "Favoritter",
"navigation_bar.filters": "Skjulte ord",
"navigation_bar.follow_requests": "Følgeanmodninger",
"navigation_bar.followed_tags": "Hashtags, som følges",
"navigation_bar.followed_tags": "Hashtag, som følges",
"navigation_bar.follows_and_followers": "Følges og følgere",
"navigation_bar.import_export": "Import og eksport",
"navigation_bar.lists": "Lister",
@ -572,7 +572,7 @@
"navigation_bar.mutes": "Skjulte brugere",
"navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.",
"navigation_bar.preferences": "Præferencer",
"navigation_bar.privacy_and_reach": "Fortrolighed og rækkevidde",
"navigation_bar.privacy_and_reach": "Fortrolighed og udbredelse",
"navigation_bar.search": "Søg",
"navigation_bar.search_trends": "Søg/Trender",
"navigation_panel.collapse_followed_tags": "Sammenfold menuen Fulgte hashtags",
@ -686,11 +686,11 @@
"notifications.policy.filter_limited_accounts_hint": "Begrænset af servermoderatorer",
"notifications.policy.filter_limited_accounts_title": "Modererede konti",
"notifications.policy.filter_new_accounts.hint": "Oprettet indenfor {days, plural, one {den seneste dag} other {de seneste # dage}}",
"notifications.policy.filter_new_accounts_title": "Nye konti",
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {mindre end # dage}}",
"notifications.policy.filter_not_followers_title": "Personer, som ikke følger dig",
"notifications.policy.filter_new_accounts_title": "Ny konti",
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {færre end # dage}}",
"notifications.policy.filter_not_followers_title": "Folk, som ikke følger dig",
"notifications.policy.filter_not_following_hint": "Indtil du manuelt godkender dem",
"notifications.policy.filter_not_following_title": "Personer, du ikke følger",
"notifications.policy.filter_not_following_title": "Folk, du ikke følger",
"notifications.policy.filter_private_mentions_hint": "Filtreret, medmindre det er i svar på egen omtale, eller hvis afsenderen følges",
"notifications.policy.filter_private_mentions_title": "Uopfordrede private omtaler",
"notifications.policy.title": "Håndtér notifikationer fra…",
@ -830,7 +830,7 @@
"search_results.see_all": "Vis alle",
"search_results.statuses": "Indlæg",
"search_results.title": "Søg efter \"{q}\"",
"server_banner.about_active_users": "Personer, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:",
"server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, du kan bruge for at deltage i fediverset.",
@ -885,10 +885,10 @@
"status.reblogged_by": "{name} fremhævede",
"status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
"status.redraft": "Slet og omskriv",
"status.redraft": "Slet og omformulér",
"status.remove_bookmark": "Fjern bogmærke",
"status.remove_favourite": "Fjern fra favoritter",
"status.replied_in_thread": "Svarede i tråd",
"status.replied_in_thread": "Svaret i tråd",
"status.replied_to": "Svarede {name}",
"status.reply": "Besvar",
"status.replyAll": "Svar alle",
@ -902,7 +902,7 @@
"status.translate": "Oversæt",
"status.translated_from_with": "Oversat fra {lang} ved brug af {provider}",
"status.uncached_media_warning": "Ingen forhåndsvisning",
"status.unmute_conversation": "Vis samtale",
"status.unmute_conversation": "Genaktivér samtale",
"status.unpin": "Frigør fra profil",
"subscribed_languages.lead": "Efter ændringen vises kun indlæg på de valgte sprog på din hjem- og listetidslinje. Vælger du ingen, vil du modtage indlæg på alle sprog.",
"subscribed_languages.save": "Gem ændringer",

View File

@ -4,7 +4,7 @@
"about.default_locale": "Προεπιλογή",
"about.disclaimer": "Το Mastodon είναι ελεύθερο λογισμικό ανοιχτού κώδικα και εμπορικό σήμα της Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Αιτιολογία μη διαθέσιμη",
"about.domain_blocks.preamble": "Σε γενικές γραμμές το Mastodon σου επιτρέπει να βλέπεις περιεχόμενο και να αλληλεπιδράς με χρήστες από οποιονδήποτε άλλο διακομιστή σε ένα διασυνδεδεμένο σύμπαν διακομιστών (fediverse). Ακολουθούν οι εξαιρέσεις που ισχύουν για τον συγκεκριμένο διακομιστή.",
"about.domain_blocks.preamble": "Σε γενικές γραμμές το Mastodon σού επιτρέπει να βλέπεις περιεχόμενο και να αλληλεπιδράς με χρήστες από οποιονδήποτε άλλο διακομιστή σε ένα διασυνδεδεμένο σύμπαν διακομιστών (fediverse). Ακολουθούν οι εξαιρέσεις που ισχύουν για τον συγκεκριμένο διακομιστή.",
"about.domain_blocks.silenced.explanation": "Συνήθως δε θα βλέπεις προφίλ και περιεχόμενο απ' αυτόν τον διακομιστή, εκτός αν κάνεις συγκεκριμένη αναζήτηση ή επιλέξεις να τον ακολουθήσεις.",
"about.domain_blocks.silenced.title": "Περιορισμένος",
"about.domain_blocks.suspended.explanation": "Τα δεδομένα αυτού του διακομιστή, δε θα επεξεργάζονται, δε θα αποθηκεύονται και δε θα ανταλλάσσονται, καθιστώντας οποιαδήποτε αλληλεπίδραση ή επικοινωνία με χρήστες από αυτόν το διακομιστή αδύνατη.",
@ -65,7 +65,7 @@
"account.muting": "Σίγαση",
"account.mutual": "Ακολουθείτε ο ένας τον άλλο",
"account.no_bio": "Δεν υπάρχει περιγραφή.",
"account.open_original_page": "Άνοιγμα αυθεντικής σελίδας",
"account.open_original_page": "Ανοικτό",
"account.posts": "Τουτ",
"account.posts_with_replies": "Τουτ και απαντήσεις",
"account.remove_from_followers": "Κατάργηση {name} από τους ακόλουθους",
@ -194,7 +194,7 @@
"compose.saved.body": "Η ανάρτηση αποθηκεύτηκε.",
"compose_form.direct_message_warning_learn_more": "Μάθε περισσότερα",
"compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μη μοιράζεσαι ευαίσθητες πληροφορίες μέσω του Mastodon.",
"compose_form.hashtag_warning": "Αυτή η ανάρτηση δεν θα εμφανίζεται κάτω από οποιαδήποτε ετικέτα καθώς δεν είναι δημόσια. Μόνο οι δημόσιες αναρτήσεις μπορούν να αναζητηθούν με ετικέτα.",
"compose_form.hashtag_warning": "Αυτή η δημοσίευση δεν θα εμφανίζεται κάτω από οποιαδήποτε ετικέτα καθώς δεν είναι δημόσια. Μόνο οι δημόσιες δημοσιεύσεις μπορούν να αναζητηθούν με ετικέτα.",
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σου προς τους ακολούθους σου.",
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
"compose_form.placeholder": "Τι σκέφτεσαι;",
@ -214,18 +214,11 @@
"confirmation_modal.cancel": "Άκυρο",
"confirmations.block.confirm": "Αποκλεισμός",
"confirmations.delete.confirm": "Διαγραφή",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την ανάρτηση;",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;",
"confirmations.delete.title": "Διαγραφή ανάρτησης;",
"confirmations.delete_list.confirm": "Διαγραφή",
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
"confirmations.delete_list.title": "Διαγραφή λίστας;",
"confirmations.discard_draft.confirm": "Απόρριψη και συνέχεια",
"confirmations.discard_draft.edit.cancel": "Συνέχιση επεξεργασίας",
"confirmations.discard_draft.edit.message": "Συνεχίζοντας θα απορρίψει τυχόν αλλαγές που έχετε κάνει στην ανάρτηση που επεξεργάζεστε.",
"confirmations.discard_draft.edit.title": "Απόρριψη αλλαγών στην ανάρτηση σας;",
"confirmations.discard_draft.post.cancel": "Συνέχιση προχείρου",
"confirmations.discard_draft.post.message": "Συνεχίζοντας θα απορρίψει την ανάρτηση που συνθέτετε.",
"confirmations.discard_draft.post.title": "Απόρριψη της πρόχειρης ανάρτησης σας;",
"confirmations.discard_edit_media.confirm": "Απόρριψη",
"confirmations.discard_edit_media.message": "Έχεις μη αποθηκευμένες αλλαγές στην περιγραφή πολυμέσων ή στην προεπισκόπηση, απόρριψη ούτως ή άλλως;",
"confirmations.follow_to_list.confirm": "Ακολούθησε και πρόσθεσε στη λίστα",
@ -237,7 +230,7 @@
"confirmations.missing_alt_text.confirm": "Προσθήκη εναλ κειμένου",
"confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.",
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
"confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;",
"confirmations.missing_alt_text.title": "Προσθήκη alt κειμένου;",
"confirmations.mute.confirm": "Αποσιώπηση",
"confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
"confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την ανάρτηση και να την ξαναγράψεις; Οι προτιμήσεις και προωθήσεις θα χαθούν και οι απαντήσεις στην αρχική ανάρτηση θα μείνουν ορφανές.",
@ -276,7 +269,7 @@
"domain_block_modal.you_will_lose_num_followers": "Θα χάσετε {followersCount, plural, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.",
"domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.",
"domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.",
"domain_pill.activitypub_lets_connect": "Σου επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.",
"domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.",
"domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.",
"domain_pill.server": "Διακομιστής",
"domain_pill.their_handle": "Το πλήρες όνομα χρήστη:",
@ -322,7 +315,7 @@
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
"empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
"empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
"empty_column.followed_tags": "Δεν έχετε ακολουθήσει ακόμα καμία ετικέτα. Όταν το κάνετε, θα εμφανιστούν εδώ.",
"empty_column.followed_tags": "Δεν έχετε παρακολουθήσει ακόμα καμία ετικέτα. Όταν το κάνετε, θα εμφανιστούν εδώ.",
"empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.",
"empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
@ -386,7 +379,7 @@
"follow_suggestions.similar_to_recently_followed_longer": "Παρόμοια με προφίλ που ακολούθησες πρόσφατα",
"follow_suggestions.view_all": "Εμφάνιση όλων",
"follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις",
"followed_tags": "Ακολουθούμενες ετικέτες",
"followed_tags": "Ετικέτες που ακολουθούνται",
"footer.about": "Σχετικά με",
"footer.directory": "Κατάλογος προφίλ",
"footer.get_app": "Αποκτήστε την εφαρμογή",
@ -417,7 +410,7 @@
"hashtag.mute": "Σίγαση #{hashtag}",
"hashtag.unfeature": "Να μην αναδεικνύεται στο προφίλ",
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
"hashtags.and_other": "…και {count, plural, other {# ακόμη}}",
"hashtags.and_other": "…και {count, plural, one {}other {# ακόμη}}",
"hints.profiles.followers_may_be_missing": "Μπορεί να λείπουν ακόλουθοι για αυτό το προφίλ.",
"hints.profiles.follows_may_be_missing": "Άτομα που ακολουθούνται μπορεί να λείπουν απ' αυτό το προφίλ.",
"hints.profiles.posts_may_be_missing": "Κάποιες αναρτήσεις από αυτό το προφίλ μπορεί να λείπουν.",
@ -425,7 +418,7 @@
"hints.profiles.see_more_follows": "Δες περισσότερα άτομα που ακολουθούνται στο {domain}",
"hints.profiles.see_more_posts": "Δες περισσότερες αναρτήσεις στο {domain}",
"hints.threads.replies_may_be_missing": "Απαντήσεις από άλλους διακομιστές μπορεί να λείπουν.",
"hints.threads.see_more": "Δες περισσότερες απαντήσεις στο {domain}",
"hints.threads.see_more": "Δες περισσότερες αναρτήσεις στο {domain}",
"home.column_settings.show_quotes": "Εμφάνιση παραθεμάτων",
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
@ -456,7 +449,7 @@
"interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;",
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
"interaction_modal.title.favourite": "Αγάπησε την ανάρτηση του χρήστη {name}",
"interaction_modal.title.favourite": "Favorite {name}'s post\nΠροτίμησε την ανάρτηση της/του {name}",
"interaction_modal.title.follow": "Ακολούθησε {name}",
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
"interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",
@ -468,13 +461,13 @@
"keyboard_shortcuts.back": "Μετάβαση πίσω",
"keyboard_shortcuts.blocked": "Άνοιγμα λίστας αποκλεισμένων χρηστών",
"keyboard_shortcuts.boost": "Ενίσχυση ανάρτησης",
"keyboard_shortcuts.column": "Εστίαση στη στήλη",
"keyboard_shortcuts.compose": "Εστίαση στην περιοχή συγγραφής κειμένου",
"keyboard_shortcuts.column": "Στήλη εστίασης",
"keyboard_shortcuts.compose": "Περιοχή συγγραφής κειμένου εστίασης",
"keyboard_shortcuts.description": "Περιγραφή",
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
"keyboard_shortcuts.down": "Μετακίνηση προς τα κάτω στη λίστα",
"keyboard_shortcuts.enter": "Άνοιγμα ανάρτησης",
"keyboard_shortcuts.favourite": "Αγάπησε την ανάρτηση",
"keyboard_shortcuts.down": "κίνηση προς τα κάτω στη λίστα",
"keyboard_shortcuts.enter": "Εμφάνιση ανάρτησης",
"keyboard_shortcuts.favourite": "Αγαπημένη δημοσίευση",
"keyboard_shortcuts.favourites": "Άνοιγμα λίστας αγαπημένων",
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
@ -491,13 +484,13 @@
"keyboard_shortcuts.profile": "Άνοιγμα προφίλ συγγραφέα",
"keyboard_shortcuts.reply": "Απάντηση στην ανάρτηση",
"keyboard_shortcuts.requests": "Άνοιγμα λίστας αιτημάτων ακολούθησης",
"keyboard_shortcuts.search": "Εστίαση στη γραμμή αναζήτησης",
"keyboard_shortcuts.search": "Γραμμή αναζήτησης εστίασης",
"keyboard_shortcuts.spoilers": "Εμφάνιση/απόκρυψη πεδίου CW",
"keyboard_shortcuts.start": "Άνοιγμα της στήλης \"Ας ξεκινήσουμε\"",
"keyboard_shortcuts.toggle_hidden": "Εμφάνιση/απόκρυψη κειμένου πίσω από το CW",
"keyboard_shortcuts.toggle_sensitivity": "Εμφάνιση/απόκρυψη πολυμέσων",
"keyboard_shortcuts.toot": "Δημιουργία νέας ανάρτησης",
"keyboard_shortcuts.translate": "για να μεταφραστεί μια ανάρτηση",
"keyboard_shortcuts.translate": "να μεταφράσει μια δημοσίευση",
"keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης",
"keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα",
"lightbox.close": "Κλείσιμο",
@ -560,12 +553,10 @@
"navigation_bar.favourites": "Αγαπημένα",
"navigation_bar.filters": "Αποσιωπημένες λέξεις",
"navigation_bar.follow_requests": "Αιτήματα ακολούθησης",
"navigation_bar.followed_tags": "Ακολουθούμενες ετικέτες",
"navigation_bar.followed_tags": "Ετικέτες που ακολουθούνται",
"navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν",
"navigation_bar.import_export": "Εισαγωγή και εξαγωγή",
"navigation_bar.lists": "Λίστες",
"navigation_bar.live_feed_local": "Ζωντανή ροή (τοπική)",
"navigation_bar.live_feed_public": "Ζωντανή ροή (δημόσια)",
"navigation_bar.logout": "Αποσύνδεση",
"navigation_bar.moderation": "Συντονισμός",
"navigation_bar.more": "Περισσότερα",
@ -575,9 +566,9 @@
"navigation_bar.privacy_and_reach": "Ιδιωτικότητα και προσιτότητα",
"navigation_bar.search": "Αναζήτηση",
"navigation_bar.search_trends": "Αναζήτηση / Τάσεις",
"navigation_panel.collapse_followed_tags": "Σύμπτυξη μενού ετικετών που ακολουθείτε",
"navigation_panel.collapse_followed_tags": "Σύμπτυξη μενού ετικετών που ακολουθούνται",
"navigation_panel.collapse_lists": "Σύμπτυξη μενού λίστας",
"navigation_panel.expand_followed_tags": "Επέκταση μενού ετικετών που ακολουθείτε",
"navigation_panel.expand_followed_tags": "Επέκταση μενού ετικετών που ακολουθούνται",
"navigation_panel.expand_lists": "Επέκταση μενού λίστας",
"not_signed_in_indicator.not_signed_in": "Πρέπει να συνδεθείς για να αποκτήσεις πρόσβαση σε αυτόν τον πόρο.",
"notification.admin.report": "Ο/Η {name} ανέφερε τον {target}",
@ -589,11 +580,11 @@
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
"notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
"notification.annual_report.view": "Προβολή #Wrapstodon",
"notification.favourite": "{name} αγάπησε την ανάρτηση σου",
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
"notification.favourite_pm": "Ο χρήστης {name} αγάπησε την ιδιωτική σου επισήμανση",
"notification.favourite_pm.name_and_others_with_link": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ιδωτική σου επισήμανση",
"notification.follow": "Ο χρήστης {name} σε ακολούθησε",
"notification.follow": "Ο/Η {name} σε ακολούθησε",
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> σε ακολούθησαν",
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
@ -726,7 +717,7 @@
"poll_button.add_poll": "Προσθήκη δημοσκόπησης",
"poll_button.remove_poll": "Αφαίρεση δημοσκόπησης",
"privacy.change": "Προσαρμογή ιδιωτικότητας ανάρτησης",
"privacy.direct.long": "Όλοι όσοι αναφέρθηκαν στην ανάρτηση",
"privacy.direct.long": "Όλοι όσοι αναφέρθηκαν στη δημοσίευση",
"privacy.direct.short": "Ιδιωτική επισήμανση",
"privacy.private.long": "Μόνο οι ακόλουθοί σας",
"privacy.private.short": "Ακόλουθοι",
@ -804,8 +795,7 @@
"report_notification.categories.spam_sentence": "ανεπιθύμητα",
"report_notification.categories.violation": "Παραβίαση κανόνα",
"report_notification.categories.violation_sentence": "παραβίαση κανόνα",
"report_notification.open": "Άνοιγμα αναφοράς",
"search.clear": "Εκκαθάριση αναζήτησης",
"report_notification.open": "Ανοιχτή αναφορά",
"search.no_recent_searches": "Καμία πρόσφατη αναζήτηση",
"search.placeholder": "Αναζήτηση",
"search.quick_action.account_search": "Προφίλ που ταιριάζουν με {x}",
@ -858,7 +848,7 @@
"status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}",
"status.embed": "Απόκτηση κώδικα ενσωμάτωσης",
"status.favourite": "Αγαπημένα",
"status.favourites": "{count, plural, one {αγαπημένο} other {αγαπημένα}}",
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
"status.history.created": "{name} δημιούργησε στις {date}",
"status.history.edited": "{name} επεξεργάστηκε στις {date}",
@ -883,7 +873,7 @@
"status.reblog": "Ενίσχυση",
"status.reblog_private": "Ενίσχυση με αρχική ορατότητα",
"status.reblogged_by": "{name} προώθησε",
"status.reblogs": "{count, plural, one {ενίσχυση} other {ενισχύσεις}}",
"status.reblogs": "{count, plural, one {# ενίσχυση} other {# ενισχύσεις}}",
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
"status.redraft": "Σβήσε & ξαναγράψε",
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
@ -895,8 +885,8 @@
"status.report": "Αναφορά @{name}",
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
"status.share": "Κοινοποίηση",
"status.show_less_all": "Δείξε λιγότερο για όλες",
"status.show_more_all": "Δείξε περισσότερο για όλες",
"status.show_less_all": "Δείξε λιγότερα για όλα",
"status.show_more_all": "Δείξε περισσότερα για όλα",
"status.show_original": "Εμφάνιση αρχικού",
"status.title.with_attachments": "{user} δημοσίευσε {attachmentCount, plural, one {ένα συνημμένο} other {{attachmentCount} συνημμένα}}",
"status.translate": "Μετάφραση",

View File

@ -219,13 +219,6 @@
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.delete_list.title": "Delete list?",
"confirmations.discard_draft.confirm": "Discard and continue",
"confirmations.discard_draft.edit.cancel": "Resume editing",
"confirmations.discard_draft.edit.message": "Continuing will discard any changes you have made to the post you are currently editing.",
"confirmations.discard_draft.edit.title": "Discard changes to your post?",
"confirmations.discard_draft.post.cancel": "Resume draft",
"confirmations.discard_draft.post.message": "Continuing will discard the post you are currently composing.",
"confirmations.discard_draft.post.title": "Discard your draft post?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.follow_to_list.confirm": "Follow and add to list",
@ -337,7 +330,6 @@
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue",
"explore.suggested_follows": "People",
"explore.title": "Trending",
"explore.trending_links": "News",
"explore.trending_statuses": "Posts",
"explore.trending_tags": "Hashtags",
@ -549,10 +541,8 @@
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
"navigation_bar.about": "About",
"navigation_bar.account_settings": "Password and security",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Open in advanced web interface",
"navigation_bar.automated_deletion": "Automated post deletion",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.direct": "Private mentions",
@ -562,23 +552,13 @@
"navigation_bar.follow_requests": "Follow requests",
"navigation_bar.followed_tags": "Followed hashtags",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.import_export": "Import and export",
"navigation_bar.lists": "Lists",
"navigation_bar.live_feed_local": "Live feed (local)",
"navigation_bar.live_feed_public": "Live feed (public)",
"navigation_bar.logout": "Logout",
"navigation_bar.moderation": "Moderation",
"navigation_bar.more": "More",
"navigation_bar.mutes": "Muted users",
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
"navigation_bar.preferences": "Preferences",
"navigation_bar.privacy_and_reach": "Privacy and reach",
"navigation_bar.search": "Search",
"navigation_bar.search_trends": "Search / Trending",
"navigation_panel.collapse_followed_tags": "Collapse followed hashtags menu",
"navigation_panel.collapse_lists": "Collapse list menu",
"navigation_panel.expand_followed_tags": "Expand followed hashtags menu",
"navigation_panel.expand_lists": "Expand list menu",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.admin.report": "{name} reported {target}",
"notification.admin.report_account": "{name} reported {count, plural, one {one post} other {# posts}} from {target} for {category}",
@ -805,7 +785,6 @@
"report_notification.categories.violation": "Rule violation",
"report_notification.categories.violation_sentence": "rule violation",
"report_notification.open": "Open report",
"search.clear": "Clear search",
"search.no_recent_searches": "No recent searches",
"search.placeholder": "Search",
"search.quick_action.account_search": "Profiles matching {x}",
@ -908,10 +887,7 @@
"subscribed_languages.save": "Save changes",
"subscribed_languages.target": "Change subscribed languages for {target}",
"tabs_bar.home": "Home",
"tabs_bar.menu": "Menu",
"tabs_bar.notifications": "Notifications",
"tabs_bar.publish": "New Post",
"tabs_bar.search": "Search",
"terms_of_service.effective_as_of": "Effective as of {date}",
"terms_of_service.title": "Terms of Service",
"terms_of_service.upcoming_changes_on": "Upcoming changes on {date}",

View File

@ -858,7 +858,7 @@
"status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",
"status.embed": "Obtener código para insertar",
"status.favourite": "Marcar como favorito",
"status.favourites": "{count, plural, one {vez marcado como favorito} other {veces marcado como favorito}}",
"status.favourites": "{count, plural, one {# vez marcado como favorito} other {# veces marcado como favorito}}",
"status.filter": "Filtrar este mensaje",
"status.history.created": "Creado por {name}, {date}",
"status.history.edited": "Editado por {name}, {date}",

View File

@ -795,7 +795,7 @@
"report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.",
"report.unfollow": "Dejar de seguir a @{name}",
"report.unfollow_explanation": "Estás siguiendo esta cuenta. Para dejar de ver sus publicaciones en tu página de inicio, deja de seguirla.",
"report_notification.attached_statuses": "{count, plural, one {{count} publicación adjunta} other {{count} publicaciones adjuntas}}",
"report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)",
"report_notification.categories.legal": "Legal",
"report_notification.categories.legal_sentence": "contenido ilegal",
"report_notification.categories.other": "Otros",

View File

@ -167,7 +167,7 @@
"column.domain_blocks": "Peidetud domeenid",
"column.edit_list": "Muuda loendit",
"column.favourites": "Lemmikud",
"column.firehose": "Postitused reaalajas",
"column.firehose": "Laiv lõimed",
"column.follow_requests": "Jälgimistaotlused",
"column.home": "Kodu",
"column.list_members": "Halda loendi liikmeid",
@ -337,7 +337,7 @@
"errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
"errors.unexpected_crash.report_issue": "Teavita veast",
"explore.suggested_follows": "Inimesed",
"explore.title": "Populaarsust koguv",
"explore.title": "Populaarsust kohuv",
"explore.trending_links": "Uudised",
"explore.trending_statuses": "Postitused",
"explore.trending_tags": "Sildid",
@ -389,7 +389,7 @@
"followed_tags": "Jälgitavad märksõnad",
"footer.about": "Teave",
"footer.directory": "Profiilikataloog",
"footer.get_app": "Laadi rakendus",
"footer.get_app": "Tõmba äpp",
"footer.keyboard_shortcuts": "Kiirklahvid",
"footer.privacy_policy": "Isikuandmete kaitse",
"footer.source_code": "Lähtekood",
@ -831,7 +831,7 @@
"search_results.statuses": "Postitused",
"search_results.title": "Otsi märksõna: {q}",
"server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)",
"server_banner.active_users": "aktiivset kasutajaid",
"server_banner.active_users": "aktiivsed kasutajad",
"server_banner.administered_by": "Administraator:",
"server_banner.is_one_of_many": "{domain} on üks paljudest sõltumatutest Mastodoni serveritest, mida saab fediversumis osalemiseks kasutada.",
"server_banner.server_stats": "Serveri statistika:",
@ -858,7 +858,7 @@
"status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}",
"status.embed": "Hangi manustamiskood",
"status.favourite": "Lemmik",
"status.favourites": "{count, plural, one {lemmik} other {lemmikut}}",
"status.favourites": "{count, plural, one {lemmik} other {lemmikud}}",
"status.filter": "Filtreeri seda postitust",
"status.history.created": "{name} lõi {date}",
"status.history.edited": "{name} muutis {date}",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "Moderatutako zerbitzariak",
"about.contact": "Kontaktua:",
"about.default_locale": "Lehenetsia",
"about.disclaimer": "Mastodon software libre eta kode irekikoa da, eta Mastodon gGmbH-ren marka erregistratua.",
"about.domain_blocks.no_reason_available": "Arrazoia ez dago eskuragarri",
"about.domain_blocks.preamble": "Mastodonek orokorrean aukera ematen dizu fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikusi eta haiekin komunikatzeko. Zerbitzari zehatz honi ezarritako salbuespenak hauek dira.",
@ -9,7 +8,6 @@
"about.domain_blocks.silenced.title": "Mugatua",
"about.domain_blocks.suspended.explanation": "Ez da zerbitzari honetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari honetako erabiltzaileekin komunikatzea ezinezkoa eginez.",
"about.domain_blocks.suspended.title": "Kanporatua",
"about.language_label": "Hizkuntza",
"about.not_available": "Zerbitzari honek ez du informazio hau eskuragarri jarri.",
"about.powered_by": "{mastodon} erabiltzen duen sare sozial deszentralizatua",
"about.rules": "Zerbitzariaren arauak",
@ -21,20 +19,13 @@
"account.block_domain": "Blokeatu {domain} domeinua",
"account.block_short": "Blokeatu",
"account.blocked": "Blokeatuta",
"account.blocking": "Eragotzitakoak",
"account.cancel_follow_request": "Baztertu jarraitzeko eskaera",
"account.copy": "Kopiatu profilerako esteka",
"account.direct": "Aipatu pribatuki @{name}",
"account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzaileak argitaratzean",
"account.domain_blocking": "Eragotzitako domeinua",
"account.edit_profile": "Editatu profila",
"account.enable_notifications": "Jakinarazi @{name} erabiltzaileak argitaratzean",
"account.endorse": "Nabarmendu profilean",
"account.familiar_followers_one": "{name1}-k jarraitzen du",
"account.familiar_followers_two": "{name1}-k eta {name2}-k jarraitzen dute",
"account.featured": "Gailenak",
"account.featured.accounts": "Profilak",
"account.featured.hashtags": "Traolak",
"account.featured_tags.last_status_at": "Azken bidalketa {date} datan",
"account.featured_tags.last_status_never": "Bidalketarik ez",
"account.follow": "Jarraitu",
@ -42,11 +33,9 @@
"account.followers": "Jarraitzaileak",
"account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.",
"account.followers_counter": "{count, plural, one {{counter} jarraitzaile} other {{counter} jarraitzaile}}",
"account.followers_you_know_counter": "{counter} ezagutzen dituzu",
"account.following": "Jarraitzen",
"account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}",
"account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.",
"account.follows_you": "Jarraitzen zaitu",
"account.go_to_profile": "Joan profilera",
"account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak",
"account.in_memoriam": "Oroimenezkoa.",
@ -61,23 +50,18 @@
"account.mute_notifications_short": "Mututu jakinarazpenak",
"account.mute_short": "Mututu",
"account.muted": "Mutututa",
"account.muting": "Isilarazitakoak",
"account.mutual": "Elkar jarraitzen duzue",
"account.no_bio": "Ez da deskribapenik eman.",
"account.open_original_page": "Ireki jatorrizko orria",
"account.posts": "Bidalketa",
"account.posts_with_replies": "Bidalketak eta erantzunak",
"account.remove_from_followers": "Kendu {name} zure jarraitzaileengandik",
"account.report": "Salatu @{name}",
"account.requested": "Onarpenaren zain. Egin klik jarraipen-eskaera ezeztatzeko",
"account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du",
"account.requests_to_follow_you": "Zu jarraitzeko eskaera egin du",
"account.share": "Partekatu @{name} erabiltzailearen profila",
"account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak",
"account.statuses_counter": "{count, plural, one {{counter} bidalketa} other {{counter} bidalketa}}",
"account.unblock": "Desblokeatu @{name}",
"account.unblock_domain": "Berriz erakutsi {domain}",
"account.unblock_domain_short": "Desblokeatu",
"account.unblock_short": "Desblokeatu",
"account.unendorse": "Ez nabarmendu profilean",
"account.unfollow": "Utzi jarraitzeari",
@ -103,13 +87,10 @@
"alt_text_modal.add_text_from_image": "Gehitu testua iruditik",
"alt_text_modal.cancel": "Utzi",
"alt_text_modal.change_thumbnail": "Aldatu koadro txikia",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Deskribatu hau entzumen arazoak dituzten pertsonentzat…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Deskribatu hau ikusmen arazoak dituzten pertsonentzat…",
"alt_text_modal.done": "Egina",
"announcement.announcement": "Iragarpena",
"annual_report.summary.followers.followers": "jarraitzaileak",
"annual_report.summary.followers.total": "{count} guztira",
"annual_report.summary.here_it_is": "Hona hemen zure {year}. urtearen bilduma:",
"annual_report.summary.highlighted_post.by_favourites": "egindako bidalketa gogokoena",
"annual_report.summary.highlighted_post.by_reblogs": "egindako bidalketa zabalduena",
"annual_report.summary.highlighted_post.by_replies": "erantzun gehien izan dituen bidalketa",
@ -211,12 +192,6 @@
"confirmations.delete_list.confirm": "Ezabatu",
"confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?",
"confirmations.delete_list.title": "Ezabatu zerrenda?",
"confirmations.discard_draft.confirm": "Baztertu eta jarraitu",
"confirmations.discard_draft.edit.cancel": "Berrekin edizioari",
"confirmations.discard_draft.edit.message": "Jarraitzeak editatzen ari zaren mezuan egindako aldaketak baztertuko ditu.",
"confirmations.discard_draft.edit.title": "Baztertu zure argitalpenari egindako aldaketak?",
"confirmations.discard_draft.post.cancel": "Zirriborroa berrekin",
"confirmations.discard_draft.post.title": "Zure argitalpenaren zirriborroa baztertu nahi duzu?",
"confirmations.discard_edit_media.confirm": "Baztertu",
"confirmations.discard_edit_media.message": "Multimediaren deskribapen edo aurrebistan gorde gabeko aldaketak daude, baztertu nahi dituzu?",
"confirmations.follow_to_list.confirm": "Jarraitu eta zerrendan sartu",
@ -226,16 +201,12 @@
"confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
"confirmations.logout.title": "Itxi saioa?",
"confirmations.missing_alt_text.confirm": "Gehitu testu alternatiboa",
"confirmations.missing_alt_text.message": "Zure argitalpenak \"alt text\"-urik gabeko multimedia edukia dauka. Deskribapenak gehitzeak zure edukia jende gehiagorentzat eskuragarri jartzen laguntzen du.",
"confirmations.missing_alt_text.secondary": "Bidali edonola ere",
"confirmations.missing_alt_text.title": "Testu alternatiboa gehitu?",
"confirmations.mute.confirm": "Mututu",
"confirmations.redraft.confirm": "Ezabatu eta berridatzi",
"confirmations.redraft.message": "Ziur argitalpen hau ezabatu eta zirriborroa berriro egitea nahi duzula? Gogokoak eta bultzadak galduko dira, eta jatorrizko argitalpenaren erantzunak zurtz geratuko dira.",
"confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?",
"confirmations.remove_from_followers.confirm": "Jarraitzailea Kendu",
"confirmations.remove_from_followers.message": "{name}-k zu jarraitzeari utziko dio. Seguru zaude jarraitu nahi duzula?",
"confirmations.remove_from_followers.title": "Jarraitzailea kendu nahi duzu?",
"confirmations.unfollow.confirm": "Utzi jarraitzeari",
"confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
"confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?",
@ -257,14 +228,12 @@
"disabled_account_banner.text": "Zure {disabledAccount} kontua desgaituta dago une honetan.",
"dismissable_banner.community_timeline": "Hauek dira {domain} zerbitzarian ostatatutako kontuen bidalketa publiko berrienak.",
"dismissable_banner.dismiss": "Baztertu",
"dismissable_banner.public_timeline": "Hauek dira {domain}-eko jendeak jarraitzen dituen fedibertsoko erabiltzaileen azken mezu publikoak.",
"domain_block_modal.block": "Blokeatu zerbitzaria",
"domain_block_modal.block_account_instead": "Blokeatu @{name} bestela",
"domain_block_modal.they_can_interact_with_old_posts": "Zerbitzari honetako jendea zure argitalpen zaharrekin elkarreragin dezake.",
"domain_block_modal.they_cant_follow": "Zerbitzari honetako inork ezin zaitu jarraitu.",
"domain_block_modal.they_wont_know": "Ez dute jakingo blokeatuak izan direnik.",
"domain_block_modal.title": "Domeinua blokeatu nahi duzu?",
"domain_block_modal.you_will_lose_relationships": "Instantzia honetatik jarraitzen dituzun jarraitzaile eta pertsona guztiak galduko dituzu.",
"domain_block_modal.you_wont_see_posts": "Ez dituzu zerbitzari honetako erabiltzaileen argitalpenik edota jakinarazpenik ikusiko.",
"domain_pill.activitypub_lets_connect": "Mastodon-en ez ezik, beste sare sozialen aplikazioetako jendearekin konektatzea eta harremanetan jartzea uzten dizu.",
"domain_pill.activitypub_like_language": "ActivityPub, Mastodon-ek beste sare sozialekin hitz egiteko erabiltzen duen hizkuntza bezalakoxea da.",
@ -296,9 +265,6 @@
"emoji_button.search_results": "Bilaketaren emaitzak",
"emoji_button.symbols": "Sinboloak",
"emoji_button.travel": "Bidaiak eta tokiak",
"empty_column.account_featured.me": "Oraindik ez duzu ezer nabarmendu. Ba al zenekien gehien erabiltzen dituzun traolak eta baita zure lagunen kontuak ere zure profilean nabarmendu ditzakezula?",
"empty_column.account_featured.other": "{acct}-ek ez du ezer nabarmendu oraindik. Ba al zenekien gehien erabiltzen dituzun traolak eta baita zure lagunen kontuak ere zure profilean nabarmendu ditzakezula?",
"empty_column.account_featured_other.unknown": "Kontu honek ez du ezer nabarmendu oraindik.",
"empty_column.account_hides_collections": "Erabiltzaile honek informazio hau erabilgarri ez egotea aukeratu du.",
"empty_column.account_suspended": "Kanporatutako kontua",
"empty_column.account_timeline": "Ez dago bidalketarik hemen!",
@ -327,14 +293,9 @@
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
"explore.suggested_follows": "Jendea",
"explore.title": "Joerak",
"explore.trending_links": "Berriak",
"explore.trending_statuses": "Tutak",
"explore.trending_tags": "Traolak",
"featured_carousel.next": "Hurrengoa",
"featured_carousel.post": "Argitaratu",
"featured_carousel.previous": "Aurrekoa",
"featured_carousel.slide": "{total}-tik {index}",
"filter_modal.added.context_mismatch_explanation": "Iragazki-kategoria hau ez zaio aplikatzen bidalketa honetara sartzeko erabili duzun testuinguruari. Bidalketa testuinguru horretan ere iragaztea nahi baduzu, iragazkia editatu beharko duzu.",
"filter_modal.added.context_mismatch_title": "Testuingurua ez dator bat!",
"filter_modal.added.expired_explanation": "Iragazki kategoria hau iraungi da, eragina izan dezan bere iraungitze-data aldatu beharko duzu.",
@ -387,8 +348,6 @@
"generic.saved": "Gordea",
"getting_started.heading": "Menua",
"hashtag.admin_moderation": "#{name}-(r)en moderazio-interfazea ireki",
"hashtag.browse": "Arakatu bidalketak #{hashtag}(e)n",
"hashtag.browse_from_account": "Arakatu @{name}(r)en bidalketak #{hashtag}(e)n",
"hashtag.column_header.tag_mode.all": "eta {osagarria}",
"hashtag.column_header.tag_mode.any": "edo {osagarria}",
"hashtag.column_header.tag_mode.none": "gabe {osagarria}",
@ -401,10 +360,7 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur",
"hashtag.feature": "Nabarmendu profilean",
"hashtag.follow": "Jarraitu traolari",
"hashtag.mute": "Mututu #{hashtag}",
"hashtag.unfeature": "Ez nabarmendu profilean",
"hashtag.unfollow": "Utzi traola jarraitzeari",
"hashtags.and_other": "…eta {count, plural, one {}other {# gehiago}}",
"hints.profiles.followers_may_be_missing": "Baliteke profil honen jarraitzaile guztiak ez agertzea.",
@ -415,7 +371,6 @@
"hints.profiles.see_more_posts": "Ikusi bidalketa gehiago {domain}-(e)n",
"hints.threads.replies_may_be_missing": "Baliteke beste zerbitzari batzuen erantzun batzuk ez erakustea.",
"hints.threads.see_more": "Ikusi erantzun gehiago {domain}-(e)n",
"home.column_settings.show_quotes": "Erakutsi aipamenak",
"home.column_settings.show_reblogs": "Erakutsi bultzadak",
"home.column_settings.show_replies": "Erakutsi erantzunak",
"home.hide_announcements": "Ezkutatu iragarpenak",
@ -434,11 +389,6 @@
"ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.private_mentions_title": "Eskatu gabeko aipamen pribatuen jakinarazpenei ez ikusiarena egin?",
"info_button.label": "Laguntza",
"interaction_modal.action.favourite": "Jarraitzeko, zure kontutik atsegindu behar duzu.",
"interaction_modal.action.follow": "Jarraitzeko zure kontutik jarraitu behar duzu.",
"interaction_modal.action.reply": "Jarraitzeko zure kontutik erantzun behar duzu.",
"interaction_modal.action.vote": "Jarraitzeko, zure kontutik bozkatu behar duzu.",
"interaction_modal.go": "Joan",
"interaction_modal.no_account_yet": "Ez al duzu konturik oraindik?",
"interaction_modal.on_another_server": "Beste zerbitzari batean",
@ -483,14 +433,11 @@
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
"keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko",
"keyboard_shortcuts.toot": "Hasi bidalketa berri bat",
"keyboard_shortcuts.translate": "bidalketa itzultzeko",
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
"lightbox.close": "Itxi",
"lightbox.next": "Hurrengoa",
"lightbox.previous": "Aurrekoa",
"lightbox.zoom_in": "Zooma egungo tamainara",
"lightbox.zoom_out": "Zooma egokitzeko",
"limited_account_hint.action": "Erakutsi profila hala ere",
"limited_account_hint.title": "Profil hau ezkutatu egin dute {domain} zerbitzariko moderatzaileek.",
"link_preview.author": "Egilea: {name}",
@ -500,24 +447,13 @@
"lists.add_to_list": "Gehitu zerrendara",
"lists.add_to_lists": "Gehitu {name} zerrendetara",
"lists.create": "Sortu",
"lists.create_a_list_to_organize": "Sortu zerrenda berria zure Hasierako jarioa antolatzeko",
"lists.create_list": "Sortu zerrenda",
"lists.delete": "Ezabatu zerrenda",
"lists.done": "Egina",
"lists.edit": "Editatu zerrenda",
"lists.exclusive": "Ezkutatu kideak Hasieran",
"lists.exclusive_hint": "Norbait zerrenda honetan badago, ezkutatu zure Hasierako jariotik mezuak bi aldiz ez ikusteko.",
"lists.find_users_to_add": "Bilatu erabiltzaileak gehitzeko",
"lists.list_name": "Zerrenda izena",
"lists.new_list_name": "Zerrenda izen berria",
"lists.no_lists_yet": "Ez duzu zerrendarik oraindik.",
"lists.no_members_yet": "Ez duzu kiderik oraindik.",
"lists.no_results_found": "Ez da emaitzarik aurkitu.",
"lists.remove_member": "Ezabatu",
"lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
"lists.replies_policy.list": "Zerrendako kideak",
"lists.replies_policy.none": "Bat ere ez",
"lists.save": "Gorde",
"lists.search": "Bilatu",
"load_pending": "{count, plural, one {elementu berri #} other {# elementu berri}}",
"loading_indicator.label": "Kargatzen…",
@ -533,10 +469,8 @@
"mute_modal.you_wont_see_mentions": "Ez duzu ikusiko bera aipatzen duen argitalpenik.",
"mute_modal.you_wont_see_posts": "Zure argitalpenak ikus ditzake, baina ez dituzu bereak ikusiko.",
"navigation_bar.about": "Honi buruz",
"navigation_bar.account_settings": "Pasahitza eta segurtasuna",
"navigation_bar.administration": "Administrazioa",
"navigation_bar.advanced_interface": "Ireki web interfaze aurreratuan",
"navigation_bar.automated_deletion": "Bidalketa automatikoaren ezabaketa",
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
"navigation_bar.bookmarks": "Laster-markak",
"navigation_bar.direct": "Aipamen pribatuak",
@ -546,19 +480,13 @@
"navigation_bar.follow_requests": "Jarraitzeko eskaerak",
"navigation_bar.followed_tags": "Jarraitutako traolak",
"navigation_bar.follows_and_followers": "Jarraitutakoak eta jarraitzaileak",
"navigation_bar.import_export": "Inportazioa eta esportazioa",
"navigation_bar.lists": "Zerrendak",
"navigation_bar.live_feed_local": "Zuzeneko jarioa (lokala)",
"navigation_bar.live_feed_public": "Zuzeneko jarioa (publikoa)",
"navigation_bar.logout": "Amaitu saioa",
"navigation_bar.moderation": "Moderazioa",
"navigation_bar.more": "Gehiago",
"navigation_bar.mutes": "Mutututako erabiltzaileak",
"navigation_bar.opened_in_classic_interface": "Argitalpenak, kontuak eta beste orri jakin batzuk lehenespenez irekitzen dira web-interfaze klasikoan.",
"navigation_bar.preferences": "Hobespenak",
"navigation_bar.privacy_and_reach": "Pribatutasuna eta irismena",
"navigation_bar.search": "Bilatu",
"navigation_bar.search_trends": "Bilatu / Joera",
"not_signed_in_indicator.not_signed_in": "Baliabide honetara sarbidea izateko saioa hasi behar duzu.",
"notification.admin.report": "{name} erabiltzaileak {target} salatu du",
"notification.admin.report_account": "{name}-(e)k {target}-ren {count, plural, one {bidalketa bat} other {# bidalketa}} salatu zituen {category} delakoagatik",
@ -569,7 +497,6 @@
"notification.admin.sign_up.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiago} other {# erabiltzaile gehiago}} erregistratu dira",
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
"notification.favourite.name_and_others_with_link": "{name} eta <a>{count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}}</a> zure bidalketa gogoko dute",
"notification.favourite_pm": "{name}-ek zure aipamen pribatua gogokoetan jarri du",
"notification.follow": "{name}(e)k jarraitzen dizu",
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
"notification.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute",
@ -578,7 +505,6 @@
"notification.label.private_reply": "Erantzun pribatua",
"notification.label.reply": "Erantzuna",
"notification.mention": "Aipamena",
"notification.mentioned_you": "{name}(e)k aipatu zaitu",
"notification.moderation-warning.learn_more": "Informazio gehiago",
"notification.moderation_warning": "Moderazio-abisu bat jaso duzu",
"notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.",
@ -625,7 +551,6 @@
"notifications.column_settings.filter_bar.category": "Iragazki-barra bizkorra",
"notifications.column_settings.follow": "Jarraitzaile berriak:",
"notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:",
"notifications.column_settings.group": "Taldea",
"notifications.column_settings.mention": "Aipamenak:",
"notifications.column_settings.poll": "Inkestaren emaitzak:",
"notifications.column_settings.push": "Push jakinarazpenak",
@ -776,7 +701,6 @@
"report_notification.categories.violation": "Arau haustea",
"report_notification.categories.violation_sentence": "arau haustea",
"report_notification.open": "Ireki salaketa",
"search.clear": "Garbitu bilaketa",
"search.no_recent_searches": "Duela gutxiko bilaketarik ez",
"search.placeholder": "Bilatu",
"search.quick_action.account_search": "{x}-(r)ekin bat datozen profilak",
@ -841,8 +765,6 @@
"status.mute_conversation": "Mututu elkarrizketa",
"status.open": "Hedatu bidalketa hau",
"status.pin": "Finkatu profilean",
"status.quote_error.not_found": "Bidalketa hau ezin da erakutsi.",
"status.quote_error.pending_approval": "Bidalketa hau egile originalak onartzeko zain dago.",
"status.read_more": "Irakurri gehiago",
"status.reblog": "Bultzada",
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
@ -871,11 +793,7 @@
"subscribed_languages.save": "Gorde aldaketak",
"subscribed_languages.target": "Aldatu {target}(e)n harpidetutako hizkuntzak",
"tabs_bar.home": "Hasiera",
"tabs_bar.menu": "Menua",
"tabs_bar.notifications": "Jakinarazpenak",
"tabs_bar.publish": "Bidalketa berria",
"tabs_bar.search": "Bilatu",
"terms_of_service.title": "Zerbitzuaren baldintzak",
"time_remaining.days": "{number, plural, one {egun #} other {# egun}} amaitzeko",
"time_remaining.hours": "{number, plural, one {ordu #} other {# ordu}} amaitzeko",
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
@ -902,8 +820,5 @@
"video.fullscreen": "Pantaila osoa",
"video.hide": "Ezkutatu bideoa",
"video.pause": "Pausatu",
"video.play": "Jo",
"video.unmute": "Soinua ezarri",
"video.volume_down": "Bolumena jaitsi",
"video.volume_up": "Bolumena Igo"
"video.play": "Jo"
}

View File

@ -219,13 +219,6 @@
"confirmations.delete_list.confirm": "حذف",
"confirmations.delete_list.message": "مطمئنید می‌خواهید این سیاهه را برای همیشه حذف کنید؟",
"confirmations.delete_list.title": "حذف سیاهه؟",
"confirmations.discard_draft.confirm": "دور انداختن و ادامه",
"confirmations.discard_draft.edit.cancel": "ادامهٔ ویرایش",
"confirmations.discard_draft.edit.message": "ادامه دادن هر تغییری که روی فرستهٔ در حال ویرایش داده‌اید را دور خواهد ریخت.",
"confirmations.discard_draft.edit.title": "دور ریختن تغییرات فرسته‌تان؟",
"confirmations.discard_draft.post.cancel": "از سر گیری پیش‌نویس",
"confirmations.discard_draft.post.message": "ادامه دادن باعث دور ریخته شدن تغییرات روی فرسته‌ای که دارید می‌نویسید خواهد شد.",
"confirmations.discard_draft.post.title": "دور ریختن فرستهٔ پیش‌نویستان؟",
"confirmations.discard_edit_media.confirm": "دور انداختن",
"confirmations.discard_edit_media.message": "تغییرات ذخیره نشده‌ای در توضیحات یا پیش‌نمایش رسانه دارید. همگی نادیده گرفته شوند؟",
"confirmations.follow_to_list.confirm": "پی‌گیری و افزودن به سیاهه",
@ -564,8 +557,6 @@
"navigation_bar.follows_and_followers": "پی‌گرفتگان و پی‌گیرندگان",
"navigation_bar.import_export": "درون‌ریزی و برون‌بری",
"navigation_bar.lists": "سیاهه‌ها",
"navigation_bar.live_feed_local": "خوراک زنده (محلی)",
"navigation_bar.live_feed_public": "خوراک زنده (عمومی)",
"navigation_bar.logout": "خروج",
"navigation_bar.moderation": "نظارت",
"navigation_bar.more": "بیشتر",
@ -575,10 +566,6 @@
"navigation_bar.privacy_and_reach": "محرمانگی و دسترسی",
"navigation_bar.search": "جست‌وجو",
"navigation_bar.search_trends": "جستجو \\ پرطرفدار",
"navigation_panel.collapse_followed_tags": "جمع کردن فهرست برچسب‌های پی‌گرفته",
"navigation_panel.collapse_lists": "جمع کردن فهرست سیاهه",
"navigation_panel.expand_followed_tags": "گسترش فهرست برچسب‌های پی‌گرفته",
"navigation_panel.expand_lists": "گسترش فهرست سیاهه",
"not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.",
"notification.admin.report": "{name}، {target} را گزارش داد",
"notification.admin.report_account": "{name} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد",
@ -805,7 +792,6 @@
"report_notification.categories.violation": "تخطّی از قانون",
"report_notification.categories.violation_sentence": "تخطّی از قانون",
"report_notification.open": "گشودن گزارش",
"search.clear": "پاک‌سازی جست‌وجو",
"search.no_recent_searches": "جست‌وجوی اخیری نیست",
"search.placeholder": "جست‌وجو",
"search.quick_action.account_search": "نمایه‌های جور با {x}",
@ -872,12 +858,6 @@
"status.mute_conversation": "خموشاندن گفت‌وگو",
"status.open": "گسترش این فرسته",
"status.pin": "سنجاق به نمایه",
"status.quote_error.filtered": "نهفته بنا بر یکی از پالایه‌هایتان",
"status.quote_error.not_found": "این فرسته قابل نمایش نیست.",
"status.quote_error.pending_approval": "این فرسته منظر تأیید نگارندهٔ اصلی است.",
"status.quote_error.rejected": "از آن‌جا که نگارندهٔ اصلی فرسته اجازهٔ نقل قولش را نمی‌دهد این فرسته قابل نمایش نیست.",
"status.quote_error.removed": "این فرسته به دست نگارنده‌اش برداشته شده.",
"status.quote_error.unauthorized": "از آن‌جا که اجازهٔ دیدن این فرسته را ندارید قابل نمایش نیست.",
"status.quote_post_author": "فرسته توسط {name}",
"status.read_more": "بیشتر بخوانید",
"status.reblog": "تقویت",

View File

@ -68,7 +68,6 @@
"account.open_original_page": "Ouvrir la page d'origine",
"account.posts": "Publications",
"account.posts_with_replies": "Publications et réponses",
"account.remove_from_followers": "Retirer {name} des suiveurs",
"account.report": "Signaler @{name}",
"account.requested": "En attente dapprobation. Cliquez pour annuler la demande",
"account.requested_follow": "{name} a demandé à vous suivre",
@ -138,8 +137,8 @@
"block_modal.title": "Bloquer le compte ?",
"block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois",
"boost_modal.reblog": "Booster le message ?",
"boost_modal.undo_reblog": "Annuler le boost du message ?",
"boost_modal.reblog": "Amplifier le message ?",
"boost_modal.undo_reblog": "Annuler l'amplification du message ?",
"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.",
"bundle_column_error.error.title": "Oh non!",
@ -219,13 +218,8 @@
"confirmations.delete_list.confirm": "Supprimer",
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?",
"confirmations.delete_list.title": "Supprimer la liste ?",
"confirmations.discard_draft.confirm": "Effacer et continuer",
"confirmations.discard_draft.confirm": "Efface et continue",
"confirmations.discard_draft.edit.cancel": "Retour vers l'éditeur",
"confirmations.discard_draft.edit.message": "Continued va perdre les changements que vous avez faits dans le message courant.",
"confirmations.discard_draft.edit.title": "Jeter les changements faits au message?",
"confirmations.discard_draft.post.cancel": "Retour au brouillon",
"confirmations.discard_draft.post.message": "En continuant, vous perdez le message que vous êtes en train d'écrire.",
"confirmations.discard_draft.post.title": "Jeter le brouillon de message?",
"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.follow_to_list.confirm": "Suivre et ajouter à la liste",
@ -242,9 +236,6 @@
"confirmations.redraft.confirm": "Supprimer et réécrire",
"confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire? Ses ses mises en favori et boosts seront perdus et ses réponses seront orphelines.",
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
"confirmations.remove_from_followers.confirm": "Supprimer l'abonné·e",
"confirmations.remove_from_followers.message": "{name} cessera de vous suivre. Êtes-vous sûr de vouloir continuer ?",
"confirmations.remove_from_followers.title": "Supprimer l'abonné·e ?",
"confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?",
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
@ -306,9 +297,6 @@
"emoji_button.search_results": "Résultats",
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Voyage et lieux",
"empty_column.account_featured.me": "Vous n'avez pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
"empty_column.account_featured.other": "{acct} n'a pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
"empty_column.account_featured_other.unknown": "Ce compte n'a mis aucun contenu en avant pour l'instant.",
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
"empty_column.account_suspended": "Compte suspendu",
"empty_column.account_timeline": "Aucune publication ici!",
@ -337,7 +325,6 @@
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
"errors.unexpected_crash.report_issue": "Signaler un problème",
"explore.suggested_follows": "Personnes",
"explore.title": "Tendances",
"explore.trending_links": "Nouvelles",
"explore.trending_statuses": "Messages",
"explore.trending_tags": "Hashtags",
@ -397,8 +384,6 @@
"generic.saved": "Sauvegardé",
"getting_started.heading": "Pour commencer",
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
"hashtag.browse": "Parcourir les posts dans #{hashtag}",
"hashtag.browse_from_account": "Parcourir les posts de @{name} dans #{hashtag}",
"hashtag.column_header.tag_mode.all": "et {additional}",
"hashtag.column_header.tag_mode.any": "ou {additional}",
"hashtag.column_header.tag_mode.none": "sans {additional}",
@ -411,10 +396,7 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourdhui",
"hashtag.feature": "Mettre en avant sur votre profil",
"hashtag.follow": "Suivre ce hashtag",
"hashtag.mute": "Mettre #{hashtag} en sourdine",
"hashtag.unfeature": "Ne plus mettre en avant sur votre profil",
"hashtag.unfollow": "Ne plus suivre ce hashtag",
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
@ -425,7 +407,6 @@
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
"home.column_settings.show_quotes": "Afficher les citations",
"home.column_settings.show_reblogs": "Afficher boosts",
"home.column_settings.show_replies": "Afficher réponses",
"home.hide_announcements": "Masquer les annonces",
@ -548,10 +529,8 @@
"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.account_settings": "Mot de passe et sécurité",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Ouvrir dans linterface avancée",
"navigation_bar.automated_deletion": "Suppression automatique du message",
"navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.bookmarks": "Signets",
"navigation_bar.direct": "Mention privée",
@ -561,19 +540,13 @@
"navigation_bar.follow_requests": "Demandes d'abonnements",
"navigation_bar.followed_tags": "Hashtags suivis",
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
"navigation_bar.import_export": "Import et export",
"navigation_bar.lists": "Listes",
"navigation_bar.live_feed_local": "Flux en direct (local)",
"navigation_bar.live_feed_public": "Flux en direct (public)",
"navigation_bar.logout": "Se déconnecter",
"navigation_bar.moderation": "Modération",
"navigation_bar.more": "Plus",
"navigation_bar.mutes": "Utilisateurs masqués",
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans linterface classique.",
"navigation_bar.preferences": "Préférences",
"navigation_bar.privacy_and_reach": "Vie privée et visibilité",
"navigation_bar.search": "Rechercher",
"navigation_bar.search_trends": "Recherche / Tendance",
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
"notification.admin.report": "{name} a signalé {target}",
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
@ -866,8 +839,8 @@
"status.mute_conversation": "Masquer la conversation",
"status.open": "Afficher la publication entière",
"status.pin": "Épingler sur profil",
"status.quote_error.removed": "Ce message a été retiré par son auteur·ice.",
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé·e à le voir.",
"status.quote_error.removed": "Ce message a été retiré par son auteur.",
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé à le voir.",
"status.quote_post_author": "Message par {name}",
"status.read_more": "En savoir plus",
"status.reblog": "Booster",

View File

@ -68,7 +68,6 @@
"account.open_original_page": "Ouvrir la page d'origine",
"account.posts": "Messages",
"account.posts_with_replies": "Messages et réponses",
"account.remove_from_followers": "Retirer {name} des suiveurs",
"account.report": "Signaler @{name}",
"account.requested": "En attente dapprobation. Cliquez pour annuler la demande",
"account.requested_follow": "{name} a demandé à vous suivre",
@ -138,8 +137,8 @@
"block_modal.title": "Bloquer le compte ?",
"block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois",
"boost_modal.reblog": "Booster le message ?",
"boost_modal.undo_reblog": "Annuler le boost du message ?",
"boost_modal.reblog": "Amplifier le message ?",
"boost_modal.undo_reblog": "Annuler l'amplification du message ?",
"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.",
"bundle_column_error.error.title": "Oh non!",
@ -219,13 +218,8 @@
"confirmations.delete_list.confirm": "Supprimer",
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?",
"confirmations.delete_list.title": "Supprimer la liste ?",
"confirmations.discard_draft.confirm": "Effacer et continuer",
"confirmations.discard_draft.confirm": "Efface et continue",
"confirmations.discard_draft.edit.cancel": "Retour vers l'éditeur",
"confirmations.discard_draft.edit.message": "Continued va perdre les changements que vous avez faits dans le message courant.",
"confirmations.discard_draft.edit.title": "Jeter les changements faits au message?",
"confirmations.discard_draft.post.cancel": "Retour au brouillon",
"confirmations.discard_draft.post.message": "En continuant, vous perdez le message que vous êtes en train d'écrire.",
"confirmations.discard_draft.post.title": "Jeter le brouillon de message?",
"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.follow_to_list.confirm": "Suivre et ajouter à la liste",
@ -242,9 +236,6 @@
"confirmations.redraft.confirm": "Supprimer et ré-écrire",
"confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.",
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
"confirmations.remove_from_followers.confirm": "Supprimer l'abonné·e",
"confirmations.remove_from_followers.message": "{name} cessera de vous suivre. Êtes-vous sûr de vouloir continuer ?",
"confirmations.remove_from_followers.title": "Supprimer l'abonné·e ?",
"confirmations.unfollow.confirm": "Ne plus suivre",
"confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name}?",
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
@ -306,9 +297,6 @@
"emoji_button.search_results": "Résultats de la recherche",
"emoji_button.symbols": "Symboles",
"emoji_button.travel": "Voyage et lieux",
"empty_column.account_featured.me": "Vous n'avez pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
"empty_column.account_featured.other": "{acct} n'a pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
"empty_column.account_featured_other.unknown": "Ce compte n'a mis aucun contenu en avant pour l'instant.",
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
"empty_column.account_suspended": "Compte suspendu",
"empty_column.account_timeline": "Aucun message ici !",
@ -337,7 +325,6 @@
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
"errors.unexpected_crash.report_issue": "Signaler le problème",
"explore.suggested_follows": "Personnes",
"explore.title": "Tendances",
"explore.trending_links": "Nouvelles",
"explore.trending_statuses": "Messages",
"explore.trending_tags": "Hashtags",
@ -397,8 +384,6 @@
"generic.saved": "Sauvegardé",
"getting_started.heading": "Pour commencer",
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
"hashtag.browse": "Parcourir les posts dans #{hashtag}",
"hashtag.browse_from_account": "Parcourir les posts de @{name} dans #{hashtag}",
"hashtag.column_header.tag_mode.all": "et {additional}",
"hashtag.column_header.tag_mode.any": "ou {additional}",
"hashtag.column_header.tag_mode.none": "sans {additional}",
@ -411,10 +396,7 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourdhui",
"hashtag.feature": "Mettre en avant sur votre profil",
"hashtag.follow": "Suivre le hashtag",
"hashtag.mute": "Mettre #{hashtag} en sourdine",
"hashtag.unfeature": "Ne plus mettre en avant sur votre profil",
"hashtag.unfollow": "Ne plus suivre le hashtag",
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
@ -425,7 +407,6 @@
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
"home.column_settings.show_quotes": "Afficher les citations",
"home.column_settings.show_reblogs": "Afficher les partages",
"home.column_settings.show_replies": "Afficher les réponses",
"home.hide_announcements": "Masquer les annonces",
@ -548,10 +529,8 @@
"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.account_settings": "Mot de passe et sécurité",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Ouvrir dans linterface avancée",
"navigation_bar.automated_deletion": "Suppression automatique du message",
"navigation_bar.blocks": "Comptes bloqués",
"navigation_bar.bookmarks": "Marque-pages",
"navigation_bar.direct": "Mention privée",
@ -561,19 +540,13 @@
"navigation_bar.follow_requests": "Demandes dabonnement",
"navigation_bar.followed_tags": "Hashtags suivis",
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
"navigation_bar.import_export": "Import et export",
"navigation_bar.lists": "Listes",
"navigation_bar.live_feed_local": "Flux en direct (local)",
"navigation_bar.live_feed_public": "Flux en direct (public)",
"navigation_bar.logout": "Déconnexion",
"navigation_bar.moderation": "Modération",
"navigation_bar.more": "Plus",
"navigation_bar.mutes": "Comptes masqués",
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans linterface classique.",
"navigation_bar.preferences": "Préférences",
"navigation_bar.privacy_and_reach": "Vie privée et visibilité",
"navigation_bar.search": "Rechercher",
"navigation_bar.search_trends": "Recherche / Tendance",
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
"notification.admin.report": "{name} a signalé {target}",
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
@ -866,8 +839,8 @@
"status.mute_conversation": "Masquer la conversation",
"status.open": "Afficher le message entier",
"status.pin": "Épingler sur le profil",
"status.quote_error.removed": "Ce message a été retiré par son auteur·ice.",
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé·e à le voir.",
"status.quote_error.removed": "Ce message a été retiré par son auteur.",
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé à le voir.",
"status.quote_post_author": "Message par {name}",
"status.read_more": "En savoir plus",
"status.reblog": "Partager",

View File

@ -564,8 +564,6 @@
"navigation_bar.follows_and_followers": "Folgers en folgjenden",
"navigation_bar.import_export": "Ymportearje en eksportearje",
"navigation_bar.lists": "Listen",
"navigation_bar.live_feed_local": "Livefeed (lokaal)",
"navigation_bar.live_feed_public": "Livefeed (iepenbier)",
"navigation_bar.logout": "Ofmelde",
"navigation_bar.moderation": "Moderaasje",
"navigation_bar.more": "Mear",
@ -805,7 +803,6 @@
"report_notification.categories.violation": "Skeinde regels",
"report_notification.categories.violation_sentence": "skeinde regels",
"report_notification.open": "Rapport iepenje",
"search.clear": "Sykopdracht wiskje",
"search.no_recent_searches": "Gjin resinte sykopdrachten",
"search.placeholder": "Sykje",
"search.quick_action.account_search": "Accounts dyt oerienkomme mei {x}",

View File

@ -6,7 +6,6 @@
"about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.",
"about.domain_blocks.silenced.title": "Ɣur-s talast",
"about.domain_blocks.suspended.title": "Yettwaḥbes",
"about.language_label": "Tutlayt",
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
"about.rules": "Ilugan n uqeddac",
@ -238,10 +237,6 @@
"explore.trending_links": "Isallen",
"explore.trending_statuses": "Tisuffaɣ",
"explore.trending_tags": "Ihacṭagen",
"featured_carousel.next": "Uḍfiṛ",
"featured_carousel.post": "Tasuffeɣt",
"featured_carousel.previous": "Uzwir",
"featured_carousel.slide": "{index} ɣef {total}",
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
@ -362,7 +357,6 @@
"lists.add_to_list": "Rnu ɣer tebdart",
"lists.add_to_lists": "Rnu {name} ɣer tebdarin",
"lists.create": "Snulfu-d",
"lists.create_list": "Snulfu-d tabdart",
"lists.delete": "Kkes tabdart",
"lists.done": "Immed",
"lists.edit": "Ẓreg tabdart",
@ -403,7 +397,6 @@
"navigation_bar.lists": "Tibdarin",
"navigation_bar.logout": "Ffeɣ",
"navigation_bar.moderation": "Aseɣyed",
"navigation_bar.more": "Ugar",
"navigation_bar.mutes": "Iseqdacen yettwasusmen",
"navigation_bar.opened_in_classic_interface": "Tisuffaɣ, imiḍanen akked isebtar-nniḍen igejdanen ldin-d s wudem amezwer deg ugrudem web aklasiki.",
"navigation_bar.preferences": "Imenyafen",
@ -617,7 +610,6 @@
"status.mute_conversation": "Sgugem adiwenni",
"status.open": "Semɣeṛ tasuffeɣt-ayi",
"status.pin": "Senteḍ-itt deg umaɣnu",
"status.quote_post_author": "Izen sɣur {name}",
"status.read_more": "Issin ugar",
"status.reblog": "Bḍu",
"status.reblogged_by": "Yebḍa-tt {name}",
@ -643,10 +635,7 @@
"status.unpin": "Kkes asenteḍ seg umaɣnu",
"subscribed_languages.save": "Sekles ibeddilen",
"tabs_bar.home": "Agejdan",
"tabs_bar.menu": "Umuɣ",
"tabs_bar.notifications": "Ilɣa",
"tabs_bar.publish": "Tasuffeɣt tamaynut",
"tabs_bar.search": "Nadi",
"terms_of_service.title": "Tiwtilin n useqdec",
"time_remaining.days": "Mazal {number, plural, one {# wass} other {# wussan}}",
"time_remaining.hours": "Mazal {number, plural, one {# usarag} other {# yisragen}}",

View File

@ -356,7 +356,6 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} partisipante} other {{counter} partisipantes}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy",
"hashtag.feature": "Avalia en profil",
"hashtag.follow": "Sige etiketa",
"hashtag.mute": "Silensia #{hashtag}",
"hashtag.unfeature": "No avalia en profil",
@ -391,7 +390,6 @@
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
"interaction_modal.title.vote": "Vota en la anketa de {name}",
"interaction_modal.username_prompt": "Por enshemplo {example}",
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@ -444,7 +442,6 @@
"lists.delete": "Efasa lista",
"lists.done": "Fecho",
"lists.edit": "Edita lista",
"lists.list_name": "Nombre de lista",
"lists.new_list_name": "Nombre de mueva lista",
"lists.replies_policy.followed": "Kualseker utilizador segido",
"lists.replies_policy.list": "Miembros de la lista",
@ -741,7 +738,6 @@
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
"status.redraft": "Efasa i eskrive de muevo",
"status.remove_bookmark": "Kita markador",
"status.remove_favourite": "Kita de los favoritos",
"status.replied_in_thread": "Arispondo en filo",
"status.replied_to": "Arispondio a {name}",
"status.reply": "Arisponde",
@ -762,7 +758,6 @@
"subscribed_languages.save": "Guadra trokamientos",
"subscribed_languages.target": "Troka linguas abonadas para {target}",
"tabs_bar.home": "Linya prinsipala",
"tabs_bar.menu": "Menu",
"tabs_bar.notifications": "Avizos",
"tabs_bar.publish": "Mueva publikasyon",
"tabs_bar.search": "Bushkeda",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "Servidores moderados",
"about.contact": "Contato:",
"about.default_locale": "Padrão",
"about.disclaimer": "Mastodon é um software de código aberto e livre, e uma marca registrada de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Razão não disponível",
"about.domain_blocks.preamble": "O Mastodon geralmente permite que você veja o conteúdo e interaja com usuários de qualquer outro servidor no fediverso. Estas são as exceções deste servidor em específico.",
@ -9,7 +8,6 @@
"about.domain_blocks.silenced.title": "Limitado",
"about.domain_blocks.suspended.explanation": "Nenhum dado desse servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os usuários deste servidor.",
"about.domain_blocks.suspended.title": "Suspenso",
"about.language_label": "Idioma",
"about.not_available": "Esta informação não foi disponibilizada neste servidor.",
"about.powered_by": "Redes sociais descentralizadas alimentadas por {mastodon}",
"about.rules": "Regras do servidor",
@ -219,11 +217,6 @@
"confirmations.delete_list.confirm": "Excluir",
"confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?",
"confirmations.delete_list.title": "Excluir lista?",
"confirmations.discard_draft.confirm": "Descartar e continuar",
"confirmations.discard_draft.edit.cancel": "Continuar editando",
"confirmations.discard_draft.edit.message": "Continuar vai descartar quaisquer mudanças feitas ao post sendo editado.",
"confirmations.discard_draft.edit.title": "Descartar mudanças no seu post?",
"confirmations.discard_draft.post.cancel": "Continuar rascunho",
"confirmations.discard_edit_media.confirm": "Descartar",
"confirmations.discard_edit_media.message": "Há mudanças não salvas na descrição ou pré-visualização da mídia. Descartar assim mesmo?",
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",

View File

@ -4,17 +4,17 @@
"about.default_locale": "по умолчанию",
"about.disclaimer": "Mastodon — свободное программное обеспечение с открытым исходным кодом и торговая марка Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Причина не указана",
"about.domain_blocks.preamble": "Обычно Mastodon даёт вам возможность просматривать содержимое с любых других серверов в федивёрсе и взаимодействовать с их пользователями. Вот исключения, сделанные конкретно для этого сервера:",
"about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и содержимое с этого сервера, если только вы не запросите их с помощью поиска или не подпишетесь на пользователя с этого сервера.",
"about.domain_blocks.preamble": "Mastodon обычно позволяет просматривать содержимое и взаимодействовать с пользователями любых других серверов в федивёрсе. Вот исключения, сделанные конкретно для этого сервера.",
"about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и контент с этого сервера, если специально не будете их искать или не подпишетесь на них.",
"about.domain_blocks.silenced.title": "Ограничивается",
"about.domain_blocks.suspended.explanation": "Никакие данные с этого сервера не будут обрабатываться, храниться и обмениваться, что делает невозможным любое взаимодействие и связь с пользователями на этом сервере.",
"about.domain_blocks.suspended.explanation": "Никакие данные с этого сервера не будут обрабатываться, храниться или обмениваться, что делает невозможным любое взаимодействие или связь с пользователями с этого сервера.",
"about.domain_blocks.suspended.title": "Заблокирован",
"about.language_label": "Язык",
"about.not_available": "Администраторы сервера предпочли не раскрывать эту информацию.",
"about.not_available": "Эта информация не указана на данном сервере.",
"about.powered_by": "Децентрализованная социальная сеть на базе {mastodon}",
"about.rules": "Правила сервера",
"account.account_note_header": "Личная заметка",
"account.add_or_remove_from_list": "Добавить в списки",
"account.add_or_remove_from_list": "Управление списками",
"account.badges.bot": "Бот",
"account.badges.group": "Группа",
"account.block": "Заблокировать @{name}",
@ -25,10 +25,10 @@
"account.cancel_follow_request": "Отозвать запрос на подписку",
"account.copy": "Копировать ссылку на профиль",
"account.direct": "Упомянуть @{name} лично",
"account.disable_notifications": "Не уведомлять о постах пользователя @{name}",
"account.disable_notifications": "Не уведомлять о постах от @{name}",
"account.domain_blocking": "Домен заблокирован",
"account.edit_profile": "Редактировать",
"account.enable_notifications": "Уведомлять о постах пользователя @{name}",
"account.enable_notifications": "Уведомлять о постах от @{name}",
"account.endorse": "Рекомендовать в профиле",
"account.familiar_followers_many": "В подписках у {name1}, {name2}, и ещё {othersCount, plural, one {# человека, которого вы знаете} other {# человек, которых вы знаете}}",
"account.familiar_followers_one": "В подписках у {name1}",
@ -36,7 +36,7 @@
"account.featured": "Рекомендации",
"account.featured.accounts": "Профили",
"account.featured.hashtags": "Хештеги",
"account.featured_tags.last_status_at": "Последний пост опубликован {date}",
"account.featured_tags.last_status_at": "Последний пост {date}",
"account.featured_tags.last_status_never": "Нет постов",
"account.follow": "Подписаться",
"account.follow_back": "Подписаться в ответ",
@ -59,7 +59,7 @@
"account.mention": "Упомянуть @{name}",
"account.moved_to": "У {name} теперь новая учётная запись:",
"account.mute": "Игнорировать @{name}",
"account.mute_notifications_short": "Скрыть уведомления",
"account.mute_notifications_short": "Отключить уведомления",
"account.mute_short": "Игнорировать",
"account.muted": "Игнорируется",
"account.muting": "Игнорируется",
@ -83,7 +83,7 @@
"account.unendorse": "Не рекомендовать в профиле",
"account.unfollow": "Отписаться",
"account.unmute": "Не игнорировать @{name}",
"account.unmute_notifications_short": "Показать уведомления",
"account.unmute_notifications_short": "Включить уведомления",
"account.unmute_short": "Не игнорировать",
"account_note.placeholder": "Текст заметки",
"admin.dashboard.daily_retention": "Уровень удержания пользователей после регистрации, в днях",
@ -129,10 +129,10 @@
"annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
"attachments_list.unprocessed": "(не обработан)",
"audio.hide": "Скрыть аудио",
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако нельзя гарантировать, что он будет соблюдать блокировку, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.",
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако соблюдение им блокировки не гарантировано, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.",
"block_modal.show_less": "Показать меньше",
"block_modal.show_more": "Показать больше",
"block_modal.they_cant_mention": "Он не сможет ни упоминать вас, ни подписаться на вас.",
"block_modal.they_cant_mention": "Он не сможет упоминать вас или подписаться на вас.",
"block_modal.they_cant_see_posts": "Он не сможет видеть ваши посты, а вы не будете видеть его посты.",
"block_modal.they_will_know": "Он будет знать, что вы его блокируете.",
"block_modal.title": "Заблокировать пользователя?",
@ -141,21 +141,21 @@
"boost_modal.reblog": "Продвинуть пост?",
"boost_modal.undo_reblog": "Отменить продвижение?",
"bundle_column_error.copy_stacktrace": "Копировать отчёт об ошибке",
"bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это могло произойти из-за ошибки в нашем коде или из-за проблемы совместимости браузера.",
"bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.",
"bundle_column_error.error.title": "О нет!",
"bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Она могла быть вызвана временными проблемами либо с вашим подключением к интернету, либо с этим сервером.",
"bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Это может быть вызвано временными проблемами с вашим подключением к интернету или ошибкой на сервере.",
"bundle_column_error.network.title": "Ошибка сети",
"bundle_column_error.retry": "Попробовать снова",
"bundle_column_error.return": "Вернуться на главную",
"bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что в адресной строке указан правильный URL?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Закрыть",
"bundle_modal_error.message": "Което пошло не так при загрузке этой страницы.",
"bundle_modal_error.message": "Что-то пошло не так при загрузке этой страницы.",
"bundle_modal_error.retry": "Попробовать снова",
"closed_registrations.other_server_instructions": "Благодаря тому что Mastodon децентрализован, вы можете взаимодействовать с этим сервером, даже если зарегистрируетесь на другом сервере.",
"closed_registrations.other_server_instructions": "Поскольку Mastodon децентрализован, вы можете зарегистрироваться на другом сервере и всё равно взаимодействовать с этим сервером.",
"closed_registrations_modal.description": "Зарегистрироваться на {domain} сейчас не выйдет, но имейте в виду, что вам не нужна учётная запись именно на {domain}, чтобы использовать Mastodon.",
"closed_registrations_modal.find_another_server": "Найти другой сервер",
"closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться на кого угодно и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!",
"closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!",
"closed_registrations_modal.title": "Регистрация в Mastodon",
"column.about": "О проекте",
"column.blocks": "Заблокированные пользователи",
@ -170,7 +170,7 @@
"column.firehose": "Живая лента",
"column.follow_requests": "Запросы на подписку",
"column.home": "Главная",
"column.list_members": "Пользователи в списке",
"column.list_members": "Добавить или удалить из списка",
"column.lists": "Списки",
"column.mutes": "Игнорируемые пользователи",
"column.notifications": "Уведомления",
@ -240,7 +240,7 @@
"confirmations.missing_alt_text.title": "Добавить альтернативный текст?",
"confirmations.mute.confirm": "Игнорировать",
"confirmations.redraft.confirm": "Удалить и исправить",
"confirmations.redraft.message": "Вы уверены, что хотите удалить этот пост и создать его заново? Взаимодействия, такие как добавление в избранное и продвижение, будут потеряны, а ответы к оригинальному посту перестанут на него ссылаться.",
"confirmations.redraft.message": "Вы уверены, что хотите удалить этот пост и создать его заново? Взаимодействия, такие как добавление в избранное или продвижение, будут потеряны, а ответы к оригинальному посту перестанут на него ссылаться.",
"confirmations.redraft.title": "Удалить и создать пост заново?",
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
@ -264,7 +264,7 @@
"directory.recently_active": "Недавно активные",
"disabled_account_banner.account_settings": "Настройки учётной записи",
"disabled_account_banner.text": "Ваша учётная запись {disabledAccount} в настоящее время отключена.",
"dismissable_banner.community_timeline": "Это самые новые публичные посты от тех пользователей, чьи учётные записи размещены на сервере {domain}.",
"dismissable_banner.community_timeline": "Это самые новые публичные посты от тех пользователей, чьи учётные записи находятся на сервере {domain}.",
"dismissable_banner.dismiss": "Закрыть",
"dismissable_banner.public_timeline": "Это самые новые публичные посты от всех тех людей в федивёрсе, на которых подписаны пользователи {domain}.",
"domain_block_modal.block": "Заблокировать сервер",
@ -275,9 +275,9 @@
"domain_block_modal.title": "Заблокировать домен?",
"domain_block_modal.you_will_lose_num_followers": "Вы потеряете {followersCount, plural, one {{followersCountDisplay} подписчика} few {{followersCountDisplay} подписчика} other {{followersCountDisplay} подписчиков}} и {followingCount, plural, one {{followingCountDisplay} подписку} few {{followingCountDisplay} подписки} other {{followingCountDisplay} подписок}}.",
"domain_block_modal.you_will_lose_relationships": "Вы потеряете все подписки и всех подписчиков с этого сервера.",
"domain_block_modal.you_wont_see_posts": "Вы не будете видеть посты и уведомления от пользователей с этого сервера.",
"domain_block_modal.you_wont_see_posts": "Вы не будете видеть посты или уведомления от пользователей с этого сервера.",
"domain_pill.activitypub_lets_connect": "Благодаря ему вы можете связываться и взаимодействовать не только с пользователями Mastodon, но и с пользователями других платформ.",
"domain_pill.activitypub_like_language": "ActivityPub это язык, на котором Mastodon говорит с другими социальными сетями.",
"domain_pill.activitypub_like_language": "ActivityPub это язык, на котором Mastodon говорит с другими социальными сетями.",
"domain_pill.server": "Сервер",
"domain_pill.their_handle": "Адрес пользователя:",
"domain_pill.their_server": "Цифровой дом пользователя, где находятся все его посты.",
@ -319,7 +319,7 @@
"empty_column.direct": "Вы ещё не упоминали кого-либо и сами не были ни разу упомянуты лично. Все личные упоминания будут показаны здесь.",
"empty_column.domain_blocks": "Заблокированных доменов пока нет.",
"empty_column.explore_statuses": "Сейчас нет популярных постов. Проверьте позже!",
"empty_column.favourited_statuses": "Вы ещё не добавили ни одного поста в избранное. Все добавленные вами в избранное посты будут показаны здесь.",
"empty_column.favourited_statuses": "Вы ещё не добавили ни один пост в избранное. Все добавленные вами в избранное посты будут показаны здесь.",
"empty_column.favourites": "Никто ещё не добавил этот пост в избранное. Все пользователи, добавившие этот пост в избранное, будут показаны здесь.",
"empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
"empty_column.followed_tags": "Вы ещё не подписались ни на один хештег. Все хештеги, на которые вы подписаны, будут показаны здесь.",
@ -346,7 +346,7 @@
"featured_carousel.post": "Пост",
"featured_carousel.previous": "Предыдущий",
"featured_carousel.slide": "{index} из {total}",
"filter_modal.added.context_mismatch_explanation": "Этот фильтр не применяется в том контексте, в котором вы видели этот пост. Если вы хотите, чтобы пост был отфильтрован в текущем контексте, необходимо редактировать фильтр.",
"filter_modal.added.context_mismatch_explanation": "Этот фильтр не применяется в том контексте, в котором вы видели этот пост. Если вы хотите, чтобы пост был отфильтрован в этом контексте, необходимо редактировать фильтр.",
"filter_modal.added.context_mismatch_title": "Несоответствие контекста!",
"filter_modal.added.expired_explanation": "Этот фильтр истёк. Чтобы он был применён, вам нужно изменить срок действия фильтра.",
"filter_modal.added.expired_title": "Истёкший фильтр!",
@ -363,7 +363,7 @@
"filter_modal.select_filter.title": "Фильтровать этот пост",
"filter_modal.title.status": "Фильтровать пост",
"filter_warning.matches_filter": "Соответствует фильтру «<span>{title}</span>»",
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {незнакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {не знакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
"firehose.all": "Всё вместе",
"firehose.local": "Этот сервер",
@ -413,18 +413,18 @@
"hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня",
"hashtag.feature": "Рекомендовать в профиле",
"hashtag.follow": "Подписаться на хештег",
"hashtag.follow": "Подписаться на новые посты",
"hashtag.mute": "Игнорировать #{hashtag}",
"hashtag.unfeature": "Не рекомендовать в профиле",
"hashtag.unfollow": "Отписаться от хештега",
"hashtag.unfollow": "Отписаться от новых постов",
"hashtags.and_other": "…и {count, plural, other {ещё #}}",
"hints.profiles.followers_may_be_missing": "Некоторые подписчики этого профиля могут здесь отсутствовать.",
"hints.profiles.follows_may_be_missing": "Некоторые подписки этого профиля могут здесь отсутствовать.",
"hints.profiles.posts_may_be_missing": "Некоторые посты в этом профиле могут здесь отсутствовать.",
"hints.profiles.followers_may_be_missing": "Некоторые подписчики этого профиля могут отсутствовать.",
"hints.profiles.follows_may_be_missing": "Некоторые подписки этого профиля могут отсутствовать.",
"hints.profiles.posts_may_be_missing": "Некоторые посты в этом профиле могут отсутствовать.",
"hints.profiles.see_more_followers": "Перейдите на {domain}, чтобы увидеть всех подписчиков",
"hints.profiles.see_more_follows": "Перейдите на {domain}, чтобы увидеть все подписки",
"hints.profiles.see_more_posts": "Перейдите на {domain}, чтобы увидеть все посты",
"hints.threads.replies_may_be_missing": "Некоторые ответы с других серверов могут здесь отсутствовать.",
"hints.threads.replies_may_be_missing": "Некоторые ответы с других серверов могут отсутствовать.",
"hints.threads.see_more": "Перейдите на {domain}, чтобы увидеть все ответы",
"home.column_settings.show_quotes": "Показывать цитирования",
"home.column_settings.show_reblogs": "Показывать продвижения",
@ -466,7 +466,7 @@
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
"keyboard_shortcuts.back": "перейти назад",
"keyboard_shortcuts.blocked": "открыть список заблокированных пользователей",
"keyboard_shortcuts.blocked": "открыть список заблокированных",
"keyboard_shortcuts.boost": "продвинуть пост",
"keyboard_shortcuts.column": "фокус на одном из столбцов",
"keyboard_shortcuts.compose": "фокус на поле ввода",
@ -483,7 +483,7 @@
"keyboard_shortcuts.legend": "показать эту справку",
"keyboard_shortcuts.local": "перейти к локальной ленте",
"keyboard_shortcuts.mention": "упомянуть автора поста",
"keyboard_shortcuts.muted": "открыть список игнорируемых пользователей",
"keyboard_shortcuts.muted": "открыть список игнорируемых",
"keyboard_shortcuts.my_profile": "перейти к своему профилю",
"keyboard_shortcuts.notifications": "перейти к уведомлениям",
"keyboard_shortcuts.open_media": "открыть медиа",
@ -546,7 +546,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.account_settings": "Пароль и безопасность",
@ -607,9 +607,9 @@
"notification.moderation_warning": "Модераторы вынесли вам предупреждение",
"notification.moderation_warning.action_delete_statuses": "Некоторые ваши посты были удалены.",
"notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые ваши посты были отмечены как содержимое деликатного характера.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые ваши посты были отмечены как контент деликатного характера.",
"notification.moderation_warning.action_none": "Модераторы вынесли вам предупреждение.",
"notification.moderation_warning.action_sensitive": "С этого момента все ваши новые посты будут отмечены как содержимое деликатного характера.",
"notification.moderation_warning.action_sensitive": "С этого момента все ваши новые посты будут отмечены как контент деликатного характера.",
"notification.moderation_warning.action_silence": "Ваша учётная запись была ограничена.",
"notification.moderation_warning.action_suspend": "Ваша учётная запись была заблокирована.",
"notification.own_poll": "Ваш опрос завершился",
@ -618,9 +618,9 @@
"notification.reblog.name_and_others_with_link": "{name} и ещё <a>{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}</a> продвинули ваш пост",
"notification.relationships_severance_event": "Разорвана связь с {name}",
"notification.relationships_severance_event.account_suspension": "Администратор сервера {from} заблокировал сервер {target}, поэтому вы больше не сможете получать обновления от людей с этого сервера или взаимодействовать с ними.",
"notification.relationships_severance_event.domain_block": "Администратор сервера {from} заблокировал сервер {target}, где размещены учётные записи {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
"notification.relationships_severance_event.domain_block": "Администратор сервера {from} заблокировал сервер {target}, где размещены учётные записи у {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
"notification.relationships_severance_event.learn_more": "Узнать больше",
"notification.relationships_severance_event.user_domain_block": "Вы заблокировали сервер {target}, где размещены учётные записи {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
"notification.relationships_severance_event.user_domain_block": "Вы заблокировали сервер {target}, где размещены учётные записи у {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
"notification.status": "{name} опубликовал(а) новый пост",
"notification.update": "{name} отредактировал(а) пост",
"notification_requests.accept": "Принять",

View File

@ -27,7 +27,6 @@
"account.edit_profile": "Upraviť profil",
"account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}",
"account.endorse": "Zobraziť na vlastnom profile",
"account.featured": "Zviditeľnené",
"account.featured.accounts": "Profily",
"account.featured.hashtags": "Hashtagy",
"account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",

View File

@ -220,12 +220,6 @@
"confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
"confirmations.delete_list.title": "Ta bort listan?",
"confirmations.discard_draft.confirm": "Släng bort och fortsätt",
"confirmations.discard_draft.edit.cancel": "Fortsätt redigera",
"confirmations.discard_draft.edit.message": "Fortsätter du, kommer ändringarna till inlägget att förkastas.",
"confirmations.discard_draft.edit.title": "Vill du förkasta ändringarna i inlägget?",
"confirmations.discard_draft.post.cancel": "Återuppta utkast",
"confirmations.discard_draft.post.message": "Fortsätter du, kommer inlägget du skriver att förkastas.",
"confirmations.discard_draft.post.title": "Vill du förkasta utkastet?",
"confirmations.discard_edit_media.confirm": "Kasta",
"confirmations.discard_edit_media.message": "Du har osparade ändringar till mediabeskrivningen eller förhandsgranskningen, kasta bort dem ändå?",
"confirmations.follow_to_list.confirm": "Följ och lägg till i listan",
@ -564,8 +558,6 @@
"navigation_bar.follows_and_followers": "Följer och följare",
"navigation_bar.import_export": "Importera och exportera",
"navigation_bar.lists": "Listor",
"navigation_bar.live_feed_local": "Direkt flöde (lokalt)",
"navigation_bar.live_feed_public": "Direkt flöde (publikt)",
"navigation_bar.logout": "Logga ut",
"navigation_bar.moderation": "Moderering",
"navigation_bar.more": "Fler",
@ -805,7 +797,6 @@
"report_notification.categories.violation": "Regelöverträdelse",
"report_notification.categories.violation_sentence": "regelöverträdelse",
"report_notification.open": "Öppna rapport",
"search.clear": "Rensa sökning",
"search.no_recent_searches": "Inga sökningar nyligen",
"search.placeholder": "Sök",
"search.quick_action.account_search": "Profiler som matchar {x}",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "เซิร์ฟเวอร์ที่ได้รับการกลั่นกรอง",
"about.contact": "ติดต่อ:",
"about.default_locale": "ค่าเริ่มต้น",
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
"about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ",
@ -9,7 +8,6 @@
"about.domain_blocks.silenced.title": "จำกัดอยู่",
"about.domain_blocks.suspended.explanation": "จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์นี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์นี้เป็นไปไม่ได้",
"about.domain_blocks.suspended.title": "ระงับอยู่",
"about.language_label": "ภาษา",
"about.not_available": "ไม่ได้ทำให้ข้อมูลนี้พร้อมใช้งานในเซิร์ฟเวอร์นี้",
"about.powered_by": "สื่อสังคมแบบกระจายศูนย์ที่ขับเคลื่อนโดย {mastodon}",
"about.rules": "กฎของเซิร์ฟเวอร์",
@ -21,18 +19,14 @@
"account.block_domain": "ปิดกั้นโดเมน {domain}",
"account.block_short": "ปิดกั้น",
"account.blocked": "ปิดกั้นอยู่",
"account.blocking": "กำลังปิดกั้น",
"account.cancel_follow_request": "ยกเลิกการติดตาม",
"account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์",
"account.direct": "กล่าวถึง @{name} แบบส่วนตัว",
"account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์",
"account.domain_blocking": "กำลังปิดกั้นโดเมน",
"account.domain_blocking": "โดเมน",
"account.edit_profile": "แก้ไขโปรไฟล์",
"account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์",
"account.endorse": "แสดงในโปรไฟล์",
"account.featured": "น่าสนใจ",
"account.featured.accounts": "โปรไฟล์",
"account.featured.hashtags": "แฮชแท็ก",
"account.featured_tags.last_status_at": "โพสต์ล่าสุดเมื่อ {date}",
"account.featured_tags.last_status_never": "ไม่มีโพสต์",
"account.follow": "ติดตาม",
@ -43,7 +37,6 @@
"account.following": "กำลังติดตาม",
"account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}",
"account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
"account.follows_you": "ติดตามคุณ",
"account.go_to_profile": "ไปยังโปรไฟล์",
"account.hide_reblogs": "ซ่อนการดันจาก @{name}",
"account.in_memoriam": "เพื่อระลึกถึง",
@ -58,7 +51,6 @@
"account.mute_notifications_short": "ซ่อนการแจ้งเตือน",
"account.mute_short": "ซ่อน",
"account.muted": "ซ่อนอยู่",
"account.muting": "กำลังซ่อน",
"account.no_bio": "ไม่ได้ให้คำอธิบาย",
"account.open_original_page": "เปิดหน้าดั้งเดิม",
"account.posts": "โพสต์",
@ -313,14 +305,9 @@
"errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
"errors.unexpected_crash.report_issue": "รายงานปัญหา",
"explore.suggested_follows": "ผู้คน",
"explore.title": "กำลังนิยม",
"explore.trending_links": "ข่าว",
"explore.trending_statuses": "โพสต์",
"explore.trending_tags": "แฮชแท็ก",
"featured_carousel.next": "ถัดไป",
"featured_carousel.post": "โพสต์",
"featured_carousel.previous": "ก่อนหน้า",
"featured_carousel.slide": "{index} จาก {total}",
"filter_modal.added.context_mismatch_explanation": "หมวดหมู่ตัวกรองนี้ไม่นำไปใช้กับบริบทที่คุณได้เข้าถึงโพสต์นี้ หากคุณต้องการกรองโพสต์ในบริบทนี้ด้วย คุณจะต้องแก้ไขตัวกรอง",
"filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!",
"filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้",
@ -385,10 +372,7 @@
"hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}",
"hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}",
"hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้",
"hashtag.feature": "แสดงในโปรไฟล์",
"hashtag.follow": "ติดตามแฮชแท็ก",
"hashtag.mute": "ซ่อน #{hashtag}",
"hashtag.unfeature": "ไม่แสดงในโปรไฟล์",
"hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
"hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}",
"hints.profiles.followers_may_be_missing": "ผู้ติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
@ -520,10 +504,8 @@
"mute_modal.you_wont_see_mentions": "คุณจะไม่เห็นโพสต์ที่กล่าวถึงเขา",
"mute_modal.you_wont_see_posts": "เขายังคงสามารถเห็นโพสต์ของคุณ แต่คุณจะไม่เห็นโพสต์ของเขา",
"navigation_bar.about": "เกี่ยวกับ",
"navigation_bar.account_settings": "รหัสผ่านและความปลอดภัย",
"navigation_bar.administration": "การดูแล",
"navigation_bar.advanced_interface": "เปิดในส่วนติดต่อเว็บขั้นสูง",
"navigation_bar.automated_deletion": "การลบโพสต์แบบอัตโนมัติ",
"navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
"navigation_bar.bookmarks": "ที่คั่นหน้า",
"navigation_bar.direct": "การกล่าวถึงแบบส่วนตัว",
@ -533,15 +515,12 @@
"navigation_bar.follow_requests": "คำขอติดตาม",
"navigation_bar.followed_tags": "แฮชแท็กที่ติดตาม",
"navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม",
"navigation_bar.import_export": "การนำเข้าและการส่งออก",
"navigation_bar.lists": "รายการ",
"navigation_bar.logout": "ออกจากระบบ",
"navigation_bar.moderation": "การกลั่นกรอง",
"navigation_bar.more": "เพิ่มเติม",
"navigation_bar.mutes": "ผู้ใช้ที่ซ่อนอยู่",
"navigation_bar.opened_in_classic_interface": "จะเปิดโพสต์, บัญชี และหน้าที่เฉพาะเจาะจงอื่น ๆ เป็นค่าเริ่มต้นในส่วนติดต่อเว็บแบบคลาสสิก",
"navigation_bar.preferences": "การกำหนดลักษณะ",
"navigation_bar.privacy_and_reach": "ความเป็นส่วนตัวและการเข้าถึง",
"navigation_bar.search": "ค้นหา",
"not_signed_in_indicator.not_signed_in": "คุณจำเป็นต้องเข้าสู่ระบบเพื่อเข้าถึงทรัพยากรนี้",
"notification.admin.report": "{name} ได้รายงาน {target}",
@ -768,7 +747,6 @@
"report_notification.categories.violation": "การละเมิดกฎ",
"report_notification.categories.violation_sentence": "การละเมิดกฎ",
"report_notification.open": "รายงานที่เปิด",
"search.clear": "ล้างการค้นหา",
"search.no_recent_searches": "ไม่มีการค้นหาล่าสุด",
"search.placeholder": "ค้นหา",
"search.quick_action.account_search": "โปรไฟล์ที่ตรงกับ {x}",
@ -834,7 +812,6 @@
"status.mute_conversation": "ซ่อนการสนทนา",
"status.open": "ขยายโพสต์นี้",
"status.pin": "ปักหมุดในโปรไฟล์",
"status.quote_post_author": "โพสต์โดย {name}",
"status.read_more": "อ่านเพิ่มเติม",
"status.reblog": "ดัน",
"status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม",
@ -864,10 +841,7 @@
"subscribed_languages.save": "บันทึกการเปลี่ยนแปลง",
"subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}",
"tabs_bar.home": "หน้าแรก",
"tabs_bar.menu": "เมนู",
"tabs_bar.notifications": "การแจ้งเตือน",
"tabs_bar.publish": "โพสต์ใหม่",
"tabs_bar.search": "ค้นหา",
"terms_of_service.title": "เงื่อนไขการให้บริการ",
"time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}",
"time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}",

View File

@ -458,8 +458,6 @@
"navigation_bar.favourites": "ijo pona",
"navigation_bar.filters": "nimi len",
"navigation_bar.lists": "kulupu lipu",
"navigation_bar.logout": "o weka tan sijelo",
"navigation_bar.moderation": "nasin lawa",
"navigation_bar.mutes": "sina wile ala kute e jan ni",
"navigation_bar.preferences": "wile sina",
"navigation_bar.search": "o alasa",

View File

@ -98,7 +98,7 @@
"alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.",
"alert.rate_limited.title": "Vượt giới hạn",
"alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.",
"alert.unexpected.title": "Ốii!",
"alert.unexpected.title": "Ốiii!",
"alt_text_badge.title": "Văn bản thay thế",
"alt_text_modal.add_alt_text": "Thêm văn bản thay thế",
"alt_text_modal.add_text_from_image": "Thêm văn bản từ ảnh",
@ -276,7 +276,7 @@
"domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.",
"domain_block_modal.you_will_lose_relationships": "Bạn sẽ mất tất cả người theo dõi và những người bạn theo dõi từ máy chủ này.",
"domain_block_modal.you_wont_see_posts": "Bạn không còn thấy tút hoặc thông báo từ thành viên máy chủ này.",
"domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người, không chỉ trên Mastodon mà còn trên các nền tảng khác.",
"domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.",
"domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.",
"domain_pill.server": "Máy chủ",
"domain_pill.their_handle": "Địa chỉ Mastodon:",

View File

@ -218,9 +218,6 @@
"confirmations.delete_list.confirm": "删除",
"confirmations.delete_list.message": "确定要永久删除此列表吗?",
"confirmations.delete_list.title": "确定要删除列表?",
"confirmations.discard_draft.confirm": "放弃并继续",
"confirmations.discard_draft.edit.cancel": "恢复编辑",
"confirmations.discard_draft.post.cancel": "恢复草稿",
"confirmations.discard_edit_media.confirm": "丢弃",
"confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?",
"confirmations.follow_to_list.confirm": "关注并添加到列表",

View File

@ -126,9 +126,6 @@ export function createAccountFromServerJSON(serverJSON: ApiAccountJSON) {
? accountJSON.username
: accountJSON.display_name;
const accountNote =
accountJSON.note && accountJSON.note !== '<p></p>' ? accountJSON.note : '';
return AccountFactory({
...accountJSON,
moved: moved?.id,
@ -145,8 +142,8 @@ export function createAccountFromServerJSON(serverJSON: ApiAccountJSON) {
escapeTextContentForBrowser(displayName),
emojiMap,
),
note_emojified: emojify(accountNote, emojiMap),
note_plain: unescapeHTML(accountNote),
note_emojified: emojify(accountJSON.note, emojiMap),
note_plain: unescapeHTML(accountJSON.note),
url:
accountJSON.url.startsWith('http://') ||
accountJSON.url.startsWith('https://')

View File

@ -101,7 +101,7 @@
}
// Change the background colors of statuses
.focusable:focus-visible {
.focusable:focus {
background: lighten($white, 4%);
}

View File

@ -2848,6 +2848,7 @@ a.account__display-name {
&__pane {
height: 100%;
overflow: hidden;
pointer-events: none;
display: flex;
justify-content: flex-end;
min-width: 285px;
@ -2859,6 +2860,7 @@ a.account__display-name {
&__inner {
position: fixed;
width: 285px;
pointer-events: auto;
height: 100%;
}
}
@ -3872,18 +3874,16 @@ a.account__display-name {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
padding: 12px;
font-size: 16px;
font-weight: 400;
padding: 12px;
text-decoration: none;
overflow: hidden;
white-space: nowrap;
color: $secondary-text-color;
background: transparent;
border: 0;
background: transparent;
color: $secondary-text-color;
border-left: 4px solid transparent;
box-sizing: border-box;
&:hover,
&:focus,

View File

@ -28,7 +28,7 @@ class AnnualReport::Archetype < AnnualReport::Source
end
def polls_count
@polls_count ||= report_statuses.only_polls.count
@polls_count ||= report_statuses.where.not(poll_id: nil).count
end
def reblogs_count
@ -36,7 +36,7 @@ class AnnualReport::Archetype < AnnualReport::Source
end
def replies_count
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
end
def standalone_count

View File

@ -18,7 +18,7 @@ class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
private
def commonly_interacted_with_accounts
report_statuses.not_replying_to_account(@account).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
end
def minimum_interaction_count

View File

@ -2,44 +2,20 @@
class AnnualReport::TopStatuses < AnnualReport::Source
def generate
top_reblogs = base_scope.order(reblogs_count: :desc).first&.id
top_favourites = base_scope.where.not(id: top_reblogs).order(favourites_count: :desc).first&.id
top_replies = base_scope.where.not(id: [top_reblogs, top_favourites]).order(replies_count: :desc).first&.id
{
top_statuses: {
by_reblogs: status_identifier(most_reblogged_status),
by_favourites: status_identifier(most_favourited_status),
by_replies: status_identifier(most_replied_status),
by_reblogs: top_reblogs&.to_s,
by_favourites: top_favourites&.to_s,
by_replies: top_replies&.to_s,
},
}
end
private
def status_identifier(status)
status.id.to_s if status.present?
end
def most_reblogged_status
base_scope
.order(reblogs_count: :desc)
.first
end
def most_favourited_status
base_scope
.excluding(most_reblogged_status)
.order(favourites_count: :desc)
.first
end
def most_replied_status
base_scope
.excluding(most_reblogged_status, most_favourited_status)
.order(replies_count: :desc)
.first
end
def base_scope
report_statuses
.public_visibility
.joins(:status_stat)
report_statuses.public_visibility.joins(:status_stat)
end
end

View File

@ -6,7 +6,7 @@ class AnnualReport::TypeDistribution < AnnualReport::Source
type_distribution: {
total: report_statuses.count,
reblogs: report_statuses.only_reblogs.count,
replies: report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count,
replies: report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count,
standalone: report_statuses.without_replies.without_reblogs.count,
},
}

View File

@ -49,8 +49,6 @@ class Fasp::Request
end
def validate!(response)
raise Mastodon::UnexpectedResponseError, response if response.code >= 400
content_digest_header = response.headers['content-digest']
raise Mastodon::SignatureVerificationError, 'content-digest missing' if content_digest_header.blank?
raise Mastodon::SignatureVerificationError, 'content-digest does not match' if content_digest_header != content_digest(response.body)

View File

@ -196,8 +196,6 @@ class SignedRequest
return if body_digest == received_digest
raise Mastodon::SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{received_digest}"
rescue Starry::ParseError
raise Mastodon::MalformedHeaderError, 'Content-Digest could not be parsed. It does not contain a valid RFC8941 dictionary.'
end
def created_time

View File

@ -138,7 +138,10 @@ class Account < ApplicationRecord
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
scope :recent, -> { reorder(id: :desc) }
scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) }
scope :non_automated, -> { where.not(actor_type: AUTOMATED_ACTOR_TYPES) }
scope :groups, -> { where(actor_type: 'Group') }
scope :alphabetic, -> { order(domain: :asc, username: :asc) }
scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) }
scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") }
scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) }

View File

@ -161,7 +161,7 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
end
def without_poll_scope
Status.without_polls
Status.where(poll_id: nil)
end
def without_popular_scope

View File

@ -2,7 +2,6 @@
class Admin::AccountAction
include ActiveModel::Model
include ActiveModel::Attributes
include AccountableConcern
include Authorization
@ -21,10 +20,7 @@ class Admin::AccountAction
:report_id,
:warning_preset_id
attr_reader :warning
attribute :include_statuses, :boolean, default: true
attribute :send_email_notification, :boolean, default: true
attr_reader :warning, :send_email_notification, :include_statuses
alias send_email_notification? send_email_notification
alias include_statuses? include_statuses
@ -32,8 +28,23 @@ class Admin::AccountAction
validates :type, :target_account, :current_account, presence: true
validates :type, inclusion: { in: TYPES }
def save
return false unless valid?
def initialize(attributes = {})
@send_email_notification = true
@include_statuses = true
super
end
def send_email_notification=(value)
@send_email_notification = ActiveModel::Type::Boolean.new.cast(value)
end
def include_statuses=(value)
@include_statuses = ActiveModel::Type::Boolean.new.cast(value)
end
def save!
raise ActiveRecord::RecordInvalid, self unless valid?
ApplicationRecord.transaction do
process_action!
@ -43,12 +54,6 @@ class Admin::AccountAction
process_notification!
process_queue!
true
end
def save!
raise ActiveRecord::RecordInvalid, self unless save
end
def report
@ -180,7 +185,7 @@ class Admin::AccountAction
@reports ||= if type == 'none'
with_report? ? [report] : []
else
target_account.targeted_reports.unresolved
Report.where(target_account: target_account).unresolved
end
end

View File

@ -2,7 +2,6 @@
class Admin::StatusBatchAction
include ActiveModel::Model
include ActiveModel::Attributes
include AccountableConcern
include Authorization
@ -10,7 +9,11 @@ class Admin::StatusBatchAction
:status_ids, :report_id,
:text
attribute :send_email_notification, :boolean
attr_reader :send_email_notification
def send_email_notification=(value)
@send_email_notification = ActiveModel::Type::Boolean.new.cast(value)
end
def save!
process_action!

View File

@ -3,12 +3,10 @@
module Account::AttributionDomains
extend ActiveSupport::Concern
ATTRIBUTION_DOMAINS_LIMIT = 100
included do
normalizes :attribution_domains, with: ->(arr) { arr.filter_map { |str| str.to_s.strip.delete_prefix('http://').delete_prefix('https://').delete_prefix('*.').presence }.uniq }
validates :attribution_domains, domain: true, length: { maximum: ATTRIBUTION_DOMAINS_LIMIT }, if: -> { local? && will_save_change_to_attribution_domains? }
validates :attribution_domains, domain: true, length: { maximum: 100 }, if: -> { local? && will_save_change_to_attribution_domains? }
end
def can_be_attributed_from?(domain)

View File

@ -10,6 +10,12 @@ module DatabaseViewRecord
concurrently: true,
cascade: false
)
rescue ActiveRecord::StatementInvalid
Scenic.database.refresh_materialized_view(
table_name,
concurrently: false,
cascade: false
)
end
end

View File

@ -4,8 +4,14 @@ module FollowLimitable
extend ActiveSupport::Concern
included do
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit?
end
attribute :bypass_follow_limit, :boolean, default: false
def bypass_follow_limit=(value)
@bypass_follow_limit = value
end
def bypass_follow_limit?
@bypass_follow_limit
end
end

View File

@ -17,14 +17,12 @@ class CustomFilterStatus < ApplicationRecord
belongs_to :custom_filter
belongs_to :status
validates :status_id, uniqueness: { scope: :custom_filter_id }
validate :validate_status_access, if: [:custom_filter_account, :status]
delegate :account, to: :custom_filter, prefix: true, allow_nil: true
validates :status, uniqueness: { scope: :custom_filter }
validate :validate_status_access
private
def validate_status_access
errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter_account, status).show?
errors.add(:status_id, :invalid) unless StatusPolicy.new(custom_filter.account, status).show?
end
end

View File

@ -14,7 +14,7 @@ class FollowRecommendationMute < ApplicationRecord
belongs_to :account
belongs_to :target_account, class_name: 'Account'
validates :target_account_id, uniqueness: { scope: :account_id }
validates :target_account, uniqueness: { scope: :account_id }
after_commit :invalidate_follow_recommendations_cache

View File

@ -128,7 +128,7 @@ class Form::AccountBatch
# Suspending a single account closes their associated reports, so
# mass-suspending would be consistent.
account.targeted_reports.unresolved.find_each do |report|
Report.where(target_account: account).unresolved.find_each do |report|
authorize(report, :update?)
log_action(:resolve, report)
report.resolve!(current_account)

View File

@ -24,7 +24,7 @@ class GeneratedAnnualReport < ApplicationRecord
end
def view!
touch(:viewed_at)
update!(viewed_at: Time.now.utc)
end
def account_ids

View File

@ -31,7 +31,7 @@ class Quote < ApplicationRecord
belongs_to :quoted_account, class_name: 'Account', optional: true
before_validation :set_accounts
before_validation :set_activity_uri, only: :create, if: -> { account.local? && quoted_account&.remote? }
validates :activity_uri, presence: true, if: -> { account.local? && quoted_account&.remote? }
validate :validate_visibility
@ -69,8 +69,4 @@ class Quote < ApplicationRecord
errors.add(:quoted_status_id, :visibility_mismatch)
end
def set_activity_uri
self.activity_uri = [ActivityPub::TagManager.instance.uri_for(account), '/quote_requests/', SecureRandom.uuid].join
end
end

View File

@ -121,10 +121,7 @@ class Status < ApplicationRecord
scope :without_replies, -> { not_reply.or(reply_to_account) }
scope :not_reply, -> { where(reply: false) }
scope :only_reblogs, -> { where.not(reblog_of_id: nil) }
scope :only_polls, -> { where.not(poll_id: nil) }
scope :without_polls, -> { where(poll_id: nil) }
scope :reply_to_account, -> { where(arel_table[:in_reply_to_account_id].eq arel_table[:account_id]) }
scope :not_replying_to_account, ->(account) { where.not(in_reply_to_account: account) }
scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) }
scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) }
scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) }

View File

@ -49,8 +49,8 @@ class Tag < ApplicationRecord
validates :name, presence: true, format: { with: HASHTAG_NAME_RE }
validates :display_name, format: { with: HASHTAG_NAME_RE }
validate :validate_name_change, on: :update, if: :name_changed?
validate :validate_display_name_change, on: :update, if: :display_name_changed?
validate :validate_name_change, if: -> { !new_record? && name_changed? }
validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? }
scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
scope :usable, -> { where(usable: [true, nil]) }

View File

@ -90,7 +90,6 @@ class User < ApplicationRecord
has_many :applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: nil
has_many :backups, inverse_of: :user, dependent: nil
has_many :invites, inverse_of: :user, dependent: nil
has_many :login_activities, inverse_of: :user, dependent: :destroy
has_many :markers, inverse_of: :user, dependent: :destroy
has_many :webauthn_credentials, dependent: :destroy
has_many :ips, class_name: 'UserIp', inverse_of: :user, dependent: nil

View File

@ -35,7 +35,6 @@ class UserSettings
setting :expand_content_warnings, default: false
setting :display_media, default: 'default', in: %w(default show_all hide_all)
setting :auto_play, default: false
setting :emoji_style, default: 'auto', in: %w(auto native twemoji)
end
namespace :notification_emails do

View File

@ -7,7 +7,7 @@ class ActivityPub::QuoteRequestSerializer < ActivityPub::Serializer
attribute :virtual_object, key: :object
def id
object.activity_uri
object.activity_uri || [ActivityPub::TagManager.instance.uri_for(object.target_account), '#quote_requests/', object.id].join
end
def type

View File

@ -5,7 +5,7 @@ class InitialStateSerializer < ActiveModel::Serializer
attributes :meta, :compose, :accounts,
:media_attachments, :settings,
:languages, :features
:languages
attribute :critical_updates_pending, if: -> { object&.role&.can?(:view_devops) && SoftwareUpdate.check_enabled? }
@ -85,10 +85,6 @@ class InitialStateSerializer < ActiveModel::Serializer
LanguagesHelper::SUPPORTED_LOCALES.map { |(key, value)| [key, value[0], value[1]] }
end
def features
Mastodon::Feature.enabled_features
end
private
def default_meta_store

View File

@ -66,7 +66,6 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
update_interaction_policies!
update_poll!(allow_significant_changes: false)
queue_poll_notifications!
update_quote_approval!
update_counts!
end
end
@ -271,23 +270,6 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
end
end
# This method is only concerned with approval and skips other meaningful changes,
# as it is used instead of `update_quote!` in implicit updates
def update_quote_approval!
quote_uri = @status_parser.quote_uri
return unless quote_uri.present? && @status.quote.present?
quote = @status.quote
return if quote.quoted_status.present? && ActivityPub::TagManager.instance.uri_for(quote.quoted_status) != quote_uri
approval_uri = @status_parser.quote_approval_uri
approval_uri = nil if unsupported_uri_scheme?(approval_uri)
quote.update(approval_uri: approval_uri, state: :pending, legacy: @status_parser.legacy_quote?) if quote.approval_uri != @status_parser.quote_approval_uri
fetch_and_verify_quote!(quote, quote_uri)
end
def update_quote!
quote_uri = @status_parser.quote_uri

View File

@ -297,7 +297,7 @@ class DeleteAccountService < BaseService
end
def reported_status_ids
@reported_status_ids ||= @account.targeted_reports.unresolved.pluck(:status_ids).flatten.uniq
@reported_status_ids ||= Report.where(target_account: @account).unresolved.pluck(:status_ids).flatten.uniq
end
def associations_for_destruction

View File

@ -56,7 +56,7 @@
.fields-group
= f.input :date_of_birth,
as: :date_of_birth,
hint: t('simple_form.hints.user.date_of_birth', count: Setting.min_age.to_i, domain: site_hostname),
hint: t('simple_form.hints.user.date_of_birth', count: Setting.min_age.to_i),
required: true,
wrapper: :with_block_label

View File

@ -31,17 +31,6 @@
label: I18n.t('simple_form.labels.defaults.setting_theme'),
wrapper: :with_label
- if Mastodon::Feature.modern_emojis_enabled?
.fields-group
= f.simple_fields_for :settings, current_user.settings do |ff|
= ff.input :'web.emoji_style',
collection: %w(auto twemoji native),
include_blank: false,
hint: I18n.t('simple_form.hints.defaults.setting_emoji_style'),
label: I18n.t('simple_form.labels.defaults.setting_emoji_style'),
label_method: ->(emoji_style) { I18n.t("emoji_styles.#{emoji_style}", default: emoji_style) },
wrapper: :with_label
- unless I18n.locale == :en
.flash-message.translation-prompt
#{t 'appearance.localization.body'} #{content_tag(:a, t('appearance.localization.guide_link_text'), href: t('appearance.localization.guide_link'), target: '_blank', rel: 'noopener')}

View File

@ -1,5 +1,5 @@
shared:
enabled: <%= ENV.fetch('CACHE_BUSTER_ENABLED', 'false') == 'true' %>
secret_header: <%= ENV.fetch('CACHE_BUSTER_SECRET_HEADER', nil)&.to_json %>
secret: <%= ENV.fetch('CACHE_BUSTER_SECRET', nil)&.to_json %>
secret_header: <%= ENV.fetch('CACHE_BUSTER_SECRET_HEADER', nil) %>
secret: <%= ENV.fetch('CACHE_BUSTER_SECRET', nil) %>
http_method: <%= ENV.fetch('CACHE_BUSTER_HTTP_METHOD', 'GET') %>

View File

@ -2,14 +2,14 @@
# keys are added here.
production:
delivery_method: <%= ENV.fetch('SMTP_DELIVERY_METHOD', 'smtp') %>
from_address: <%= ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost')&.to_json %>
reply_to: <%= ENV.fetch('SMTP_REPLY_TO', nil)&.to_json %>
return_path: <%= ENV.fetch('SMTP_RETURN_PATH', nil)&.to_json %>
from_address: <%= ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost') %>
reply_to: <%= ENV.fetch('SMTP_REPLY_TO', nil) %>
return_path: <%= ENV.fetch('SMTP_RETURN_PATH', nil) %>
smtp_settings:
port: <%= ENV.fetch('SMTP_PORT', nil) %>
address: <%= ENV.fetch('SMTP_SERVER', nil)&.to_json %>
user_name: <%= ENV.fetch('SMTP_LOGIN', nil)&.to_json %>
password: <%= ENV.fetch('SMTP_PASSWORD', nil)&.to_json %>
address: <%= ENV.fetch('SMTP_SERVER', nil) %>
user_name: <%= ENV.fetch('SMTP_LOGIN', nil) %>
password: <%= ENV.fetch('SMTP_PASSWORD', nil) %>
domain: <%= ENV.fetch('SMTP_DOMAIN', ENV.fetch('LOCAL_DOMAIN', nil)) %>
authentication: <%= ENV.fetch('SMTP_AUTH_METHOD', 'plain') %>
ca_file: <%= ENV.fetch('SMTP_CA_FILE', '/etc/ssl/certs/ca-certificates.crt') %>
@ -22,9 +22,9 @@ production:
bulk_mail:
smtp_settings:
port: <%= ENV.fetch('BULK_SMTP_PORT', nil) %>
address: <%= ENV.fetch('BULK_SMTP_SERVER', nil)&.to_json %>
user_name: <%= ENV.fetch('BULK_SMTP_LOGIN', nil)&.to_json %>
password: <%= ENV.fetch('BULK_SMTP_PASSWORD', nil)&.to_json %>
address: <%= ENV.fetch('BULK_SMTP_SERVER', nil) %>
user_name: <%= ENV.fetch('BULK_SMTP_LOGIN', nil) %>
password: <%= ENV.fetch('BULK_SMTP_PASSWORD', nil) %>
domain: <%= ENV.fetch('BULK_SMTP_DOMAIN', ENV.fetch('LOCAL_DOMAIN', nil)) %>
authentication: <%= ENV.fetch('BULK_SMTP_AUTH_METHOD', 'plain') %>
ca_file: <%= ENV.fetch('BULK_SMTP_CA_FILE', '/etc/ssl/certs/ca-certificates.crt') %>

View File

@ -5,14 +5,24 @@ require 'linzer/message/adapter/http_gem/response'
module Linzer::Message::Adapter
module ActionDispatch
class Response < Linzer::Message::Adapter::Generic::Response
private
class Response < Linzer::Message::Adapter::Abstract
def initialize(operation, **_options) # rubocop:disable Lint/MissingSuper
@operation = operation
end
def header(name)
@operation.headers[name]
end
def attach!(signature)
signature.to_h.each { |h, v| @operation.headers[h] = v }
end
# Incomplete, but sufficient for FASP
def derived(name)
case name.value
when '@status' then @operation.status
end
def [](field_name)
return @operation.status if field_name == '@status'
@operation.headers[field_name]
end
end
end

View File

@ -3,7 +3,7 @@
Rails.application.config.to_prepare do
custom_css = begin
Setting.custom_css
rescue # Running without a cache, database, not migrated, no connection, etc
rescue ActiveRecord::AdapterError # Running without a database, not migrated, no connection, etc
nil
end

View File

@ -15,9 +15,6 @@ be:
user/invite_request:
text: Прычына
errors:
attributes:
domain:
invalid: не з’яўляецца сапраўдным даменным імем
models:
account:
attributes:
@ -40,7 +37,7 @@ be:
attributes:
account_id:
taken: ужо ў спісе
must_be_following: мусіць быць карыстальнікам у вашых падпісках
must_be_following: мусіць быць падпісаным уліковым запісам
status:
attributes:
reblog:

View File

@ -49,14 +49,8 @@ en-GB:
attributes:
reblog:
taken: of post already exists
terms_of_service:
attributes:
effective_date:
too_soon: is too soon, must be later than %{date}
user:
attributes:
date_of_birth:
below_limit: is below the age limit
email:
blocked: uses a disallowed e-mail provider
unreachable: does not seem to exist

View File

@ -49,14 +49,8 @@ eu:
attributes:
reblog:
taken: mezu honentzat bazegoen aurretik
terms_of_service:
attributes:
effective_date:
too_soon: goizegi da, %{date} baino geroagokoa izan behar da
user:
attributes:
date_of_birth:
below_limit: adinaren mugaren azpitik dago
email:
blocked: onartu gabeko e-posta hornitzaile bat erabiltzen du
unreachable: dirudienez ez da existitzen

View File

@ -18,7 +18,7 @@ be:
link_verified_on: Права ўласнасці на гэтую спасылку праверана %{date}
nothing_here: Тут нічога няма!
pin_errors:
following: Трэба падпісацца на чалавека, якога вы хочаце рэкамендаваць
following: Вы павінны быць падпісаны на чалавека, якога жадаеце рэкамендаваць
posts:
few: Допісы
many: Допісаў
@ -28,8 +28,6 @@ be:
admin:
account_actions:
action: Выканаць дзеянне
already_silenced: Гэты ўліковы запіс ужо абмежаваны.
already_suspended: Гэты ўліковы запіс ужо прыпынены.
title: Мадэраваць %{acct}
account_moderation_notes:
create: Пакінуць нататку
@ -109,7 +107,7 @@ be:
no_role_assigned: Роля не прызначана
not_subscribed: Не падпісаны
pending: Чакае праверкі
perform_full_suspension: Прыпыніць
perform_full_suspension: Выключыць
previous_strikes: Ранейшыя скаргі
previous_strikes_description_html:
few: Гэты ўліковы запіс мае <strong>%{count}</strong> скаргі.
@ -166,7 +164,7 @@ be:
unconfirmed_email: Непацверджаны адрас эл. пошты
undo_sensitized: Прыбраць прымусовую пазнаку далікатнасці
undo_silenced: Адмяніць ліміт
undo_suspension: Разблакіраваць карыстальніка
undo_suspension: Разблакаваць карыстальніка
unsilenced_msg: З уліковага запісу %{username} зняты абмежаванні
unsubscribe: Адпісацца
unsuspended_msg: Уліковы запіс %{username} адноўлены
@ -191,7 +189,7 @@ be:
create_domain_block: Стварыць даменны блок
create_email_domain_block: Стварыць даменны блок электроннай пошты
create_ip_block: Стварыць IP правіла
create_relay: Стварыць рэтранслятар
create_relay: Стварыць паўтор
create_unavailable_domain: Стварыць недаступны Дамен
create_user_role: Стварыць ролю
demote_user: Панізіць карыстальніка
@ -203,22 +201,22 @@ be:
destroy_email_domain_block: Выдаліць даменны блок электроннай пошты
destroy_instance: Вычысціць дамен
destroy_ip_block: Выдаліць IP правіла
destroy_relay: Выдаліць рэтранслятар
destroy_relay: Выдаліць паўтор
destroy_status: Выдаліць допіс
destroy_unavailable_domain: Выдаліць недаступны дамен
destroy_user_role: Выдаліць ролю
disable_2fa_user: Адключыць двухэтапнае спраўджанне
disable_custom_emoji: Адключыць адвольныя эмодзі
disable_relay: Выключыць рэтранслятар
disable_relay: Выключыць паўтор
disable_sign_in_token_auth_user: Адключыць аўтарызацыю праз электронную пошту для карыстальніка
disable_user: Адключыць карыстальніка
enable_custom_emoji: Уключыць адвольныя эмодзі
enable_relay: Уключыць рэтранслятар
enable_relay: Уключыць паўтор
enable_sign_in_token_auth_user: Уключыць аўтарызацыю праз электронную пошту для карыстальніка
enable_user: Уключыць карыстальніка
memorialize_account: Запомніць уліковы запіс
promote_user: Павысіць правы Карыстальніка
publish_terms_of_service: Апублікаваць умовы выкарыстання
publish_terms_of_service: Апублікаваць Умовы выкарыстаньня
reject_appeal: Адхіліць абскарджанне
reject_user: Адмовіць карыстальніку
remove_avatar_user: Выдаліць аватар
@ -228,13 +226,13 @@ be:
resolve_report: Вырашыць скаргу
sensitive_account: Уліковы запіс прымусова пазначаны як далікатны
silence_account: Абмежаваць уліковы запіс
suspend_account: Прыпыніць уліковы запіс
suspend_account: Выключыць уліковы запіс
unassigned_report: Прыбраць прызначэнне скаргі
unblock_email_account: Разблакіраваць электронны адрас
unsensitive_account: Прымусовая пазнака далікатнасці прыбраная
unsilence_account: Уліковы запіс больш не абмежаваны
unsuspend_account: Аднавіць уліковы запіс
update_announcement: Абнавіць абяву
update_announcement: Абнавіць аб'яву
update_custom_emoji: Абнавіць адвольныя эмодзі
update_domain_block: Актуалізаваць блакіроўку дамена
update_ip_block: Абнавіць IP правіла
@ -256,34 +254,34 @@ be:
create_domain_block_html: "%{name} заблакіраваў дамен %{target}"
create_email_domain_block_html: "%{name} заблакіраваў дамен эл. пошты %{target}"
create_ip_block_html: "%{name} стварыў правіла для IP %{target}"
create_relay_html: "%{name} стварыў(-ла) рэтранслятар %{target}"
create_relay_html: "%{name} стварыў(-а) паўтор %{target}"
create_unavailable_domain_html: "%{name} прыпыніў дастаўку да дамена %{target}"
create_user_role_html: "%{name} зрабіў ролю %{target}"
demote_user_html: "%{name} прыбраў карыстальніка %{target}"
destroy_announcement_html: "%{name} выдаліў аб'яву %{target}"
destroy_canonical_email_block_html: "%{name} разблакіраваў эл. пошту з хэшам %{target}"
destroy_custom_emoji_html: "%{name} выдаліў(-ла) эмодзі %{target}"
destroy_domain_allow_html: "%{name} зняў(-ла) дазвол на аб’яднанне з даменам %{target}"
destroy_custom_emoji_html: "%{name} выдаліў(а) эмоджі %{target}"
destroy_domain_allow_html: "%{name} зняў дазвол на аб'яднанне з даменам %{target}\n"
destroy_domain_block_html: "%{name} разблакаваў дамен %{target}"
destroy_email_domain_block_html: "%{name} разблакіраваў дамен эл. пошты %{target}"
destroy_instance_html: "%{name} цалкам прыбраў дамен %{target}"
destroy_ip_block_html: "%{name} выдаліў правіла для IP %{target}"
destroy_relay_html: "%{name} выдаліў(-ла) рэтранслятар %{target}"
destroy_relay_html: "%{name} выдаліў(-ла) паўтор %{target}"
destroy_status_html: "%{name} выдаліў допіс %{target}"
destroy_unavailable_domain_html: "%{name} дазволіў працягнуць адпраўку на дамен %{target}"
destroy_user_role_html: "%{name} выдаліў ролю %{target}"
disable_2fa_user_html: "%{name} амяніў абавязковую двухфактарную верыфікацыю для карыстальніка %{target}"
disable_custom_emoji_html: "%{name} заблакіраваў эмодзі %{target}"
disable_relay_html: "%{name} выключыў(-ла) рэтранслятар %{target}"
disable_relay_html: "%{name} выключыў(-ла) паўтор %{target}"
disable_sign_in_token_auth_user_html: "%{name} адключыў уваход праз эл. пошту для %{target}"
disable_user_html: "%{name} адключыў уваход для карыстальніка %{target}"
enable_custom_emoji_html: "%{name} уключыў эмодзі %{target}"
enable_relay_html: "%{name} уключыў(-ла) рэтранслятар %{target}"
enable_relay_html: "%{name} уключыў(-ла) паўтор %{target}"
enable_sign_in_token_auth_user_html: "%{name} уключыў уваход праз эл. пошту для %{target}"
enable_user_html: "%{name} уключыў уваход для карыстальніка %{target}"
memorialize_account_html: Карыстальнік %{name} пераключыў уліковы запіс %{target} у старонку памяці
promote_user_html: "%{name} павысіў карыстальніка %{target}"
publish_terms_of_service_html: "%{name} апублікаваў(-ла) абнаўленні ва ўмовах выкарыстання"
publish_terms_of_service_html: "%{name} апублікаваў абнаўленьне ўмоваў абслугоўваньня"
reject_appeal_html: "%{name} адхіліў запыт на абскарджанне %{target}"
reject_user_html: "%{name} адхіліў рэгістрацыю з %{target}"
remove_avatar_user_html: "%{name} выдаліў аватар %{target}"
@ -293,13 +291,13 @@ be:
resolve_report_html: "%{name} вырашыў скаргу %{target}"
sensitive_account_html: "%{name} адзначыў медыя %{target} як далікатнае"
silence_account_html: "%{name} абмежаваў уліковы запіс %{target}"
suspend_account_html: Уліковы запіс %{target} прыпынены %{name}
suspend_account_html: Уліковы запіс %{target} выключаны %{name}
unassigned_report_html: "%{name} знял(а) прызначэнне скаргі %{target}"
unblock_email_account_html: "%{name} разблакіраваў эл. пошту %{target}"
unsensitive_account_html: "%{name} зняў адзнаку далікатнае з медыя %{target}"
unsilence_account_html: "%{name} зняў ліміт з уліковага запісу %{target}"
unsuspend_account_html: Уліковы запіс %{target} адноўлены %{name}
update_announcement_html: "%{name} абнавіў(-ла) абяву %{target}"
update_announcement_html: "%{name} абнавіў аб'яву %{target}"
update_custom_emoji_html: "%{name} абнавіў эмодзі %{target}"
update_domain_block_html: "%{name} абнавіў блакіроўку дамена для %{target}"
update_ip_block_html: "%{name} змяніў правіла для IP %{target}"
@ -313,7 +311,7 @@ be:
title: Аўдыт
unavailable_instance: "(імя дамена недаступнае)"
announcements:
destroyed_msg: Аб’ява выдалена!
destroyed_msg: Аб'ява паспяхова выдалена!
edit:
title: Рэдагаваць абвестку
empty: Не знайдзена ніводнай абвесткі
@ -327,26 +325,26 @@ be:
scheduled_msg: Аб'ява запланавана да публікацыі!
title: Аб'явы
unpublish: Зняць з публікацыі
unpublished_msg: Аб’ява схавана!
updated_msg: Аб’ява абноўлена!
unpublished_msg: Аб'ява паспяхова схована!
updated_msg: Аб'ява паспяхова адноўлена!
critical_update_pending: Чакаецца абнаўленне
custom_emojis:
assign_category: Прызначыць катэгорыю
by_domain: Дамен
copied_msg: Створана лакальная копія эмодзі
copied_msg: Лакальная копія эмодзі паспяхова створана
copy: Скапіраваць
copy_failed_msg: Немагчыма зрабіць лакальную копію гэтага эмодзі
create_new_category: Стварыць новую катэгорыю
created_msg: Эмодзі паспяхова створана!
delete: Выдаліць
destroyed_msg: Уласнае эмодзі знішчана!
destroyed_msg: Смайлік паспяхова прыбраны!
disable: Адключыць
disabled: Адключана
disabled_msg: Смайлік паспяхова адключаны
emoji: Эмодзі
enable: Уключыць
enabled: Уключана
enabled_msg: Эмодзі паспяхова ўключана
enabled_msg: Смайлік паспяхова ўключаны
image_hint: PNG або GIF да %{size}
list: Паказваць
listed: Паказваецца
@ -425,7 +423,7 @@ be:
domain: Дамен
edit: Рэдагаваць блакіраванне дамену
existing_domain_block: Вы ўжо налажылі стражэйшыя абмежаванні на %{name}.
existing_domain_block_html: Вы ўжо наклалі больш строгія абмежаванні на %{name}, спачатку вам трэба <a href="%{unblock_url}">разблакіраваць гэты ўліковы запіс</a>.
existing_domain_block_html: Вы ўжо налажылі стражэйшыя абмежаванні на %{name}, спачатку вам неабходна <a href="%{unblock_url}">разблакаваць гэты акаўнт</a>.
export: Экспарт
import: Імпарт
new:
@ -435,7 +433,7 @@ be:
desc_html: "<strong>Абмежаванне</strong> зробіць допісы людзей з гэтага дамену нябачнымі для тых, хто на іх не падпісаны. <strong>Выключэнне</strong> выдаліць усё змесціва, медыя і даныя профіляў дамену з вашага серверу. <strong>«Нічога»</strong> проста адхіліць медыя файлы."
noop: Пуста
silence: Абмежаваць
suspend: Прыпыніць
suspend: Выключыць
title: Новы блок дамену
no_domain_block_selected: Блакіроўкі даменаў не былі змененыя, таму што ні адзін з іх не быў выбраны
not_permitted: Вам забаронена выконваць гэта дзеянне
@ -480,7 +478,7 @@ be:
no_file: Файл не выбраны
export_domain_blocks:
import:
description_html: Вы збіраецеся імпартаваць спіс даменных блокаў. Праглядзіце гэты спіс вельмі ўважліва, асабліва калі вы асабіста не з’яўляецеся аўтарам гэтага спіса.
description_html: Вы збіраецеся імпартаваць спіс даменных блокаў. Калі ласка, праглядзіце гэты спіс вельмі ўважліва, асабліва калі вы асабіста не з'яўляецеся аўтарам гэтага спісу.
existing_relationships_warning: Наяўныя зносіны
private_comment_description_html: 'Каб дапамагчы вам адсочваць, адкуль паходзяць імпартаваныя блокі, імпартаваныя блокі будуць створаны з наступным прыватным каментарыем: <q>%{comment}</q>'
private_comment_template: Імпартавана з %{source} %{date}
@ -489,26 +487,6 @@ be:
new:
title: Імпарт блакіровак дамену
no_file: Файл не выбраны
fasp:
debug:
callbacks:
delete: Выдаліць
ip: IP-адрас
providers:
active: Актыўны
base_url: Базавы URL-адрас
delete: Выдаліць
edit: Рэдагаваць пастаўшчыка
finish_registration: Завяршыць рэгістрацыю
name: Назва
providers: Пастаўшчыкі
public_key_fingerprint: Лічбавы адбітак публічнага ключа
registrations:
confirm: Пацвердзіць
reject: Адхіліць
save: Захаваць
sign_in: Увайсці
title: FASP
follow_recommendations:
description_html: "<strong>Рэкамендацыі падпісак, дапамогаюць новым карыстальнікам хутка знайсці цікавы кантэнт</strong>. Калі карыстальнік недастаткова ўзаемадзейнічаў з іншымі, каб сфарміраваць персанальныя рэкамендацыі прытрымлівацца, замест гэтага рэкамендуюцца гэтыя ўліковыя запісы. Яны штодзённа пераразлічваюцца з сумесі ўліковых запісаў з самымі апошнімі ўзаемадзеяннямі і найбольшай колькасцю мясцовых падпісчыкаў для дадзенай мовы."
language: Для мовы
@ -549,7 +527,7 @@ be:
reject_media: Адхіліць мультымедыя
reject_reports: Адхіліць справаздачы
silence: Ліміт
suspend: Прыпыніць
suspend: Выключыць
policy: Палітыка
reason: Публічная прычына
title: Палітыкі кантэнту
@ -583,11 +561,6 @@ be:
all: Усе
limited: Абмежаваныя
title: Мадэрацыя
moderation_notes:
create: Дадаць нататку мадэратара
created_msg: Нататка мадэратара для экзэмпляра сервера створана!
destroyed_msg: Нататка мадэратара экзэмпляра сервера выдалена!
title: Нататкі мадэратараў
private_comment: Прыватны каментарый
public_comment: Публічны каментарый
purge: Ачысціць
@ -628,7 +601,7 @@ be:
relays:
add_new: Дадаць новы рэтранслятар
delete: Выдаліць
description_html: "<strong>Федэрацыйны рэтранслятар</strong> - гэта прамежкавы сервер, які абменьваецца вялікімі абёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і робяць публікацыі на ім. <strong>Гэта можа дапамагчы малым і сярэднім серверам выяўляць змесціва з fediverse</strong>, бо ў іншым выпадку лакальным карыстальнікам трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах."
description_html: "<strong>Федэрацыйны рэтранслятар</strong> - гэта прамежкавы сервер, які абменьваецца вялікімі аб'ёмамі публічных паведамленняў паміж серверамі, якія падпісваюцца і публікуюць на ім. <strong>Гэта можа дапамагчы малым і сярэднім серверам выяўляць кантэнт з fediverse</strong>, для чаго лакальным карыстальнікам у адваротным выпадку трэба было б уручную сачыць за іншымі людзьмі на аддаленых серверах."
disable: Адключыць
disabled: Адключана
enable: Уключыць
@ -662,11 +635,11 @@ be:
suspend_description_html: Уліковы запіс і ўсё яго змесціва будзе недаступна і ў далейшым выдалены, узаемадзеянне з ім будзе немагчыма. Магчыма адмяніць на працягу 30 дзён. Закрывае ўсе скаргі на гэты ўліковы запіс.
actions_description_html: Вырашыце, якія дзеянні распачаць, каб вырашыць гэтую скаргу. Калі вы прымеце меры пакарання ў дачыненні да ўліковага запісу, пра які паведамляецца, ім будзе адпраўлена апавяшчэнне па электроннай пошце, за выключэннем выпадкаў, калі выбрана катэгорыя <strong>Спам</strong>.
actions_description_remote_html: Вырашыце як паступіць з гэтай скаргай. Гэта паўплывае толькі на тое як <strong>ваш</strong> сервер звязваецца з аддалёным уліковым запісам і апрацоўвае яго кантэнт.
actions_no_posts: Да гэтай скаргі не прывязаны допісы да выдалення
actions_no_posts: У гэтай скаргі няма зьвязаных паведамленьняў для выдаленьня
add_to_report: Дадаць яшчэ дэталяў да скаргі
already_suspended_badges:
local: Ужо прыпынена на гэтым серверы
remote: Ужо прыпынена на іх серверы
local: Ужо прыпынена на гэтым сэрвэры
remote: Ужо прыпынена на іх сэрвэры
are_you_sure: Вы ўпэўнены?
assign_to_self: Прызначыць мне
assigned: Прызначаны мадэратар
@ -695,7 +668,7 @@ be:
delete: Выдаліць
placeholder: Апішыце, якія дзеянні былі зроблены, або любыя іншыя звязаныя абнаўленні...
title: Нататкі
notes_description_html: Праглядайце і пакідайце нататкі для іншых мадэратараў і сябе ў будучыні
notes_description_html: Праглядвайце і пакідайце нататкі іншым мадэратарам і сабе ў будучыні
processed_msg: 'Скарга #%{id} паспяхова апрацавана'
quick_actions_description_html: 'Выканайце хуткае дзеянне або пракруціце ўніз, каб убачыць змесціва, на якое пададзена скарга:'
remote_user_placeholder: аддалены карыстальнік з %{instance}
@ -765,12 +738,12 @@ be:
delete_user_data_description: Дазваляе карыстальнікам без затрымкі выдаляць даныя іншых карыстальнікаў
invite_users: Запрашэнне карыстальнікаў
invite_users_description: Дазваляе запрашаць новых людзей на сервер
manage_announcements: Кіраванне абявамі
manage_announcements_description: Дазваляе кіраваць абявамі на серверы
manage_announcements: Кіраванне аб'явамі
manage_announcements_description: Дазваляе кіраваць аб'явамі на серверы
manage_appeals: Кіраванне апеляцыямі
manage_appeals_description: Дазваляе карыстальнікам разглядаць апеляцыі на дзеянні мадэратара
manage_blocks: Кіраванне блакіроўкамі
manage_blocks_description: Дазваляе блакіраваць пэўных пастаўшчыкоў паслуг электроннай пошты і IP адрасы
manage_blocks_description: Дазваляе блакаваць пэўныя паштовыя правайдэры і IP адрасы
manage_custom_emojis: Кіраванне адвольнымі эмодзі
manage_custom_emojis_description: Дазваляе кіраваць адвольнымі эмодзі на серверы
manage_federation: Кіраваць федэрацыяй
@ -802,14 +775,11 @@ be:
title: Ролі
rules:
add_new: Дадаць правіла
add_translation: Дадаць пераклад
delete: Выдаліць
description_html: Большасць сцвярджаюць, што прачыталі ўмовы абслугоўвання і згаджаюцца з імі, але звычайна людзі не чытаюць іх да канца, пакуль не ўзнікне праблема. <strong>Таму зрабіце правілы вашага сервера простымі з першага погляду, прадставіўшы іх у выглядзе маркіраванага спісу.</strong> Старайцеся рабіць правілы кароткімі і простымі, але не разбіваць іх на шмат асобных пунктаў.
edit: Рэдагаваць правіла
empty: Правілы сервера яшчэ не вызначаны.
title: Правілы сервера
translation: Пераклад
translations: Пераклады
settings:
about:
manage_rules: Кіраваць правіламі сервера
@ -823,7 +793,7 @@ be:
preamble: Брэндынг вашага сервера адрознівае яго ад іншых сервераў у сетцы. Гэтая інфармацыя можа адлюстроўвацца ў розных асяроддзях, напрыклад, у вэб-інтэрфейсе Mastodon, уласных праграмах, у папярэднім праглядзе спасылак на іншых вэб-сайтах і ў праграмах абмену паведамленнямі і гэтак далей. Па гэтай прычыне лепш трымаць гэтую інфармацыю яснай, кароткай і сціслай.
title: Брэндынг
captcha_enabled:
desc_html: Гэта функцыянальнасць залежыць ад знешніх скрыптоў hCaptcha, што можа быць праблемай бяспекі і прыватнасці. Акрамя таго, <strong>гэта можыць зменшыць даступнасць працэсу рэгістрацыі для некаторых людзей (асабліва інвалідаў)</strong>. Па гэтых прычынах, разгледзьце альтэрнатыўныя меры, такія як рэгістрацыя на аснове зацвярджэння або запрашэння.
desc_html: Гэта функцыянальнасць залежыць ад знешніх скрыптоў hCaptcha, што можа быць праблемай бяспекі і прыватнасці. Акрамя таго, <strong>гэта можа зрабіць працэс рэгістрацыі значна менш даступным для некаторых людзей, асабліва інвалідаў</strong>. Па гэтых прычынах, калі ласка, разгледзьце альтэрнатыўныя меры, такія як рэгістрацыя на аснове зацвярджэння або запрашэння.
title: Патрабаваць ад новых карыстальнікаў рашэння CAPTCHA для пацверджання іх уліковага запісу
content_retention:
danger_zone: Небяспечная зона
@ -835,12 +805,11 @@ be:
discovery:
follow_recommendations: Выконвайце рэкамендацыі
preamble: Прадстаўленне цікавага кантэнту дапамагае прыцягнуць новых карыстальнікаў, якія могуць не ведаць нікога на Mastodon. Кантралюйце працу розных функцый выяўлення на вашым серверы.
privacy: Прыватнасць
profile_directory: Дырэкторыя профіляў
public_timelines: Публічная паслядоўнасць публікацый
publish_statistics: Апублікаваць статыстыку
title: Выяўленне
trends: Трэнды
trends: Актуальныя
domain_blocks:
all: Для ўсіх
disabled: Нікому
@ -885,7 +854,7 @@ be:
add_to_report: 'Дадаць да скаргі #%{id}'
remove_from_report: Выдаліць са справаздачы
report: Справаздача
contents: Змест
contents: Зьмест
deleted: Выдалены
favourites: Упадабаныя
history: Гісторыя версій
@ -894,7 +863,7 @@ be:
media:
title: Медыя
metadata: Метаданыя
no_history: Гэты допіс не рэдагаваўся
no_history: Гэты пост не рэдагаваўся
no_status_selected: Ніводная публікацыя не была зменена, бо ніводная не была выбрана
open: Адкрыць допіс
original_status: Зыходны допіс
@ -903,7 +872,7 @@ be:
status_changed: Допіс зменены
status_title: Допіс карыстальніка @%{name}
title: Допісы карыстальніка - @%{name}
trending: Трэндавае
trending: Папулярныя
view_publicly: Глядзець публічна
visibility: Бачнасць
with_media: З медыя
@ -921,13 +890,13 @@ be:
appeal_rejected: Абскарджанне адхілена
system_checks:
database_schema_check:
message_html: Ёсць незавершаныя міграцыі базы даных. Запусціце іх, каб пераканацца, што праграма паводзіць сябе належным чынам
message_html: Ёсць незавершаныя міграцыі базы дадзеных. Калі ласка, запусціце іх, каб пераканацца, што дадатак паводзіць сябе належным чынам
elasticsearch_health_red:
message_html: Кластар Elasticsearch нездаровы (чырвоны статус), функцыі пошуку недаступныя
elasticsearch_health_yellow:
message_html: Кластар Elasticsearch нездаровы (жоўты статус), магчыма, неабходна высветліць прычыну
elasticsearch_index_mismatch:
message_html: Супастаўленне індэксаў Elasticsearch састарэла. Выканайце каманду <code>tootctl search deploy --only=%{value}</code>
message_html: Супастаўленне індэксаў Elasticsearch састарэла. Калі ласка, выканайце каманду <code>tootctl search deploy --only=%{value}</code>
elasticsearch_preset:
action: Падрабязней у дакументацыі
message_html: Ваш кластар Elasticsearch мае больш за адзін вузел, але Mastodon не наладжаны на іх выкарыстанне.
@ -937,7 +906,7 @@ be:
elasticsearch_reset_chewy:
message_html: Ваш сістэмны індэкс Elasticsearch састарэлы з-за змены налад. Для яго абнаўлення выканайце каманду <code>tootctl search deploy --reset-chewy</code>.
elasticsearch_running_check:
message_html: Немагчыма падключыцца да Elasticsearch. Праверце, што ён запушчаны, або адключыце пошук па ўсім тэксце
message_html: Немагчыма падключыцца да Elasticsearch. Калі ласка, праверце, што ён запушчаны, або адключыце паўнатэкставы пошук
elasticsearch_version_check:
message_html: 'Несумяшчальная версія Elasticsearch: %{value}'
version_comparison: Elasticsearch %{running_version} выяўлены, але патрабуецца %{required_version}
@ -947,11 +916,11 @@ be:
sidekiq_process_check:
message_html: Не працуе працэс Sidekiq для %{value} чаргі. Калі ласка праверце вашу канфігурацыю Sidekiq
software_version_check:
action: Праверыць наяўнасць абнаўленняў
message_html: Даступна абнаўленне Mastodon.
action: Праверыць наяўнасьць абнаўленьняў
message_html: Даступна абнаўленьне Mastodon.
software_version_critical_check:
action: Прагледзець даступныя абнаўленні
message_html: Даступна крытычнае абнаўленне Mastodon, абнавіцеся як мага хутчэй.
message_html: Даступна крытычнае абнаўленне Mastodon, калі ласка, зрабіце абнаўленне як мага хутчэй.
software_version_patch_check:
action: Прагледзець даступныя абнаўленні
message_html: Даступна абнаўленне Mastodon з выпраўленнем памылак.
@ -963,13 +932,13 @@ be:
message_html: "<strong>Ваша сховішча не наладжана. Прыватнасць карыстальнікаў пад пагрозай.</strong>"
tags:
moderation:
not_trendable: Не можа трапіць у трэнды
not_trendable: Не ў трэндзе
not_usable: Непрыгодныя
pending_review: Чакае праверкі
review_requested: Патрабуюць прагледжвання
reviewed: Прагледжаныя
title: Стан
trendable: Можа трапіць у трэнды
trendable: У трэндзе
unreviewed: Непрагледжаныя
usable: Прыгодныя
name: Назва
@ -982,26 +951,18 @@ be:
title: Хэштэгі
updated_msg: Налады хэштэгаў паспяхова змененыя
terms_of_service:
back: Вернуцца да ўмоў выкарыстання
changelog: Што змянілася
create: Выкарыстоўвайце свой тэкст
current: Бягучыя
back: Вернуцца да ўмоваў абслугоўваньня
changelog: Што зьмянілася
create: Выкарыстоўвайце свой уласны
current: Цякучы
draft: Чарнавік
generate: Выкарыстаць шаблон
generates:
action: Згенерыраваць
history: Гісторыя
live: Дзейнічае
notify_users: Апавясціць карыстальнікаў
publish: Апублікаваць
published_on_html: Апублікавана %{date}
save_draft: Захаваць чарнавік
title: Умовы выкарыстання
action: Зґенераваць
title: Адміністрацыя
trends:
allow: Дазволіць
approved: Пацверджаны
confirm_allow: Вы ўпэўнены, што хочаце дазволіць выбраныя тэгі?
disallow: Забараніць
links:
allow: Дазволіць спасылка
@ -1017,15 +978,15 @@ be:
many: Абагулілі %{count} чалавек за апошні тыдзень
one: Абагуліў адзін чалавек за апошні тыдзень
other: Абагулілі %{count} чалавек за апошні тыдзень
title: Трэндавыя спасылкі
title: Актуальныя спасылкі
usage_comparison: Выкарыстоўвалася %{today} разоў сёння, у параўнанні з %{yesterday} учора
not_allowed_to_trend: Забаронена выходзіць у трэнды
not_allowed_to_trend: Забаронена выходзіць у актуальныя
only_allowed: Толькі дазволенае
pending_review: Чакае праверкі
preview_card_providers:
allowed: Спасылкі ад гэтага выдаўца не будуць у трэндзе
description_html: Спасылкі з гэтых даменаў часта абагульняюцца на вашым серверы. Спасылкі не трапяць у публічныя трэнды, калі дамен спасылкі не ўхвалены. Вашае ўхваленне (ці адхіленне) распаўсюдзіцца на субдамены.
rejected: Спасылкі ад гэтага выдаўца не будуць у трэндзе
rejected: Спасылкі ад гэтага выдаўца не будуць у трэнде
title: Выдаўцы
rejected: Адхілена
statuses:
@ -1041,7 +1002,7 @@ be:
many: Пашыраны або ўпадабаны %{friendly_count} разоў
one: Пашыраны або ўпадабаны %{friendly_count} раз
other: Пашыраны або ўпадабаны %{friendly_count} разоў
title: Трэндавыя допісы
title: Актуальныя допісы
tags:
current_score: Бягучы рэзультат %{score}
dashboard:
@ -1054,11 +1015,11 @@ be:
listable: Можа быць прапанавана
no_tag_selected: Ніводны тэг не быў зменены, бо ніводны не быў выбраны
not_listable: Не будзе прапанавана
not_trendable: Не з’явіцца сярод трэндаў
not_trendable: Не з'явіцца ў трэндах
not_usable: Немагчыма выкарыстаць
peaked_on_and_decaying: На піку %{date}, зараз спадае
title: Актуальныя хэштэгі
trendable: Можа зявіцца сярод трэндаў
trendable: Можа з'явіцца сярод трэндаў
trending_rank: 'Папулярнае #%{rank}'
usable: Магчыма выкарыстаць
usage_comparison: Выкарыстоўвалася %{today} разоў сёння, у параўнанні з %{yesterday} учора
@ -1068,7 +1029,7 @@ be:
one: Выкарыстаў адзін чалавек за апошні тыдзень
other: Выкарысталі %{count} чалавек за апошні тыдзень
title: Рэкамендацыі і трэнды
trending: Трэндавае
trending: Папулярныя
warning_presets:
add_new: Дадаць новы
delete: Выдаліць
@ -1109,7 +1070,7 @@ be:
none: папярэджанне
sensitive: пазначыць уліковы запіс як далікатны
silence: абмежаваць уліковы запіс
suspend: каб прыпыніць гэты ўліковы запіс
suspend: выключыць уліковы запіс
body: "%{target} абскарджвае рашэнне мадэратара %{action_taken_by} ад %{date}, якая была %{type}. Яны напісалі:"
next_steps: Вы можаце ўхваліць апеляцыю каб адмяніць рашэнне мадэратараў ці ігнараваць яе.
subject: "%{username} абскарджвае рашэнне мадэратараў на %{instance}"
@ -1129,12 +1090,12 @@ be:
new_trends:
body: 'Гэтыя элементы трэба праверыць, перш чым публікаваць:'
new_trending_links:
title: Трэндавыя спасылкі
title: Папулярныя спасылкі
new_trending_statuses:
title: Трэндавыя допісы
title: Папулярныя допісы
new_trending_tags:
title: Трэндавыя хэштэгі
subject: Новыя трэнды да прагляду %{instance}
title: Папулярныя хэштэгі
subject: Новае ў папулярным для разгляду %{instance}
aliases:
add_new: Стварыць псеўданім
created_msg: Створаны новы псеўданім. Цяпер вы можаце пачаць пераход са старога ўліковага запісу.
@ -1186,7 +1147,7 @@ be:
welcome_title: Вітаем, %{name}!
wrong_email_hint: Калі гэты адрас электроннай пошты памылковы, вы можаце змяніць яго ў наладах уліковага запісу.
delete_account: Выдаліць уліковы запіс
delete_account_html: Калі вы жадаеце выдаліць свой уліковы запіс, вы можаце <a href="%{path}">працягнуць тут</a>. Ад вас спатрэбіцца пацвярджэнне.
delete_account_html: Калі вы жадаеце выдаліць ваш уліковы запіс, можаце <a href="%{path}">працягнуць тут</a>. Ад вас будзе запатрабавана пацвярджэнне.
description:
prefix_invited_by_user: "@%{name} запрашае вас далучыцца да гэтага сервера ў Mastodon!"
prefix_sign_up: Зарэгістравацца ў Mastodon сёння!
@ -1205,7 +1166,7 @@ be:
or_log_in_with: Або ўвайсці з дапамогай
progress:
confirm: Пацвердзіць email
details: Вашы даныя
details: Вашы дадзеныя
review: Наш водгук
rules: Прыняць правілы
providers:
@ -1246,10 +1207,6 @@ be:
view_strikes: Праглядзець мінулыя папярэджанні для вашага ўліковага запісу
too_fast: Форма адпраўлена занадта хутка, паспрабуйце яшчэ раз.
use_security_key: Выкарыстаеце ключ бяспекі
author_attribution:
example_title: Прыклад тэксту
s_blog: Блог %{name}
title: Пазначэнне аўтарства
challenge:
confirm: Працягнуць
hint_html: "<strong>Парада:</strong> Мы не будзем запытваць ваш пароль зноўку на працягу наступнай гадзіны."
@ -1319,7 +1276,7 @@ be:
none: Папярэджанне
sensitive: Пазначэнне ўліковага запісу як далікатнага
silence: Абмежаванне ўліковага запісу
suspend: Прыпыненне ўліковага запісу
suspend: Выключэнне ўліковага запісу
your_appeal_approved: Ваша абскарджанне было ўхвалена
your_appeal_pending: Вы адправілі апеляцыю
your_appeal_rejected: Ваша абскарджанне было адхілена
@ -1327,10 +1284,6 @@ be:
basic_information: Асноўная інфармацыя
hint_html: "<strong>Наладзьце тое, што людзі будуць бачыць у вашым профілі і побач з вашымі паведамленнямі.</strong> Іншыя людзі з большай верагоднасцю будуць сачыць і ўзаемадзейнічаць з вамі, калі ў вас ёсць запоўнены профіль і фота профілю."
other: Іншае
emoji_styles:
auto: Аўтаматычны
native: Мясцовы
twemoji: Twemoji
errors:
'400': Запыт, які вы адправілі, памылковы або няправільны.
'403': У вас няма дазволу на прагляд гэтай старонкі.
@ -1445,10 +1398,10 @@ be:
other: Выберыце %{count} элементаў, якія адпавядаюць вашаму пошуку.
today: сёння
validation_errors:
few: Штосьці тут пакуль не сыходзіцца! Праглядзіце %{count} памылкі ніжэй
many: Штосьці тут пакуль не сыходзіцца! Праглядзіце %{count} памылак ніжэй
one: Штосьці тут пакуль не сыходзіцца! Праглядзіце памылку ніжэй
other: Штосьці тут пакуль не сыходзіцца! Праглядзіце %{count} памылак ніжэй
few: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылкі ніжэй
many: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылак ніжэй
one: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце памылку ніжэй
other: Штосьці пакуль не зусім правільна! Калі ласка, праглядзіце %{count} памылак ніжэй
imports:
errors:
empty: Пусты CSV файл
@ -1460,7 +1413,7 @@ be:
imported: Імпартавана
mismatched_types_warning: Здаецца, вы выбралі няправільны тып для гэтага імпарту, праверце яшчэ раз.
modes:
merge: Абяднаць
merge: Аб'яднаць
merge_long: Захаваць існуючыя запісы і дадаць новыя
overwrite: Перазапісаць
overwrite_long: Замяніць бягучыя запісы на новыя
@ -1536,7 +1489,7 @@ be:
unsubscribe:
action: Так, адпісацца
complete: Адпісаны
confirmation_html: Вы ўпэўнены, што жадаеце адмовіцца ад атрымання %{type} з Mastodon на дамене %{domain} на сваю электронную пошту %{email}? Вы заўсёды можаце паўторна падпісацца ў <a href="%{settings_path}">наладах апавяшчэнняў па электроннай пошце</a>.
confirmation_html: Вы ўпэўнены, што жадаеце адмовіцца ад %{type} з Mastodon на дамене %{domain} на вашу электронную пошту %{email}? Вы заўсёды можаце паўторна падпісацца у <a href="%{settings_path}">наладах апавяшчэнняў па электроннай пошце</a>.
emails:
notification_emails:
favourite: апавяшчэнні на пошту пра упадабанае
@ -1576,7 +1529,7 @@ be:
set_redirect: Задаць перанакіраванне
warning:
backreference_required: Спачатку трэба наладзіць зваротнае спасыланне новага ўліковага запісу на бягучы
before: 'Перш чым працягнуць, уважліва прачытайце гэтыя заўвагі:'
before: 'Перш чым працягнуць, калі ласка, уважліва прачытайце гэтыя заўвагі:'
cooldown: Пасля «пераезду» будзе перыяд чакання, на працягу якога вы не зможаце зноў «пераехаць»
disabled_account: Пасля гэтага ваш бягучы ўліковы запіс не будзе цалкам даступны. Аднак у вас будзе доступ да экспарту даных, а таксама да паўторнай актывацыі.
followers: Гэтае дзеянне будзе «пераносіць» усіх падпісчыкаў з бягучага ўліковага запісу на новы
@ -1689,9 +1642,9 @@ be:
title: Вы пакідаеце %{instance}.
relationships:
activity: Актыўнасць ул. запісу
confirm_follow_selected_followers: Вы ўпэўнены, што хочаце падпісацца на выбраных падпісчыкаў?
confirm_remove_selected_followers: Вы ўпэўнены, што хочаце выдаліць выбраных падпісчыкаў?
confirm_remove_selected_follows: Вы ўпэўнены, што хочаце выдаліць выбраныя падпіскі?
confirm_follow_selected_followers: Вы ўпэўнены, што жадаеце падпісацца на выбраных падпісчыкаў?
confirm_remove_selected_followers: Вы ўпэўнены, што жадаеце выдаліць выбраных падпісчыкаў?
confirm_remove_selected_follows: Вы ўпэўнены, што жадаеце выдаліць выбраныя падпіскі?
dormant: Занядбаны
follow_failure: Вы не можаце падпісацца на некаторыя акаўнты.
follow_selected_followers: Падпісацца на выбраных падпісчыкаў
@ -1721,7 +1674,6 @@ be:
scheduled_statuses:
over_daily_limit: Вы перавысілі ліміт ў %{limit} запланаваных на сёння допісаў
over_total_limit: Вы перавысілі ліміт ў %{limit} запланаваных допісаў
too_soon: дата публікацыі мусіць быць у будучыні
self_destruct:
lead_html: На жаль, дамен <strong>%{domain}</strong> зачыняецца назаўсёды. Калі ў вас быў уліковы запіс, вы не зможаце працягваць выкарыстоўваць яго, але вы ўсё яшчэ можаце запытаць рэзервовае капіраванне вашых даных.
title: Гэты сервер зачыняецца
@ -1837,14 +1789,10 @@ be:
in_reply_not_found: Здаецца, допіс, на які вы спрабуеце адказаць, не існуе.
over_character_limit: перавышаная колькасць сімвалаў у %{max}
pin_errors:
direct: Допісы, бачныя толькі згаданым карыстальнікам, нельга замацаваць
direct: Допісы, бачныя толькі згаданым карыстальнікам, не могуць быць замацаваныя
limit: Вы ўжо замацавалі максімальную колькасць допісаў
ownership: Немагчыма замацаваць чужы допіс
reblog: Немагчыма замацаваць пашырэнне
quote_policies:
followers: Падпісчыкі і згаданыя карыстальнікі
nobody: Толькі згаданыя карыстальнікі
public: Усе
title: '%{name}: "%{quote}"'
visibilities:
direct: Асабіста
@ -1897,7 +1845,7 @@ be:
tags:
does_not_match_previous_name: не супадае з папярэднім імям
terms_of_service:
title: Умовы выкарыстання
title: Умовы абслугоўваньня
themes:
contrast: Mastodon (высокі кантраст)
default: Mastodon (цёмная)
@ -1926,7 +1874,7 @@ be:
otp: Праграма аўтэнтыфікацыі
recovery_codes: Абнавіць коды аднаўлення
recovery_codes_regenerated: Новыя коды аднаўлення паспяхова створаныя
recovery_instructions_html: Калі раптам вы страціце доступ да свайго тэлефона, вы можаце скарыстаць адзін з кодаў аднаўлення ніжэй каб аднавіць доступ да свайго ўліковага запісу. <strong>Захоўвайце іх у бяспечным месцы</strong>. Напрыклад, вы можаце раздрукаваць іх і захоўваць разам з іншымі важнымі дакументамі.
recovery_instructions_html: Калі раптам вы страціце доступ да вашага тэлефона, вы можаце скарыстацца адным з кодаў аднаўлення ніжэй каб аднавіць доступ да вашага ўліковага запісу. <strong>Захоўвайце іх у бяспечным месцы</strong>. Напрыклад, вы можаце раздрукаваць іх і захоўваць разам з іншымі важнымі дакументамі.
webauthn: Ключы бяспекі
user_mailer:
appeal_approved:
@ -1947,10 +1895,10 @@ be:
title: Ваш архіў можна спампаваць
failed_2fa:
details: 'Вось падрабязнасці ўваходу:'
explanation: Хтосьці спрабаваў увайсці ў ваш уліковы запіс, але ўвёў няправільны часовы пароль.
explanation: Хтосьці спрабаваў увайсці ў ваш уліковы запіс, але ўвёў няправільны другі фактар аўтэнтыфікацыі.
further_actions_html: Калі гэта не вы, мы рэкамендуем неадкладна %{action}, бо ён можа быць скампраметаваны.
subject: Збой двухфактарнай аўтэнтыфікацыі
title: Двухфактарная аўтэнтыфікацыя не ўдалася
subject: Збой аўтэнтыфікацыі па другім фактары
title: Няўдалая аўтэнтыфікацыя па другім фактары
suspicious_sign_in:
change_password: змяніць свой пароль
details: 'Вось падрабязнасці ўваходу:'
@ -1958,9 +1906,6 @@ be:
further_actions_html: Калі гэта былі не вы, раім вам неадкладна %{action}, а таксама ўключыць двухфактарную аўтэнтыфікацыю, каб захаваць бяспеку вашага ўліковага запісу.
subject: У вас уліковы запіс зайшлі з новага IP-адрасу
title: Новы ўваход
terms_of_service_changed:
sign_off: Каманда %{domain}
title: Важнае абнаўленне
warning:
appeal: Падаць апеляцыю
appeal_description: "Калі вы лічыце гэта памылкай, вы можаце падаць апеляцыю \nсупрацоўнікам %{instance}."
@ -1991,7 +1936,7 @@ be:
none: Папярэджанне
sensitive: Уліковыя запісы, пазначаныя як далікатныя
silence: Уліковы запіс абмежаваны
suspend: Уліковы запіс прыпынены
suspend: Уліковы запіс выключаны
welcome:
apps_android_action: Спампаваць з Google Play
apps_ios_action: Спампваваць з App Store
@ -2023,9 +1968,9 @@ be:
many: "%{people} чалавек за апошнія 2 дні"
one: "%{people} чалавек за апошнія 2 дні"
other: "%{people} чалавека за апошнія 2 дні"
hashtags_subtitle: Даведайцеся што было ў трэндзе за апошнія 2 дні
hashtags_subtitle: Даведайцеся што было папулярна ў апошнія 2 дні
hashtags_title: Папулярныя хэштэгі
hashtags_view_more: Прагледзець іншыя трэндавыя хэштэгі
hashtags_view_more: Прагледзець іншыя папулярныя хэштэгі
post_action: Стварыць
post_step: Скажыце ўсім прывітанне з дапамогай тэксту, фатаграфій, відэа і апытанняў.
post_title: Стварыце свой першы допіс
@ -2038,7 +1983,7 @@ be:
follow_limit_reached: Вы не можаце падпісацца на большую колькасць людзей чым %{limit}
go_to_sso_account_settings: Перайдзіце ў налады ідэнтыфікацыі вашага ўліковага запісу
invalid_otp_token: Няправільны код двухфактарнай аўтэнтыфікацыі
otp_lost_help_html: Калі вы страцілі доступ да абодвух, вы можаце звязацца з намі праз %{email}
otp_lost_help_html: Калі вы страцілі доступ да абодвух, вы можаце скарыстацца %{email}
rate_limited: Занадта шмат спробаў аўтэнтыфікацыі, паспрабуйце пазней.
seamless_external_login: Вы ўвайшлі праз знешні сэрвіс, таму налады пароля і эл. пошты недаступныя.
signed_in_as: 'Увайшлі як:'

View File

@ -566,13 +566,6 @@ bg:
all: Всичко
limited: Ограничено
title: Mодериране
moderation_notes:
create: Добавяне на бележка за модериране
created_msg: Успешно създадена бележка за модериране на екземпляр!
description_html: Прегледайте и оставете бележки за други модератори и за вас в бъдеще
destroyed_msg: Успешно изтрита бележка за модериране на екземпляр!
placeholder: Сведенията за този екземпляр, предприети действия, или всичко друго, което ще ви помогне да модерирате този екземпляр в бъдеще.
title: Бележки за модериране
private_comment: Личен коментар
public_comment: Публичен коментар
purge: Чистка
@ -781,16 +774,11 @@ bg:
title: Роли
rules:
add_new: Добавяне на правило
add_translation: Добавяне на превод
delete: Изтриване
description_html: Дори повечето хора да отбелязват, че са прочели и са съгласни с условията на услугата, обикновено хората не ги четат, докато не се сблъскат с проблем. <strong>Улеснете четенето на правилата за сървъра си, представяйки ги като списък с точки.</strong> Опитайте да се придържате към кратки и прости правила, но не ги разпилявайте в премного точки.
edit: Промяна на правило
empty: Още няма определени правила на сървъра.
move_down: Преместване надолу
move_up: Преместване нагоре
title: Сървърни правила
translation: Превод
translations: Преводи
settings:
about:
manage_rules: Управление на правилата на сървъра
@ -816,7 +804,6 @@ bg:
discovery:
follow_recommendations: Препоръки за следване
preamble: За потребители, които са нови и не познават никого в Mastodon, показването на интересно съдържание е ключово. Настройте начина, по който различни функции по откриване на съдържание работят на вашия сървър.
privacy: Поверителност
profile_directory: Указател на профила
public_timelines: Публични хронологии
publish_statistics: Публикуване на статистиката
@ -903,8 +890,6 @@ bg:
system_checks:
database_schema_check:
message_html: Има миграции на базата данни, които чакат да бъдат изпълнени. Моля, изпълнете ги, за да осигурите изправността на приложението
elasticsearch_analysis_index_mismatch:
message_html: Настройките за анализиращия индекс Elasticsearch са остарели. Пуснете <code>tootctl search deploy --only-mapping --only=%{value}</code>
elasticsearch_health_red:
message_html: Клъстерът Elasticsearch е нездрав (червено състояние), функциите за търсене не са налични
elasticsearch_health_yellow:
@ -1856,10 +1841,6 @@ bg:
limit: Вече сте закачили максималния брой публикации
ownership: Публикация на някого другиго не може да бъде закачена
reblog: Раздуване не може да бъде закачано
quote_policies:
followers: Последователи и споменати потребители
nobody: Само споменатите потребители
public: Всеки
title: "%{name}: „%{quote}“"
visibilities:
direct: Директно
@ -1913,11 +1894,6 @@ bg:
does_not_match_previous_name: не съвпада с предишното име
terms_of_service:
title: Условия на услугата
terms_of_service_interstitial:
future_preamble_html: Правим някои промени в условията на услугата ни, което ще влезе в сила на <strong>%{date}</strong>. Насърчаваме ви да разгледате обновените условия.
past_preamble_html: Променихме условията на услугата ни от последното ви посещение. Насърчаваме ви да разгледате обновените условия.
review_link: Разглеждане на условията на услугата
title: Условията на услугата на %{domain} се променят
themes:
contrast: Mastodon (висок контраст)
default: Mastodon (тъмно)

View File

@ -396,9 +396,6 @@ br:
created_at: Deiziad
title_actions:
none: Diwall
emoji_styles:
auto: Emgefreek
twemoji: Twemoji
exports:
archive_takeout:
date: Deiziad

View File

@ -578,12 +578,6 @@ ca:
all: Totes
limited: Limitades
title: Moderació
moderation_notes:
create: Afegeix una nota de moderació
created_msg: S'ha creat la nota de moderació d'instància.
description_html: Mireu i deixeu notes per als altres moderadors i per a un mateix
destroyed_msg: S'ha esborrat la nota de moderació d'instància.
title: Notes de moderació
private_comment: Comentari privat
public_comment: Comentari públic
purge: Purga
@ -809,8 +803,6 @@ ca:
preamble: Proporciona informació detallada sobre com funciona, com es modera i com es financia el servidor.
rules_hint: Hi ha un àrea dedicada a les normes a les que s'espera que els teus usuaris s'hi adhereixin.
title: Quant a
allow_referrer_origin:
title: Permeteu que llocs externs vegin el vostre servidor de Mastodon com a font de trànsit
appearance:
preamble: Personalitza l'interfície web de Mastodon.
title: Aparença
@ -1347,10 +1339,6 @@ ca:
basic_information: Informació bàsica
hint_html: "<strong>Personalitza el que la gent veu en el teu perfil públic i a prop dels teus tuts..</strong> És més probable que altres persones et segueixin i interaccionin amb tu quan tens emplenat el teu perfil i amb la teva imatge."
other: Altres
emoji_styles:
auto: Automàtic
native: Nadiu
twemoji: Twemoji
errors:
'400': La sol·licitud que vas emetre no era vàlida o no era correcta.
'403': No tens permís per a veure aquesta pàgina.
@ -1486,28 +1474,6 @@ ca:
lists_html:
one: Esteu a punt de <strong>reemplaçar les vostres llistes</strong> amb contactes de <strong>%{filename}</strong>. S'afegirà <strong>%{count} compte</strong> a les noves llistes.
other: Esteu a punt de <strong>reemplaçar les vostres llistes</strong> amb contactes de <strong>%{filename}</strong>. S'afegiran fins a <strong>%{count} comptes</strong> a les noves llistes.
muting_html:
one: Esteu a punt de <strong>reemplaçar la vostra llista de comptes silenciats</strong> amb fins a <strong>%{count} compte</strong> de <strong>%{filename}</strong>.
other: Esteu a punt de <strong>reemplaçar la vostra llista de comptes silenciats</strong> amb fins a <strong>%{count} comptes</strong> de <strong>%{filename}</strong>.
preambles:
blocking_html:
one: Esteu a punt de <strong>blocar</strong> fins a <strong>%{count} compte</strong> de <strong>%{filename}</strong>.
other: Esteu a punt de <strong>blocar</strong> fins a <strong>%{count} comptes</strong> de <strong>%{filename}</strong>.
bookmarks_html:
one: Esteu a punt d'afegir fins a <strong>%{count} publicació</strong> de <strong>%{filename}</strong> als vostres <strong>marcadors</strong>.
other: Esteu a punt d'afegir fins a <strong>%{count} publicacions</strong> de <strong>%{filename}</strong> als vostres <strong>marcadors</strong>.
domain_blocking_html:
one: Esteu a punt de <strong>blocar</strong> fins a <strong>%{count} domini</strong> de <strong>%{filename}</strong>.
other: Esteu a punt de <strong>blocar</strong> fins a <strong>%{count} dominis</strong> de <strong>%{filename}</strong>.
following_html:
one: Esteu a punt de <strong>seguir</strong> fins a <strong>%{count} compte</strong> de <strong>%{filename}</strong>.
other: Esteu a punt de <strong>seguir</strong> fins a <strong>%{count} comptes</strong> de <strong>%{filename}</strong>.
lists_html:
one: Esteu a punt d'afegir <strong>%{count} compte</strong> de <strong>%{filename}</strong> a les vostres <strong>llistes</strong>. Es crearan noves llistes si no n'hi ha cap on afegir-lo.
other: Esteu a punt d'afegir <strong>%{count} comptes</strong> de <strong>%{filename}</strong> a les vostres <strong>llistes</strong>. Es crearan noves llistes si no n'hi ha cap on afegir-los.
muting_html:
one: Esteu a punt de <strong>silenciar</strong> fins a <strong>%{count} compte</strong> de <strong>%{filename}</strong>.
other: Esteu a punt de <strong>silenciar</strong> fins a <strong>%{count} comptes</strong> de <strong>%{filename}</strong>.
preface: Pots importar algunes les dades que has exportat des d'un altre servidor, com ara el llistat de les persones que estàs seguint o bloquejant.
recent_imports: Importacions recents
states:

View File

@ -1387,10 +1387,6 @@ cs:
basic_information: Základní informace
hint_html: "<strong>Nastavte si, co lidé uvidí na vašem veřejném profilu a vedle vašich příspěvků.</strong> Ostatní lidé vás budou spíše sledovat a komunikovat s vámi, když budete mít vyplněný profil a profilový obrázek."
other: Další
emoji_styles:
auto: Auto
native: Výchozí
twemoji: Twemoji
errors:
'400': Žádost, kterou jste odeslali, byla neplatná nebo poškozená.
'403': Nejste oprávněni tuto stránku zobrazit.

Some files were not shown because too many files have changed in this diff Show More