Merge pull request #969 from kmycode/upstream-20240123

Upstream 20240123
This commit is contained in:
KMY(雪あすか) 2025-01-23 19:16:23 +09:00 committed by GitHub
commit 22bf14e9f0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
320 changed files with 2589 additions and 2817 deletions

View file

@ -34,6 +34,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
:searchability,
:hide_collections,
:indexable,
attribution_domains: [],
fields_attributes: [:name, :value]
)
end

View file

@ -56,12 +56,12 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
end
def subscription_params
params.require(:subscription).permit(:endpoint, :standard, keys: [:auth, :p256dh])
params.expect(subscription: [:endpoint, :standard, keys: [:auth, :p256dh]])
end
def data_params
return {} if params[:data].blank?
params.require(:data).permit(:policy, alerts: Notification::TYPES)
params.expect(data: [:policy, alerts: Notification::TYPES])
end
end

View file

@ -66,7 +66,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
end
def subscription_params
@subscription_params ||= params.require(:subscription).permit(:standard, :endpoint, keys: [:auth, :p256dh])
@subscription_params ||= params.expect(subscription: [:standard, :endpoint, keys: [:auth, :p256dh]])
end
def web_push_subscription_params
@ -82,6 +82,6 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
end
def data_params
@data_params ||= params.require(:data).permit(:policy, alerts: Notification::TYPES)
@data_params ||= params.expect(data: [:policy, alerts: Notification::TYPES])
end
end

View file

@ -35,6 +35,6 @@ class Auth::SetupController < ApplicationController
end
def user_params
params.require(:user).permit(:email)
params.expect(user: [:email])
end
end

View file

@ -21,6 +21,6 @@ class Disputes::AppealsController < Disputes::BaseController
end
def appeal_params
params.require(:appeal).permit(:text)
params.expect(appeal: [:text])
end
end

View file

@ -48,7 +48,7 @@ class FiltersController < ApplicationController
end
def resource_params
params.require(:custom_filter).permit(:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, :exclude_quote, :exclude_profile, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy])
params.expect(custom_filter: [:title, :expires_in, :filter_action, :exclude_follows, :exclude_localusers, :exclude_quote, :exclude_profile, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy]])
end
def set_cache_headers

View file

@ -43,7 +43,7 @@ class InvitesController < ApplicationController
end
def resource_params
params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
params.expect(invite: [:max_uses, :expires_in, :autofollow, :comment])
end
def set_cache_headers

View file

@ -30,7 +30,7 @@ class Settings::AliasesController < Settings::BaseController
private
def resource_params
params.require(:account_alias).permit(:acct)
params.expect(account_alias: [:acct])
end
def set_alias

View file

@ -21,7 +21,7 @@ class Settings::DeletesController < Settings::BaseController
private
def resource_params
params.require(:form_delete_confirmation).permit(:password, :username)
params.expect(form_delete_confirmation: [:password, :username])
end
def require_not_suspended!

View file

@ -44,6 +44,6 @@ class Settings::FeaturedTagsController < Settings::BaseController
end
def featured_tag_params
params.require(:featured_tag).permit(:name)
params.expect(featured_tag: [:name])
end
end

View file

@ -90,7 +90,7 @@ class Settings::ImportsController < Settings::BaseController
private
def import_params
params.require(:form_import).permit(:data, :type, :mode)
params.expect(form_import: [:data, :type, :mode])
end
def set_bulk_import

View file

@ -33,6 +33,6 @@ class Settings::Migration::RedirectsController < Settings::BaseController
private
def resource_params
params.require(:form_redirect).permit(:acct, :current_password, :current_username)
params.expect(form_redirect: [:acct, :current_password, :current_username])
end
end

View file

@ -27,7 +27,7 @@ class Settings::MigrationsController < Settings::BaseController
private
def resource_params
params.require(:account_migration).permit(:acct, :current_password, :current_username)
params.expect(account_migration: [:acct, :current_password, :current_username])
end
def set_migrations

View file

@ -18,7 +18,7 @@ class Settings::PrivacyController < Settings::BaseController
private
def account_params
params.require(:account).permit(:discoverable, :unlocked, :indexable, :show_collections, settings: UserSettings.keys)
params.expect(account: [:discoverable, :unlocked, :indexable, :show_collections, settings: UserSettings.keys])
end
def set_account

View file

@ -20,7 +20,7 @@ class Settings::ProfilesController < Settings::BaseController
private
def account_params
params.require(:account).permit(:display_name, :note, :bio_markdown, :avatar, :header, :bot, :my_actor_type, fields_attributes: [:name, :value])
params.expect(account: [:display_name, :note, :bio_markdown, :avatar, :header, :bot, :my_actor_type, fields_attributes: [[:name, :value]]])
end
def set_account

View file

@ -18,7 +18,9 @@ class Settings::VerificationsController < Settings::BaseController
private
def account_params
params.require(:account).permit(:attribution_domains_as_text)
params.require(:account).permit(:attribution_domains).tap do |params|
params[:attribution_domains] = params[:attribution_domains].split if params[:attribution_domains]
end
end
def set_account

View file

@ -15,8 +15,6 @@ class StatusesCleanupController < ApplicationController
else
render :show
end
rescue ActionController::ParameterMissing
# Do nothing
end
def require_functional!
@ -30,7 +28,7 @@ class StatusesCleanupController < ApplicationController
end
def resource_params
params.require(:account_statuses_cleanup_policy).permit(:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :keep_self_emoji, :min_favs, :min_reblogs, :min_emojis)
params.expect(account_statuses_cleanup_policy: [:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :keep_self_emoji, :min_favs, :min_reblogs, :min_emojis])
end
def set_cache_headers

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -441,7 +441,7 @@ export function initMediaEditModal(id) {
dispatch(openModal({
modalType: 'FOCAL_POINT',
modalProps: { id },
modalProps: { mediaId: id },
}));
};
}

View file

@ -0,0 +1,70 @@
import type { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import { apiUpdateMedia } from 'mastodon/api/compose';
import type { ApiMediaAttachmentJSON } from 'mastodon/api_types/media_attachments';
import type { MediaAttachment } from 'mastodon/models/media_attachment';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
type SimulatedMediaAttachmentJSON = ApiMediaAttachmentJSON & {
unattached?: boolean;
};
const simulateModifiedApiResponse = (
media: MediaAttachment,
params: { description?: string; focus?: string },
): SimulatedMediaAttachmentJSON => {
const [x, y] = (params.focus ?? '').split(',');
const data = {
...media.toJS(),
...params,
meta: {
focus: {
x: parseFloat(x ?? '0'),
y: parseFloat(y ?? '0'),
},
},
} as unknown as SimulatedMediaAttachmentJSON;
return data;
};
export const changeUploadCompose = createDataLoadingThunk(
'compose/changeUpload',
async (
{
id,
...params
}: {
id: string;
description: string;
focus: string;
},
{ getState },
) => {
const media = (
(getState().compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).find((item) => item.get('id') === id);
// Editing already-attached media is deferred to editing the post itself.
// For simplicity's sake, fake an API reply.
if (media && !media.get('unattached')) {
return new Promise<SimulatedMediaAttachmentJSON>((resolve) => {
resolve(simulateModifiedApiResponse(media, params));
});
}
return apiUpdateMedia(id, params);
},
(media: SimulatedMediaAttachmentJSON) => {
return {
media,
attached: typeof media.unattached !== 'undefined' && !media.unattached,
};
},
{
useLoadingBar: false,
},
);

View file

@ -9,6 +9,7 @@ export type ModalType = keyof typeof MODAL_COMPONENTS;
interface OpenModalPayload {
modalType: ModalType;
modalProps: ModalProps;
previousModalProps?: ModalProps;
}
export const openModal = createAction<OpenModalPayload>('MODAL_OPEN');

View file

@ -0,0 +1,7 @@
import { apiRequestPut } from 'mastodon/api';
import type { ApiMediaAttachmentJSON } from 'mastodon/api_types/media_attachments';
export const apiUpdateMedia = (
id: string,
params?: { description?: string; focus?: string },
) => apiRequestPut<ApiMediaAttachmentJSON>(`v1/media/${id}`, params);

View file

@ -7,6 +7,7 @@ interface BaseProps
extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
block?: boolean;
secondary?: boolean;
compact?: boolean;
dangerous?: boolean;
}
@ -27,6 +28,7 @@ export const Button: React.FC<Props> = ({
disabled,
block,
secondary,
compact,
dangerous,
className,
title,
@ -47,6 +49,7 @@ export const Button: React.FC<Props> = ({
<button
className={classNames('button', className, {
'button-secondary': secondary,
'button--compact': compact,
'button--block': block,
'button--dangerous': dangerous,
})}

View file

@ -2,6 +2,8 @@ import { useCallback, useEffect } from 'react';
import { useIntl, defineMessages } from 'react-intl';
import classNames from 'classnames';
import { useIdentity } from '@/mastodon/identity_context';
import { fetchRelationships, followAccount } from 'mastodon/actions/accounts';
import { openModal } from 'mastodon/actions/modal';
@ -20,7 +22,8 @@ const messages = defineMessages({
export const FollowButton: React.FC<{
accountId?: string;
}> = ({ accountId }) => {
compact?: boolean;
}> = ({ accountId, compact }) => {
const intl = useIntl();
const dispatch = useAppDispatch();
const { signedIn } = useIdentity();
@ -93,7 +96,9 @@ export const FollowButton: React.FC<{
href='/settings/profile'
target='_blank'
rel='noopener'
className='button button-secondary'
className={classNames('button button-secondary', {
'button--compact': compact,
})}
>
{label}
</a>
@ -110,6 +115,7 @@ export const FollowButton: React.FC<{
(account?.suspended || !!account?.moved))
}
secondary={following}
compact={compact}
className={following ? 'button--destructive' : undefined}
>
{label}

View file

@ -1,70 +1,70 @@
import { useCallback, useState } from 'react';
import { useCallback, useState, forwardRef } from 'react';
interface Props {
src: string;
key: string;
alt?: string;
lang?: string;
width: number;
height: number;
onClick?: () => void;
width?: number;
height?: number;
onClick?: React.MouseEventHandler;
onMouseDown?: React.MouseEventHandler;
onTouchStart?: React.TouchEventHandler;
}
export const GIFV: React.FC<Props> = ({
src,
alt,
lang,
width,
height,
onClick,
}) => {
const [loading, setLoading] = useState(true);
export const GIFV = forwardRef<HTMLVideoElement, Props>(
(
{ src, alt, lang, width, height, onClick, onMouseDown, onTouchStart },
ref,
) => {
const [loading, setLoading] = useState(true);
const handleLoadedData: React.ReactEventHandler<HTMLVideoElement> =
useCallback(() => {
const handleLoadedData = useCallback(() => {
setLoading(false);
}, [setLoading]);
const handleClick: React.MouseEventHandler = useCallback(
(e) => {
if (onClick) {
const handleClick = useCallback(
(e: React.MouseEvent) => {
e.stopPropagation();
onClick();
}
},
[onClick],
);
onClick?.(e);
},
[onClick],
);
return (
<div className='gifv' style={{ position: 'relative' }}>
{loading && (
<canvas
width={width}
height={height}
return (
<div className='gifv'>
{loading && (
<canvas
role='button'
tabIndex={0}
aria-label={alt}
title={alt}
lang={lang}
onClick={handleClick}
/>
)}
<video
ref={ref}
src={src}
role='button'
tabIndex={0}
aria-label={alt}
title={alt}
lang={lang}
width={width}
height={height}
muted
loop
autoPlay
playsInline
onClick={handleClick}
onLoadedData={handleLoadedData}
onMouseDown={onMouseDown}
onTouchStart={onTouchStart}
/>
)}
</div>
);
},
);
<video
src={src}
role='button'
tabIndex={0}
aria-label={alt}
title={alt}
lang={lang}
muted
loop
autoPlay
playsInline
onClick={handleClick}
onLoadedData={handleLoadedData}
style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }}
/>
</div>
);
};
GIFV.displayName = 'GIFV';

View file

@ -118,9 +118,9 @@ class ModalRoot extends PureComponent {
}
_ensureHistoryBuffer () {
const { pathname, state } = this.history.location;
const { pathname, search, hash, state } = this.history.location;
if (!state || state.mastodonModalKey !== this._modalHistoryKey) {
this.history.push(pathname, { ...state, mastodonModalKey: this._modalHistoryKey });
this.history.push({ pathname, search, hash }, { ...state, mastodonModalKey: this._modalHistoryKey });
}
}

View file

@ -1,86 +0,0 @@
import PropTypes from 'prop-types';
import { useState, useRef, useCallback } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import Overlay from 'react-overlays/Overlay';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import BadgeIcon from '@/material-icons/400-24px/badge.svg?react';
import GlobeIcon from '@/material-icons/400-24px/globe.svg?react';
import { Icon } from 'mastodon/components/icon';
export const DomainPill = ({ domain, username, isSelf }) => {
const [open, setOpen] = useState(false);
const [expanded, setExpanded] = useState(false);
const triggerRef = useRef(null);
const handleClick = useCallback(() => {
setOpen(!open);
}, [open, setOpen]);
const handleExpandClick = useCallback(() => {
setExpanded(!expanded);
}, [expanded, setExpanded]);
return (
<>
<button className={classNames('account__domain-pill', { active: open })} ref={triggerRef} onClick={handleClick}>{domain}</button>
<Overlay show={open} rootClose onHide={handleClick} offset={[5, 5]} target={triggerRef}>
{({ props }) => (
<div {...props} className='account__domain-pill__popout dropdown-animation'>
<div className='account__domain-pill__popout__header'>
<div className='account__domain-pill__popout__header__icon'><Icon icon={BadgeIcon} /></div>
<h3><FormattedMessage id='domain_pill.whats_in_a_handle' defaultMessage="What's in a handle?" /></h3>
</div>
<div className='account__domain-pill__popout__handle'>
<div className='account__domain-pill__popout__handle__label'>{isSelf ? <FormattedMessage id='domain_pill.your_handle' defaultMessage='Your handle:' /> : <FormattedMessage id='domain_pill.their_handle' defaultMessage='Their handle:' />}</div>
<div className='account__domain-pill__popout__handle__handle'>@{username}@{domain}</div>
</div>
<div className='account__domain-pill__popout__parts'>
<div>
<div className='account__domain-pill__popout__parts__icon'><Icon icon={AlternateEmailIcon} /></div>
<div>
<h6><FormattedMessage id='domain_pill.username' defaultMessage='Username' /></h6>
<p>{isSelf ? <FormattedMessage id='domain_pill.your_username' defaultMessage='Your unique identifier on this server. Its possible to find users with the same username on different servers.' /> : <FormattedMessage id='domain_pill.their_username' defaultMessage='Their unique identifier on their server. Its possible to find users with the same username on different servers.' />}</p>
</div>
</div>
<div>
<div className='account__domain-pill__popout__parts__icon'><Icon icon={GlobeIcon} /></div>
<div>
<h6><FormattedMessage id='domain_pill.server' defaultMessage='Server' /></h6>
<p>{isSelf ? <FormattedMessage id='domain_pill.your_server' defaultMessage='Your digital home, where all of your posts live. Dont like this one? Transfer servers at any time and bring your followers, too.' /> : <FormattedMessage id='domain_pill.their_server' defaultMessage='Their digital home, where all of their posts live.' />}</p>
</div>
</div>
</div>
<p>{isSelf ? <FormattedMessage id='domain_pill.who_you_are' defaultMessage='Because your handle says who you are and where you are, people can interact with you across the social web of <button>ActivityPub-powered platforms</button>.' values={{ button: x => <button onClick={handleExpandClick} className='link-button'>{x}</button> }} /> : <FormattedMessage id='domain_pill.who_they_are' defaultMessage='Since handles say who someone is and where they are, you can interact with people across the social web of <button>ActivityPub-powered platforms</button>.' values={{ button: x => <button onClick={handleExpandClick} className='link-button'>{x}</button> }} />}</p>
{expanded && (
<>
<p><FormattedMessage id='domain_pill.activitypub_like_language' defaultMessage='ActivityPub is like the language Mastodon speaks with other social networks.' /></p>
<p><FormattedMessage id='domain_pill.activitypub_lets_connect' defaultMessage='It lets you connect and interact with people not just on Mastodon, but across different social apps too.' /></p>
</>
)}
</div>
)}
</Overlay>
</>
);
};
DomainPill.propTypes = {
username: PropTypes.string.isRequired,
domain: PropTypes.string.isRequired,
isSelf: PropTypes.bool,
};

View file

@ -0,0 +1,197 @@
import { useState, useRef, useCallback } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import Overlay from 'react-overlays/Overlay';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import BadgeIcon from '@/material-icons/400-24px/badge.svg?react';
import GlobeIcon from '@/material-icons/400-24px/globe.svg?react';
import { Icon } from 'mastodon/components/icon';
export const DomainPill: React.FC<{
domain: string;
username: string;
isSelf: boolean;
}> = ({ domain, username, isSelf }) => {
const [open, setOpen] = useState(false);
const [expanded, setExpanded] = useState(false);
const triggerRef = useRef(null);
const handleClick = useCallback(() => {
setOpen(!open);
}, [open, setOpen]);
const handleExpandClick = useCallback(() => {
setExpanded(!expanded);
}, [expanded, setExpanded]);
return (
<>
<button
className={classNames('account__domain-pill', { active: open })}
ref={triggerRef}
onClick={handleClick}
>
{domain}
</button>
<Overlay
show={open}
rootClose
onHide={handleClick}
offset={[5, 5]}
target={triggerRef}
>
{({ props }) => (
<div
{...props}
className='account__domain-pill__popout dropdown-animation'
>
<div className='account__domain-pill__popout__header'>
<div className='account__domain-pill__popout__header__icon'>
<Icon id='' icon={BadgeIcon} />
</div>
<h3>
<FormattedMessage
id='domain_pill.whats_in_a_handle'
defaultMessage="What's in a handle?"
/>
</h3>
</div>
<div className='account__domain-pill__popout__handle'>
<div className='account__domain-pill__popout__handle__label'>
{isSelf ? (
<FormattedMessage
id='domain_pill.your_handle'
defaultMessage='Your handle:'
/>
) : (
<FormattedMessage
id='domain_pill.their_handle'
defaultMessage='Their handle:'
/>
)}
</div>
<div className='account__domain-pill__popout__handle__handle'>
@{username}@{domain}
</div>
</div>
<div className='account__domain-pill__popout__parts'>
<div>
<div className='account__domain-pill__popout__parts__icon'>
<Icon id='' icon={AlternateEmailIcon} />
</div>
<div>
<h6>
<FormattedMessage
id='domain_pill.username'
defaultMessage='Username'
/>
</h6>
<p>
{isSelf ? (
<FormattedMessage
id='domain_pill.your_username'
defaultMessage='Your unique identifier on this server. Its possible to find users with the same username on different servers.'
/>
) : (
<FormattedMessage
id='domain_pill.their_username'
defaultMessage='Their unique identifier on their server. Its possible to find users with the same username on different servers.'
/>
)}
</p>
</div>
</div>
<div>
<div className='account__domain-pill__popout__parts__icon'>
<Icon id='' icon={GlobeIcon} />
</div>
<div>
<h6>
<FormattedMessage
id='domain_pill.server'
defaultMessage='Server'
/>
</h6>
<p>
{isSelf ? (
<FormattedMessage
id='domain_pill.your_server'
defaultMessage='Your digital home, where all of your posts live. Dont like this one? Transfer servers at any time and bring your followers, too.'
/>
) : (
<FormattedMessage
id='domain_pill.their_server'
defaultMessage='Their digital home, where all of their posts live.'
/>
)}
</p>
</div>
</div>
</div>
<p>
{isSelf ? (
<FormattedMessage
id='domain_pill.who_you_are'
defaultMessage='Because your handle says who you are and where you are, people can interact with you across the social web of <button>ActivityPub-powered platforms</button>.'
values={{
button: (x) => (
<button
onClick={handleExpandClick}
className='link-button'
>
{x}
</button>
),
}}
/>
) : (
<FormattedMessage
id='domain_pill.who_they_are'
defaultMessage='Since handles say who someone is and where they are, you can interact with people across the social web of <button>ActivityPub-powered platforms</button>.'
values={{
button: (x) => (
<button
onClick={handleExpandClick}
className='link-button'
>
{x}
</button>
),
}}
/>
)}
</p>
{expanded && (
<>
<p>
<FormattedMessage
id='domain_pill.activitypub_like_language'
defaultMessage='ActivityPub is like the language Mastodon speaks with other social networks.'
/>
</p>
<p>
<FormattedMessage
id='domain_pill.activitypub_lets_connect'
defaultMessage='It lets you connect and interact with people not just on Mastodon, but across different social apps too.'
/>
</p>
</>
)}
</div>
)}
</Overlay>
</>
);
};

View file

@ -0,0 +1,531 @@
import {
useState,
useCallback,
useRef,
useEffect,
useImperativeHandle,
forwardRef,
} from 'react';
import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
import classNames from 'classnames';
import type { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import Textarea from 'react-textarea-autosize';
import { length } from 'stringz';
// eslint-disable-next-line import/extensions
import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js';
// eslint-disable-next-line import/no-extraneous-dependencies
import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
import { showAlertForError } from 'mastodon/actions/alerts';
import { uploadThumbnail } from 'mastodon/actions/compose';
import { changeUploadCompose } from 'mastodon/actions/compose_typed';
import { Button } from 'mastodon/components/button';
import { GIFV } from 'mastodon/components/gifv';
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
import { Skeleton } from 'mastodon/components/skeleton';
import Audio from 'mastodon/features/audio';
import { CharacterCounter } from 'mastodon/features/compose/components/character_counter';
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
import Video, { getPointerPosition } from 'mastodon/features/video';
import { me } from 'mastodon/initial_state';
import type { MediaAttachment } from 'mastodon/models/media_attachment';
import { useAppSelector, useAppDispatch } from 'mastodon/store';
import { assetHost } from 'mastodon/utils/config';
const messages = defineMessages({
placeholderVisual: {
id: 'alt_text_modal.describe_for_people_with_visual_impairments',
defaultMessage: 'Describe this for people with visual impairments…',
},
placeholderHearing: {
id: 'alt_text_modal.describe_for_people_with_hearing_impairments',
defaultMessage: 'Describe this for people with hearing impairments…',
},
discardMessage: {
id: 'confirmations.discard_edit_media.message',
defaultMessage:
'You have unsaved changes to the media description or preview, discard them anyway?',
},
discardConfirm: {
id: 'confirmations.discard_edit_media.confirm',
defaultMessage: 'Discard',
},
});
const MAX_LENGTH = 1500;
type FocalPoint = [number, number];
const UploadButton: React.FC<{
children: React.ReactNode;
onSelectFile: (arg0: File) => void;
mimeTypes: string;
}> = ({ children, onSelectFile, mimeTypes }) => {
const fileRef = useRef<HTMLInputElement>(null);
const handleClick = useCallback(() => {
fileRef.current?.click();
}, []);
const handleChange = useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (file) {
onSelectFile(file);
}
},
[onSelectFile],
);
return (
<label>
<Button onClick={handleClick}>{children}</Button>
<input
id='upload-modal__thumbnail'
ref={fileRef}
type='file'
accept={mimeTypes}
onChange={handleChange}
style={{ display: 'none' }}
/>
</label>
);
};
const Preview: React.FC<{
mediaId: string;
position: FocalPoint;
onPositionChange: (arg0: FocalPoint) => void;
}> = ({ mediaId, position, onPositionChange }) => {
const media = useAppSelector((state) =>
(
(state.compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).find((x) => x.get('id') === mediaId),
);
const account = useAppSelector((state) =>
me ? state.accounts.get(me) : undefined,
);
const [dragging, setDragging] = useState(false);
const [x, y] = position;
const nodeRef = useRef<HTMLImageElement | HTMLVideoElement | null>(null);
const draggingRef = useRef<boolean>(false);
const setRef = useCallback(
(e: HTMLImageElement | HTMLVideoElement | null) => {
nodeRef.current = e;
},
[],
);
const handleMouseDown = useCallback(
(e: React.MouseEvent) => {
if (e.button !== 0) {
return;
}
const { x, y } = getPointerPosition(nodeRef.current, e);
setDragging(true);
draggingRef.current = true;
onPositionChange([x, y]);
},
[setDragging, onPositionChange],
);
const handleTouchStart = useCallback(
(e: React.TouchEvent) => {
const { x, y } = getPointerPosition(nodeRef.current, e);
setDragging(true);
draggingRef.current = true;
onPositionChange([x, y]);
},
[setDragging, onPositionChange],
);
useEffect(() => {
const handleMouseUp = () => {
setDragging(false);
draggingRef.current = false;
};
const handleMouseMove = (e: MouseEvent) => {
if (draggingRef.current) {
const { x, y } = getPointerPosition(nodeRef.current, e);
onPositionChange([x, y]);
}
};
const handleTouchEnd = () => {
setDragging(false);
draggingRef.current = false;
};
const handleTouchMove = (e: TouchEvent) => {
if (draggingRef.current) {
const { x, y } = getPointerPosition(nodeRef.current, e);
onPositionChange([x, y]);
}
};
document.addEventListener('mouseup', handleMouseUp);
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('touchend', handleTouchEnd);
document.addEventListener('touchmove', handleTouchMove);
return () => {
document.removeEventListener('mouseup', handleMouseUp);
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('touchend', handleTouchEnd);
document.removeEventListener('touchmove', handleTouchMove);
};
}, [setDragging, onPositionChange]);
if (!media) {
return null;
}
if (media.get('type') === 'image') {
return (
<div className={classNames('focal-point', { dragging })}>
<img
ref={setRef}
draggable={false}
src={media.get('url') as string}
alt=''
role='presentation'
onMouseDown={handleMouseDown}
onTouchStart={handleTouchStart}
/>
<div
className='focal-point__reticle'
style={{ top: `${y * 100}%`, left: `${x * 100}%` }}
/>
</div>
);
} else if (media.get('type') === 'gifv') {
return (
<div className={classNames('focal-point', { dragging })}>
<GIFV
ref={setRef}
src={media.get('url') as string}
alt=''
onMouseDown={handleMouseDown}
onTouchStart={handleTouchStart}
/>
<div
className='focal-point__reticle'
style={{ top: `${y * 100}%`, left: `${x * 100}%` }}
/>
</div>
);
} else if (media.get('type') === 'video') {
return (
<Video
preview={media.get('preview_url') as string}
frameRate={media.getIn(['meta', 'original', 'frame_rate']) as string}
blurhash={media.get('blurhash') as string}
src={media.get('url') as string}
detailed
inline
editable
/>
);
} else if (media.get('type') === 'audio') {
return (
<Audio
src={media.get('url') as string}
duration={media.getIn(['meta', 'original', 'duration'], 0) as number}
poster={
(media.get('preview_url') as string | undefined) ??
account?.avatar_static
}
backgroundColor={
media.getIn(['meta', 'colors', 'background']) as string
}
foregroundColor={
media.getIn(['meta', 'colors', 'foreground']) as string
}
accentColor={media.getIn(['meta', 'colors', 'accent']) as string}
editable
/>
);
} else {
return null;
}
};
interface RestoreProps {
previousDescription: string;
previousPosition: FocalPoint;
}
interface Props {
mediaId: string;
onClose: () => void;
}
interface ConfirmationMessage {
message: string;
confirm: string;
props?: RestoreProps;
}
export interface ModalRef {
getCloseConfirmationMessage: () => null | ConfirmationMessage;
}
export const AltTextModal = forwardRef<ModalRef, Props & Partial<RestoreProps>>(
({ mediaId, previousDescription, previousPosition, onClose }, ref) => {
const intl = useIntl();
const dispatch = useAppDispatch();
const media = useAppSelector((state) =>
(
(state.compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).find((x) => x.get('id') === mediaId),
);
const lang = useAppSelector(
(state) =>
(state.compose as ImmutableMap<string, unknown>).get('lang') as string,
);
const focusX =
(media?.getIn(['meta', 'focus', 'x'], 0) as number | undefined) ?? 0;
const focusY =
(media?.getIn(['meta', 'focus', 'y'], 0) as number | undefined) ?? 0;
const [description, setDescription] = useState(
previousDescription ??
(media?.get('description') as string | undefined) ??
'',
);
const [position, setPosition] = useState<FocalPoint>(
previousPosition ?? [focusX / 2 + 0.5, focusY / -2 + 0.5],
);
const [isDetecting, setIsDetecting] = useState(false);
const [isSaving, setIsSaving] = useState(false);
const dirtyRef = useRef(
previousDescription || previousPosition ? true : false,
);
const type = media?.get('type') as string;
const valid = length(description) <= MAX_LENGTH;
const handleDescriptionChange = useCallback(
(e: React.ChangeEvent<HTMLTextAreaElement>) => {
setDescription(e.target.value);
dirtyRef.current = true;
},
[setDescription],
);
const handleThumbnailChange = useCallback(
(file: File) => {
dispatch(uploadThumbnail(mediaId, file));
},
[dispatch, mediaId],
);
const handlePositionChange = useCallback(
(position: FocalPoint) => {
setPosition(position);
dirtyRef.current = true;
},
[setPosition],
);
const handleSubmit = useCallback(() => {
setIsSaving(true);
dispatch(
changeUploadCompose({
id: mediaId,
description,
focus: `${((position[0] - 0.5) * 2).toFixed(2)},${((position[1] - 0.5) * -2).toFixed(2)}`,
}),
)
.then(() => {
setIsSaving(false);
dirtyRef.current = false;
onClose();
return '';
})
.catch((err: unknown) => {
setIsSaving(false);
dispatch(showAlertForError(err));
});
}, [dispatch, setIsSaving, mediaId, onClose, position, description]);
const handleKeyUp = useCallback(
(e: React.KeyboardEvent) => {
if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {
e.preventDefault();
if (valid) {
handleSubmit();
}
}
},
[handleSubmit, valid],
);
const handleDetectClick = useCallback(() => {
setIsDetecting(true);
fetchTesseract()
.then(async ({ createWorker }) => {
const worker = await createWorker('eng', 1, {
workerPath: tesseractWorkerPath as string,
corePath: tesseractCorePath as string,
langPath: `${assetHost}/ocr/lang-data`,
cacheMethod: 'write',
});
const image = URL.createObjectURL(media?.get('file') as File);
const result = await worker.recognize(image);
setDescription(result.data.text);
setIsDetecting(false);
await worker.terminate();
return '';
})
.catch(() => {
setIsDetecting(false);
});
}, [setDescription, setIsDetecting, media]);
useImperativeHandle(
ref,
() => ({
getCloseConfirmationMessage: () => {
if (dirtyRef.current) {
return {
message: intl.formatMessage(messages.discardMessage),
confirm: intl.formatMessage(messages.discardConfirm),
props: {
previousDescription: description,
previousPosition: position,
},
};
}
return null;
},
}),
[intl, description, position],
);
return (
<div className='modal-root__modal dialog-modal'>
<div className='dialog-modal__header'>
<Button onClick={handleSubmit} disabled={!valid}>
{isSaving ? (
<LoadingIndicator />
) : (
<FormattedMessage
id='alt_text_modal.done'
defaultMessage='Done'
/>
)}
</Button>
<span className='dialog-modal__header__title'>
<FormattedMessage
id='alt_text_modal.add_alt_text'
defaultMessage='Add alt text'
/>
</span>
<Button secondary onClick={onClose}>
<FormattedMessage
id='alt_text_modal.cancel'
defaultMessage='Cancel'
/>
</Button>
</div>
<div className='dialog-modal__content'>
<div className='dialog-modal__content__preview'>
<Preview
mediaId={mediaId}
position={position}
onPositionChange={handlePositionChange}
/>
{(type === 'audio' || type === 'video') && (
<UploadButton
onSelectFile={handleThumbnailChange}
mimeTypes='image/jpeg,image/png,image/gif,image/heic,image/heif,image/webp,image/avif'
>
<FormattedMessage
id='alt_text_modal.change_thumbnail'
defaultMessage='Change thumbnail'
/>
</UploadButton>
)}
</div>
<form
className='dialog-modal__content__form simple_form'
onSubmit={handleSubmit}
>
<div className='input'>
<div className='label_input'>
<Textarea
id='description'
value={isDetecting ? ' ' : description}
onChange={handleDescriptionChange}
onKeyUp={handleKeyUp}
lang={lang}
placeholder={intl.formatMessage(
type === 'audio'
? messages.placeholderHearing
: messages.placeholderVisual,
)}
minRows={3}
disabled={isDetecting}
/>
{isDetecting && (
<div className='label_input__loading-indicator'>
<Skeleton width='100%' />
<Skeleton width='100%' />
<Skeleton width='61%' />
</div>
)}
</div>
<div className='input__toolbar'>
<button
className='link-button'
onClick={handleDetectClick}
disabled={type !== 'image' || isDetecting}
>
<FormattedMessage
id='alt_text_modal.add_text_from_image'
defaultMessage='Add text from image'
/>
</button>
<CharacterCounter
max={MAX_LENGTH}
text={isDetecting ? '' : description}
/>
</div>
</div>
</form>
</div>
</div>
);
},
);
AltTextModal.displayName = 'AltTextModal';

View file

@ -581,10 +581,14 @@ class Audio extends PureComponent {
</div>
<div className='video-player__buttons right'>
{!editable && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' icon={VisibilityOffIcon} /></button>}
<a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download>
<Icon id={'download'} icon={DownloadIcon} />
</a>
{!editable && (
<>
<button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' icon={VisibilityOffIcon} /></button>
<a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download>
<Icon id='download' icon={DownloadIcon} />
</a>
</>
)}
</div>
</div>
</div>

View file

@ -1,18 +0,0 @@
import PropTypes from 'prop-types';
import { length } from 'stringz';
export const CharacterCounter = ({ text, max }) => {
const diff = max - length(text);
if (diff < 0) {
return <span className='character-counter character-counter--over'>{diff}</span>;
}
return <span className='character-counter'>{diff}</span>;
};
CharacterCounter.propTypes = {
text: PropTypes.string.isRequired,
max: PropTypes.number.isRequired,
};

View file

@ -0,0 +1,16 @@
import { length } from 'stringz';
export const CharacterCounter: React.FC<{
text: string;
max: number;
}> = ({ text, max }) => {
const diff = max - length(text);
if (diff < 0) {
return (
<span className='character-counter character-counter--over'>{diff}</span>
);
}
return <span className='character-counter'>{diff}</span>;
};

View file

@ -332,6 +332,7 @@ class ComposeForm extends ImmutablePureComponent {
<div className='compose-form__submit'>
<Button
type='submit'
compact
text={intl.formatMessage(this.props.isEditing ? messages.saveChanges : (this.props.isInReply ? messages.reply : messages.publish))}
disabled={!this.canSubmit()}
/>

View file

@ -27,6 +27,7 @@ class LanguageDropdownMenu extends PureComponent {
static propTypes = {
value: PropTypes.string.isRequired,
guess: PropTypes.string,
frequentlyUsedLanguages: PropTypes.arrayOf(PropTypes.string).isRequired,
onClose: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired,
@ -81,14 +82,17 @@ class LanguageDropdownMenu extends PureComponent {
};
search () {
const { languages, value, frequentlyUsedLanguages } = this.props;
const { languages, value, frequentlyUsedLanguages, guess } = this.props;
const { searchValue } = this.state;
if (searchValue === '') {
return [...languages].sort((a, b) => {
// Push current selection to the top of the list
if (a[0] === value) {
if (guess && a[0] === guess) { // Push guessed language higher than current selection
return -1;
} else if (guess && b[0] === guess) {
return 1;
} else if (a[0] === value) { // Push current selection to the top of the list
return -1;
} else if (b[0] === value) {
return 1;
@ -238,6 +242,7 @@ class LanguageDropdown extends PureComponent {
static propTypes = {
value: PropTypes.string,
frequentlyUsedLanguages: PropTypes.arrayOf(PropTypes.string),
guess: PropTypes.string,
intl: PropTypes.object.isRequired,
onChange: PropTypes.func,
};
@ -281,7 +286,7 @@ class LanguageDropdown extends PureComponent {
};
render () {
const { value, intl, frequentlyUsedLanguages } = this.props;
const { value, guess, intl, frequentlyUsedLanguages } = this.props;
const { open, placement } = this.state;
const current = preloadedLanguages.find(lang => lang[0] === value) ?? [];
@ -294,7 +299,7 @@ class LanguageDropdown extends PureComponent {
onClick={this.handleToggle}
onMouseDown={this.handleMouseDown}
onKeyDown={this.handleButtonKeyDown}
className={classNames('dropdown-button', { active: open })}
className={classNames('dropdown-button', { active: open, warning: guess !== '' && guess !== value })}
>
<Icon icon={TranslateIcon} />
<span className='dropdown-button__label'>{current[2] ?? value}</span>
@ -306,6 +311,7 @@ class LanguageDropdown extends PureComponent {
<div className={`dropdown-animation language-dropdown__dropdown ${placement}`} >
<LanguageDropdownMenu
value={value}
guess={guess}
frequentlyUsedLanguages={frequentlyUsedLanguages}
onClose={this.handleClose}
onChange={this.handleChange}

View file

@ -4,16 +4,16 @@ import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import type { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import { useSortable } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import CloseIcon from '@/material-icons/400-20px/close.svg?react';
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
import {
undoUploadCompose,
initMediaEditModal,
} from 'mastodon/actions/compose';
import { undoUploadCompose } from 'mastodon/actions/compose';
import { openModal } from 'mastodon/actions/modal';
import { Blurhash } from 'mastodon/components/blurhash';
import { Icon } from 'mastodon/components/icon';
import type { MediaAttachment } from 'mastodon/models/media_attachment';
@ -27,16 +27,15 @@ export const Upload: React.FC<{
wide?: boolean;
}> = ({ id, dragging, overlay, tall, wide }) => {
const dispatch = useAppDispatch();
const media = useAppSelector(
(state) =>
state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call
.get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access
.find((item: MediaAttachment) => item.get('id') === id) as // eslint-disable-line @typescript-eslint/no-unsafe-member-access
| MediaAttachment
| undefined,
const media = useAppSelector((state) =>
(
(state.compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).find((item) => item.get('id') === id),
);
const sensitive = useAppSelector(
(state) => state.compose.get('spoiler') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('spoiler') as boolean,
);
const handleUndoClick = useCallback(() => {
@ -44,7 +43,9 @@ export const Upload: React.FC<{
}, [dispatch, id]);
const handleFocalPointClick = useCallback(() => {
dispatch(initMediaEditModal(id));
dispatch(
openModal({ modalType: 'FOCAL_POINT', modalProps: { mediaId: id } }),
);
}, [dispatch, id]);
const { attributes, listeners, setNodeRef, transform, transition } =

View file

@ -2,7 +2,11 @@ import { useState, useCallback, useMemo } from 'react';
import { useIntl, defineMessages } from 'react-intl';
import type { List } from 'immutable';
import type {
List,
Map as ImmutableMap,
List as ImmutableList,
} from 'immutable';
import type {
DragStartEvent,
@ -63,18 +67,20 @@ export const UploadForm: React.FC = () => {
const intl = useIntl();
const mediaIds = useAppSelector(
(state) =>
state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call
.get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access
.map((item: MediaAttachment) => item.get('id')) as List<string>, // eslint-disable-line @typescript-eslint/no-unsafe-member-access
(
(state.compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).map((item: MediaAttachment) => item.get('id')) as List<string>,
);
const active = useAppSelector(
(state) => state.compose.get('is_uploading') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('is_uploading') as boolean,
);
const progress = useAppSelector(
(state) => state.compose.get('progress') as number, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('progress') as number,
);
const isProcessing = useAppSelector(
(state) => state.compose.get('is_processing') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('is_processing') as boolean,
);
const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);
const sensors = useSensors(

View file

@ -2,6 +2,8 @@ import { createSelector } from '@reduxjs/toolkit';
import { Map as ImmutableMap } from 'immutable';
import { connect } from 'react-redux';
import lande from 'lande';
import { debounce } from 'lodash';
import { changeComposeLanguage } from 'mastodon/actions/compose';
@ -16,9 +18,83 @@ const getFrequentlyUsedLanguages = createSelector([
.toArray()
));
const ISO_639_MAP = {
afr: 'af', // Afrikaans
ara: 'ar', // Arabic
aze: 'az', // Azerbaijani
bel: 'be', // Belarusian
ben: 'bn', // Bengali
bul: 'bg', // Bulgarian
cat: 'ca', // Catalan
ces: 'cs', // Czech
ckb: 'ku', // Kurdish
cmn: 'zh', // Mandarin
dan: 'da', // Danish
deu: 'de', // German
ell: 'el', // Greek
eng: 'en', // English
est: 'et', // Estonian
eus: 'eu', // Basque
fin: 'fi', // Finnish
fra: 'fr', // French
hau: 'ha', // Hausa
heb: 'he', // Hebrew
hin: 'hi', // Hindi
hrv: 'hr', // Croatian
hun: 'hu', // Hungarian
hye: 'hy', // Armenian
ind: 'id', // Indonesian
isl: 'is', // Icelandic
ita: 'it', // Italian
jpn: 'ja', // Japanese
kat: 'ka', // Georgian
kaz: 'kk', // Kazakh
kor: 'ko', // Korean
lit: 'lt', // Lithuanian
mar: 'mr', // Marathi
mkd: 'mk', // Macedonian
nld: 'nl', // Dutch
nob: 'no', // Norwegian
pes: 'fa', // Persian
pol: 'pl', // Polish
por: 'pt', // Portuguese
ron: 'ro', // Romanian
run: 'rn', // Rundi
rus: 'ru', // Russian
slk: 'sk', // Slovak
spa: 'es', // Spanish
srp: 'sr', // Serbian
swe: 'sv', // Swedish
tgl: 'tl', // Tagalog
tur: 'tr', // Turkish
ukr: 'uk', // Ukrainian
vie: 'vi', // Vietnamese
};
const debouncedLande = debounce((text) => lande(text), 500, { trailing: true });
const detectedLanguage = createSelector([
state => state.getIn(['compose', 'text']),
], text => {
if (text.length > 20) {
const guesses = debouncedLande(text);
if (!guesses)
return '';
const [lang, confidence] = guesses[0];
if (confidence > 0.8) {
return ISO_639_MAP[lang];
}
}
return '';
});
const mapStateToProps = state => ({
frequentlyUsedLanguages: getFrequentlyUsedLanguages(state),
value: state.getIn(['compose', 'language']),
guess: detectedLanguage(state),
});
const mapDispatchToProps = dispatch => ({

View file

@ -69,7 +69,9 @@ export const NotificationFollow: React.FC<{
const account = notification.sampleAccountIds[0];
if (account) {
actions = <FollowButton accountId={notification.sampleAccountIds[0]} />;
actions = (
<FollowButton compact accountId={notification.sampleAccountIds[0]} />
);
additionalContent = <FollowerCount accountId={account} />;
}
}

View file

@ -28,7 +28,6 @@ export const BoostModal: React.FC<{
const intl = useIntl();
const defaultPrivacy = useAppSelector(
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
(state) => state.compose.get('default_privacy') as StatusVisibility,
);

View file

@ -1,438 +0,0 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';
import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import classNames from 'classnames';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux';
import Textarea from 'react-textarea-autosize';
import { length } from 'stringz';
// eslint-disable-next-line import/extensions
import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js';
// eslint-disable-next-line import/no-extraneous-dependencies
import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import { Button } from 'mastodon/components/button';
import { GIFV } from 'mastodon/components/gifv';
import { IconButton } from 'mastodon/components/icon_button';
import Audio from 'mastodon/features/audio';
import { CharacterCounter } from 'mastodon/features/compose/components/character_counter';
import { UploadProgress } from 'mastodon/features/compose/components/upload_progress';
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
import { me } from 'mastodon/initial_state';
import { assetHost } from 'mastodon/utils/config';
import { changeUploadCompose, uploadThumbnail, onChangeMediaDescription, onChangeMediaFocus } from '../../../actions/compose';
import Video, { getPointerPosition } from '../../video';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' },
applying: { id: 'upload_modal.applying', defaultMessage: 'Applying…' },
placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' },
chooseImage: { id: 'upload_modal.choose_image', defaultMessage: 'Choose image' },
discardMessage: { id: 'confirmations.discard_edit_media.message', defaultMessage: 'You have unsaved changes to the media description or preview, discard them anyway?' },
discardConfirm: { id: 'confirmations.discard_edit_media.confirm', defaultMessage: 'Discard' },
});
const mapStateToProps = (state, { id }) => ({
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
account: state.getIn(['accounts', me]),
isUploadingThumbnail: state.getIn(['compose', 'isUploadingThumbnail']),
description: state.getIn(['compose', 'media_modal', 'description']),
lang: state.getIn(['compose', 'language']),
focusX: state.getIn(['compose', 'media_modal', 'focusX']),
focusY: state.getIn(['compose', 'media_modal', 'focusY']),
dirty: state.getIn(['compose', 'media_modal', 'dirty']),
is_changing_upload: state.getIn(['compose', 'is_changing_upload']),
});
const mapDispatchToProps = (dispatch, { id }) => ({
onSave: (description, x, y) => {
dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` }));
},
onChangeDescription: (description) => {
dispatch(onChangeMediaDescription(description));
},
onChangeFocus: (focusX, focusY) => {
dispatch(onChangeMediaFocus(focusX, focusY));
},
onSelectThumbnail: files => {
dispatch(uploadThumbnail(id, files[0]));
},
});
const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
.replace(/\n/g, ' ')
.replace(/\*\*\*\*\*\*/g, '\n\n');
class ImageLoader extends PureComponent {
static propTypes = {
src: PropTypes.string.isRequired,
width: PropTypes.number,
height: PropTypes.number,
};
state = {
loading: true,
};
componentDidMount() {
const image = new Image();
image.addEventListener('load', () => this.setState({ loading: false }));
image.src = this.props.src;
}
render () {
const { loading } = this.state;
if (loading) {
return <canvas width={this.props.width} height={this.props.height} />;
} else {
return <img {...this.props} alt='' />;
}
}
}
class FocalPointModal extends ImmutablePureComponent {
static propTypes = {
media: ImmutablePropTypes.map.isRequired,
account: ImmutablePropTypes.record.isRequired,
isUploadingThumbnail: PropTypes.bool,
onSave: PropTypes.func.isRequired,
onChangeDescription: PropTypes.func.isRequired,
onChangeFocus: PropTypes.func.isRequired,
onSelectThumbnail: PropTypes.func.isRequired,
onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
};
state = {
dragging: false,
dirty: false,
progress: 0,
loading: true,
ocrStatus: '',
};
componentWillUnmount () {
document.removeEventListener('mousemove', this.handleMouseMove);
document.removeEventListener('mouseup', this.handleMouseUp);
}
handleMouseDown = e => {
document.addEventListener('mousemove', this.handleMouseMove);
document.addEventListener('mouseup', this.handleMouseUp);
this.updatePosition(e);
this.setState({ dragging: true });
};
handleTouchStart = e => {
document.addEventListener('touchmove', this.handleMouseMove);
document.addEventListener('touchend', this.handleTouchEnd);
this.updatePosition(e);
this.setState({ dragging: true });
};
handleMouseMove = e => {
this.updatePosition(e);
};
handleMouseUp = () => {
document.removeEventListener('mousemove', this.handleMouseMove);
document.removeEventListener('mouseup', this.handleMouseUp);
this.setState({ dragging: false });
};
handleTouchEnd = () => {
document.removeEventListener('touchmove', this.handleMouseMove);
document.removeEventListener('touchend', this.handleTouchEnd);
this.setState({ dragging: false });
};
updatePosition = e => {
const { x, y } = getPointerPosition(this.node, e);
const focusX = (x - .5) * 2;
const focusY = (y - .5) * -2;
this.props.onChangeFocus(focusX, focusY);
};
handleChange = e => {
this.props.onChangeDescription(e.target.value);
};
handleKeyDown = (e) => {
if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
this.props.onChangeDescription(e.target.value);
this.handleSubmit(e);
}
};
handleSubmit = (e) => {
e.preventDefault();
e.stopPropagation();
this.props.onSave(this.props.description, this.props.focusX, this.props.focusY);
};
getCloseConfirmationMessage = () => {
const { intl, dirty } = this.props;
if (dirty) {
return {
message: intl.formatMessage(messages.discardMessage),
confirm: intl.formatMessage(messages.discardConfirm),
};
} else {
return null;
}
};
setRef = c => {
this.node = c;
};
handleTextDetection = () => {
this._detectText();
};
_detectText = (refreshCache = false) => {
const { media } = this.props;
this.setState({ detecting: true });
fetchTesseract().then(({ createWorker }) => {
const worker = createWorker({
workerPath: tesseractWorkerPath,
corePath: tesseractCorePath,
langPath: `${assetHost}/ocr/lang-data`,
logger: ({ status, progress }) => {
if (status === 'recognizing text') {
this.setState({ ocrStatus: 'detecting', progress });
} else {
this.setState({ ocrStatus: 'preparing', progress });
}
},
cacheMethod: refreshCache ? 'refresh' : 'write',
});
let media_url = media.get('url');
if (window.URL && URL.createObjectURL) {
try {
media_url = URL.createObjectURL(media.get('file'));
} catch (error) {
console.error(error);
}
}
return (async () => {
await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
const { data: { text } } = await worker.recognize(media_url);
this.setState({ detecting: false });
this.props.onChangeDescription(removeExtraLineBreaks(text));
await worker.terminate();
})().catch((e) => {
if (refreshCache) {
throw e;
} else {
this._detectText(true);
}
});
}).catch((e) => {
console.error(e);
this.setState({ detecting: false });
});
};
handleThumbnailChange = e => {
if (e.target.files.length > 0) {
this.props.onSelectThumbnail(e.target.files);
}
};
setFileInputRef = c => {
this.fileInput = c;
};
handleFileInputClick = () => {
this.fileInput.click();
};
render () {
const { media, intl, account, onClose, isUploadingThumbnail, description, lang, focusX, focusY, dirty, is_changing_upload } = this.props;
const { dragging, detecting, progress, ocrStatus } = this.state;
const x = (focusX / 2) + .5;
const y = (focusY / -2) + .5;
const width = media.getIn(['meta', 'original', 'width']) || null;
const height = media.getIn(['meta', 'original', 'height']) || null;
const focals = ['image', 'gifv'].includes(media.get('type'));
const thumbnailable = ['audio', 'video'].includes(media.get('type'));
const previewRatio = 16/9;
const previewWidth = 200;
const previewHeight = previewWidth / previewRatio;
let descriptionLabel = null;
if (media.get('type') === 'audio') {
descriptionLabel = <FormattedMessage id='upload_form.audio_description' defaultMessage='Describe for people who are hard of hearing' />;
} else if (media.get('type') === 'video') {
descriptionLabel = <FormattedMessage id='upload_form.video_description' defaultMessage='Describe for people who are deaf, hard of hearing, blind or have low vision' />;
} else {
descriptionLabel = <FormattedMessage id='upload_form.description' defaultMessage='Describe for people who are blind or have low vision' />;
}
let ocrMessage = '';
if (ocrStatus === 'detecting') {
ocrMessage = <FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />;
} else {
ocrMessage = <FormattedMessage id='upload_modal.preparing_ocr' defaultMessage='Preparing OCR…' />;
}
return (
<div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}>
<div className='report-modal__target'>
<IconButton className='report-modal__close' title={intl.formatMessage(messages.close)} icon='times' iconComponent={CloseIcon} onClick={onClose} size={20} />
<FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' />
</div>
<div className='report-modal__container'>
<form className='report-modal__comment' onSubmit={this.handleSubmit} >
{focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>}
{thumbnailable && (
<>
<label className='setting-text-label' htmlFor='upload-modal__thumbnail'><FormattedMessage id='upload_form.thumbnail' defaultMessage='Change thumbnail' /></label>
<Button disabled={isUploadingThumbnail || !media.get('unattached')} text={intl.formatMessage(messages.chooseImage)} onClick={this.handleFileInputClick} />
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.chooseImage)}</span>
<input
id='upload-modal__thumbnail'
ref={this.setFileInputRef}
type='file'
accept='image/png,image/jpeg'
onChange={this.handleThumbnailChange}
style={{ display: 'none' }}
disabled={isUploadingThumbnail || is_changing_upload}
/>
</label>
<hr className='setting-divider' />
</>
)}
<label className='setting-text-label' htmlFor='upload-modal__description'>
{descriptionLabel}
</label>
<div className='setting-text__wrapper'>
<Textarea
id='upload-modal__description'
className='setting-text light'
value={detecting ? '…' : description}
lang={lang}
onChange={this.handleChange}
onKeyDown={this.handleKeyDown}
disabled={detecting || is_changing_upload}
autoFocus
/>
<div className='setting-text__modifiers'>
<UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={ocrMessage} />
</div>
</div>
<div className='setting-text__toolbar'>
<button
type='button'
disabled={detecting || media.get('type') !== 'image' || is_changing_upload}
className='link-button'
onClick={this.handleTextDetection}
>
<FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' />
</button>
<CharacterCounter max={1500} text={detecting ? '' : description} />
</div>
<Button
type='submit'
disabled={!dirty || detecting || isUploadingThumbnail || length(description) > 1500 || is_changing_upload}
text={intl.formatMessage(is_changing_upload ? messages.applying : messages.apply)}
/>
</form>
<div className='focal-point-modal__content'>
{focals && (
<div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
{media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />}
{media.get('type') === 'gifv' && <GIFV src={media.get('url')} key={media.get('url')} width={width} height={height} />}
<div className='focal-point__preview'>
<strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
<div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} />
</div>
<div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} />
<div className='focal-point__overlay' />
</div>
)}
{media.get('type') === 'video' && (
<Video
preview={media.get('preview_url')}
frameRate={media.getIn(['meta', 'original', 'frame_rate'])}
blurhash={media.get('blurhash')}
src={media.get('url')}
detailed
inline
editable
/>
)}
{media.get('type') === 'audio' && (
<Audio
src={media.get('url')}
duration={media.getIn(['meta', 'original', 'duration'], 0)}
height={150}
poster={media.get('preview_url') || account.get('avatar_static')}
backgroundColor={media.getIn(['meta', 'colors', 'background'])}
foregroundColor={media.getIn(['meta', 'colors', 'foreground'])}
accentColor={media.getIn(['meta', 'colors', 'accent'])}
editable
/>
)}
</div>
</div>
</div>
);
}
}
export default connect(mapStateToProps, mapDispatchToProps, null, {
forwardRef: true,
})(injectIntl(FocalPointModal, { forwardRef: true }));

View file

@ -4,6 +4,7 @@ import { PureComponent } from 'react';
import { Helmet } from 'react-helmet';
import Base from 'mastodon/components/modal_root';
import { AltTextModal } from 'mastodon/features/alt_text_modal';
import {
MuteModal,
BlockModal,
@ -43,7 +44,6 @@ import {
ConfirmLogOutModal,
ConfirmFollowToListModal,
} from './confirmation_modals';
import FocalPointModal from './focal_point_modal';
import ImageModal from './image_modal';
import MediaModal from './media_modal';
import { ModalPlaceholder } from './modal_placeholder';
@ -73,7 +73,7 @@ export const MODAL_COMPONENTS = {
'REPORT': ReportModal,
'ACTIONS': () => Promise.resolve({ default: ActionsModal }),
'EMBED': EmbedModal,
'FOCAL_POINT': () => Promise.resolve({ default: FocalPointModal }),
'FOCAL_POINT': () => Promise.resolve({ default: AltTextModal }),
'LIST_ADDER': ListAdder,
'ANTENNA_ADDER': AntennaAdder,
'CIRCLE_ADDER': CircleAdder,
@ -151,8 +151,7 @@ export default class ModalRoot extends PureComponent {
<>
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading} error={this.renderError} renderDelay={200}>
{(SpecificComponent) => {
const ref = typeof SpecificComponent !== 'function' ? this.setModalRef : undefined;
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={ref} />;
return <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={this.handleClose} ref={this.setModalRef} />;
}}
</BundleContainer>

View file

@ -16,6 +16,7 @@ const mapDispatchToProps = dispatch => ({
if (confirmationMessage) {
dispatch(
openModal({
previousModalProps: confirmationMessage.props,
modalType: 'CONFIRM',
modalProps: {
message: confirmationMessage.message,
@ -24,7 +25,8 @@ const mapDispatchToProps = dispatch => ({
modalType: undefined,
ignoreFocus: { ignoreFocus },
})),
} }),
},
}),
);
} else {
dispatch(closeModal({

View file

@ -277,9 +277,6 @@
"tabs_bar.home": "Tuis",
"tabs_bar.notifications": "Kennisgewings",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_progress.label": "Uploading…",
"video.fullscreen": "Volskerm",
"video.mute": "Klank afskakel",

View file

@ -497,21 +497,7 @@
"upload_button.label": "Puyar imachens, un vido u un fichero d'audio",
"upload_error.limit": "Limite de puyada de fichers excedido.",
"upload_error.poll": "Puyada de fichers no permitida con enqüestas.",
"upload_form.audio_description": "Describir pa personas con problemas auditivos",
"upload_form.description": "Describir pa los usuarios con dificultat visual",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar miniatura",
"upload_form.video_description": "Describir pa personas con problemas auditivos u visuals",
"upload_modal.analyzing_picture": "Analisando imachen…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.choose_image": "Triar imachen",
"upload_modal.description_placeholder": "Una rapida rabosa marrón blinca sobre lo can perezoso",
"upload_modal.detect_text": "Detectar texto d'a imachen",
"upload_modal.edit_media": "Editar multimedia",
"upload_modal.hint": "Faiga clic u arrociegue lo cerclo en a vista previa pa triar lo punto focal que siempre será a la vista en totas las miniaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Puyando...",
"upload_progress.processing": "Procesando…",
"video.close": "Zarrar video",

View file

@ -755,21 +755,7 @@
"upload_button.label": "إضافة وسائط",
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
"upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع",
"upload_form.description": "وصف للمعاقين بصريا",
"upload_form.edit": "تعديل",
"upload_form.thumbnail": "غيّر الصورة المصغرة",
"upload_form.video_description": "وصف للمعاقين بصريا أو لِذي قِصر السمع",
"upload_modal.analyzing_picture": "جارٍ فحص الصورة…",
"upload_modal.apply": "طبّق",
"upload_modal.applying": "جارٍ التطبيق…",
"upload_modal.choose_image": "اختر صورة",
"upload_modal.description_placeholder": "نصٌّ حكيمٌ لهُ سِرٌّ قاطِعٌ وَذُو شَأنٍ عَظيمٍ مكتوبٌ على ثوبٍ أخضرَ ومُغلفٌ بجلدٍ أزرق",
"upload_modal.detect_text": "اكتشف النص مِن الصورة",
"upload_modal.edit_media": "تعديل الوسائط",
"upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.",
"upload_modal.preparing_ocr": "جار إعداد OCR (تعرف ضوئي على الرموز)…",
"upload_modal.preview_label": "معاينة ({ratio})",
"upload_progress.label": "يرفع...",
"upload_progress.processing": "تتم المعالجة…",
"username.taken": "اسم المستخدم هذا مأخوذ. الرجاء محاولة اسم اخر",

View file

@ -58,6 +58,7 @@
"account.unendorse": "Dexar de destacar nel perfil",
"account.unfollow": "Dexar de siguir",
"account.unmute": "Activar los avisos de @{name}",
"account.unmute_notifications_short": "Dexar de silenciar notificaciones",
"account.unmute_short": "Activar los avisos",
"account_note.placeholder": "Calca equí p'amestar una nota",
"admin.dashboard.retention.average": "Media",
@ -70,9 +71,13 @@
"announcement.announcement": "Anunciu",
"annual_report.summary.followers.followers": "siguidores",
"annual_report.summary.new_posts.new_posts": "artículos nuevos",
"annual_report.summary.thanks": "Gracies por ser parte de Mastodon!",
"attachments_list.unprocessed": "(ensin procesar)",
"block_modal.show_less": "Amosar menos",
"block_modal.show_more": "Amosar más",
"block_modal.they_cant_mention": "Nun van poder mencionate o siguite.",
"block_modal.they_cant_see_posts": "Nun pueden ver les tos espublizaciones y tu nun podrás ver les suyes.",
"block_modal.you_wont_see_mentions": "Nun verás espublizaciones que-yos mencionen.",
"bundle_column_error.error.body": "La páxina solicitada nun se pudo renderizar. Ye posible que seya pola mor d'un fallu nel códigu o por un problema de compatibilidá del restolador.",
"bundle_column_error.error.title": "¡Oh, non!",
"bundle_column_error.network.body": "Hebo un error al tentar de cargar esta páxina. Esto pudo ser pola mor d'un problema temporal cola conexón a internet o con esti sirvidor.",
@ -116,6 +121,7 @@
"compose.language.search": "Buscar llingües…",
"compose.published.body": "Espublizóse l'artículu.",
"compose.published.open": "Abrir",
"compose.saved.body": "Post guardáu.",
"compose_form.direct_message_warning_learn_more": "Saber más",
"compose_form.encryption_warning": "Los artículos de Mastodon nun tán cifraos de puntu a puntu. Nun compartas nengún tipu d'información sensible per Mastodon.",
"compose_form.lock_disclaimer": "La to cuenta nun ye {locked}. Cualesquier perfil pue siguite pa ver los artículos que son namás pa siguidores.",
@ -512,14 +518,7 @@
"upload_area.title": "Arrastra y suelta pa xubir",
"upload_button.label": "Amestar ficheros multimedia",
"upload_error.poll": "La xuba de ficheros nun ta permitida coles encuestes.",
"upload_form.audio_description": "Describi'l conteníu pa persones sordes y/o ciegues",
"upload_form.edit": "Editar",
"upload_modal.analyzing_picture": "Analizando la semeya…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.detect_text": "Detectar el testu de la semeya",
"upload_modal.edit_media": "Edición",
"upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que siempre va tar a la vista en toles miniatures.",
"upload_progress.label": "Xubiendo…",
"upload_progress.processing": "Procesando…",
"video.close": "Zarrar el videu",

View file

@ -140,16 +140,16 @@
"column.blocks": "Заблакіраваныя карыстальнікі",
"column.bookmarks": "Закладкі",
"column.community": "Лакальная стужка",
"column.create_list": "Стварыць сьпіс",
"column.create_list": "Стварыць спіс",
"column.direct": "Асабістыя згадванні",
"column.directory": "Праглядзець профілі",
"column.domain_blocks": "Заблакіраваныя дамены",
"column.edit_list": "Рэдагаваць сьпіс",
"column.edit_list": "Рэдагаваць спіс",
"column.favourites": "Упадабанае",
"column.firehose": "Стужкі",
"column.follow_requests": "Запыты на падпіску",
"column.home": "Галоўная",
"column.list_members": "Кіраваньне карыстальнікамі сьпіса",
"column.list_members": "Кіраванне ўдзельнікамі спісу",
"column.lists": "Спісы",
"column.mutes": "Ігнараваныя карыстальнікі",
"column.notifications": "Апавяшчэнні",
@ -460,11 +460,17 @@
"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.create": "Стварыць",
"lists.create_list": "Стварыць спіс",
"lists.delete": "Выдаліць спіс",
"lists.edit": "Рэдагаваць спіс",
"lists.remove_member": "Выдаліць",
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
"lists.replies_policy.none": "Нікога",
"lists.save": "Захаваць",
"lists.search": "Пошук",
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
"loading_indicator.label": "Загрузка…",
"media_gallery.hide": "Схаваць",
@ -823,21 +829,7 @@
"upload_button.label": "Дадаць выяву, відэа- ці аўдыяфайл",
"upload_error.limit": "Перавышана колькасць файлаў.",
"upload_error.poll": "Немагчыма прымацаваць файл да апытання.",
"upload_form.audio_description": "Апісанне для людзей з парушэннямі слыху",
"upload_form.description": "Апісаць для людзей са слабым зрокам",
"upload_form.edit": "Рэдагаваць",
"upload_form.thumbnail": "Змяніць мініяцюру",
"upload_form.video_description": "Апісанне для людзей з парушэннямі зроку і слыху",
"upload_modal.analyzing_picture": "Аналіз выявы…",
"upload_modal.apply": "Ужыць",
"upload_modal.applying": "Ужываецца…",
"upload_modal.choose_image": "Выбраць выяву",
"upload_modal.description_placeholder": "У рудога вераб’я ў сховішчы пад фатэлем ляжаць нейкія гаючыя зёлкі",
"upload_modal.detect_text": "Распазнаць тэкст з выявы",
"upload_modal.edit_media": "Рэдагаваць медыя",
"upload_modal.hint": "Націсніце ці перацягніце кружок на перадпрагляд каб выбраць фокусную кропку, што заўсёды будзе бачна на мініяцюрах.",
"upload_modal.preparing_ocr": "Падрыхтоўка OCR…",
"upload_modal.preview_label": "Перадпрагляд ({ratio})",
"upload_progress.label": "Запампоўванне...",
"upload_progress.processing": "Апрацоўка…",
"username.taken": "Гэта імя карыстальніка занята. Паспрабуйце іншае",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Добавете файл с образ, видео или звук",
"upload_error.limit": "Превишено ограничението за качване на файлове.",
"upload_error.poll": "Качването на файлове не е позволено с анкети.",
"upload_form.audio_description": "Опишете за хора, които са глухи или трудно чуват",
"upload_form.description": "Опишете за хора, които са слепи или имат слабо зрение",
"upload_form.drag_and_drop.instructions": "Натиснете интервал или enter, за да подберете мултимедийно прикачване. Провлачвайки, ползвайте клавишите със стрелки, за да премествате мултимедията във всяка дадена посока. Натиснете пак интервал или enter, за да се стовари мултимедийното прикачване в новото си положение или натиснете Esc за отмяна.",
"upload_form.drag_and_drop.on_drag_cancel": "Провлачването е отменено. Мултимедийното прикачване {item} е спуснато.",
"upload_form.drag_and_drop.on_drag_end": "Мултимедийното прикачване {item} е спуснато.",
"upload_form.drag_and_drop.on_drag_over": "Мултимедийното прикачване {item} е преместено.",
"upload_form.drag_and_drop.on_drag_start": "Избрано мултимедийно прикачване {item}.",
"upload_form.edit": "Редактиране",
"upload_form.thumbnail": "Промяна на миниобраза",
"upload_form.video_description": "Опишете за хора, които са глухи или трудно чуват, слепи или имат слабо зрение",
"upload_modal.analyzing_picture": "Снимков анализ…",
"upload_modal.apply": "Прилагане",
"upload_modal.applying": "Прилагане…",
"upload_modal.choose_image": "Избор на образ",
"upload_modal.description_placeholder": "Ах, чудна българска земьо, полюшвай цъфтящи жита",
"upload_modal.detect_text": "Откриване на текст от картина",
"upload_modal.edit_media": "Промяна на мултимедия",
"upload_modal.hint": "Щракнете или плъзнете кръга на визуализацията, за да изберете фокусна точка, която винаги ще бъде видима на всички миниатюри.",
"upload_modal.preparing_ocr": "Подготовка за оптично разпознаване на знаци…",
"upload_modal.preview_label": "Нагледно ({ratio})",
"upload_progress.label": "Качване...",
"upload_progress.processing": "Обработка…",
"username.taken": "Това потребителско име е взето. Опитайте друго",

View file

@ -425,19 +425,7 @@
"upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
"upload_form.audio_description": "শ্রবণশক্তি লোকদের জন্য বর্ণনা করুন",
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
"upload_form.edit": "সম্পাদন",
"upload_form.thumbnail": "থাম্বনেল পরিবর্তন করুন",
"upload_form.video_description": "শ্রবণশক্তি হ্রাস বা চাক্ষুষ প্রতিবন্ধী ব্যক্তিদের জন্য বর্ণনা করুন",
"upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…",
"upload_modal.apply": "প্রয়োগ করুন",
"upload_modal.applying": "প্রয়োগ করা হচ্ছে…",
"upload_modal.choose_image": "ছবি নির্বাচন করুন",
"upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন",
"upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন",
"upload_modal.hint": "একটি দৃশ্যমান পয়েন্ট নির্বাচন করুন ক্লিক অথবা টানার মাধ্যমে যেটি সবময় সব থাম্বনেলে দেখা যাবে।",
"upload_modal.preview_label": "পূর্বরূপ({ratio})",
"upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...",
"video.close": "ভিডিওটি বন্ধ করতে",
"video.download": "ফাইলটি ডাউনলোড করুন",

View file

@ -595,21 +595,7 @@
"upload_button.label": "Ouzhpennañ ur media",
"upload_error.limit": "Bevenn evit pellgargañ restroù a zo distremenet.",
"upload_error.poll": "Pellgargañ restroù n'eo ket aotreet gant sontadegoù.",
"upload_form.audio_description": "Diskrivañ evit tud a zo kollet o c'hlev",
"upload_form.description": "Diskrivañ evit tud a zo kollet o gweled",
"upload_form.edit": "Kemmañ",
"upload_form.thumbnail": "Kemmañ ar velvenn",
"upload_form.video_description": "Diskrivañ evit tud a zo kollet o gweled pe o c'hlev",
"upload_modal.analyzing_picture": "O tielfennañ ar skeudenn…",
"upload_modal.apply": "Arloañ",
"upload_modal.applying": "Oc'h arloañ…",
"upload_modal.choose_image": "Dibab ur skeudenn",
"upload_modal.description_placeholder": "Ul louarn gell mibin a zo o lammat a-zioc'h ar c'hi lezirek",
"upload_modal.detect_text": "Dinoiñ testenn diouzh ar skeudenn",
"upload_modal.edit_media": "Embann ar media",
"upload_modal.hint": "Klikit pe tennit ar c'helc'h war ar rakwel evit dibab al lerc'h kengreizel a vo gwelet atav war an holl melvennoù.",
"upload_modal.preparing_ocr": "Oc'h aozañ OCR…",
"upload_modal.preview_label": "Rakwel ({ratio})",
"upload_progress.label": "O pellgargañ...",
"upload_progress.processing": "War ober…",
"username.taken": "Tapet eo an anv implijer-mañ dija. Klaskit skrivañ unan all",

View file

@ -61,8 +61,5 @@
"status.open": "Expand this status",
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_progress.label": "Uploading…"
}

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "S'ha produït un error inesperat.",
"alert.unexpected.title": "Vaja!",
"alt_text_badge.title": "Text alternatiu",
"alt_text_modal.add_alt_text": "Afegiu text alternatiu",
"alt_text_modal.add_text_from_image": "Afegiu text d'una imatge",
"alt_text_modal.cancel": "Cancel·la",
"alt_text_modal.change_thumbnail": "Canvia la miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descriu això per a persones amb problemes d'audició…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descriu això per a persones amb problemes visuals…",
"alt_text_modal.done": "Fet",
"announcement.announcement": "Anunci",
"annual_report.summary.archetype.booster": "Sempre a la moda",
"annual_report.summary.archetype.lurker": "Tot ho llegeix",
@ -875,26 +882,12 @@
"upload_button.label": "Afegeix imatges, un vídeo o un fitxer d'àudio",
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
"upload_error.poll": "No es permet carregar fitxers a les enquestes.",
"upload_form.audio_description": "Descriu-ho per a persones amb problemes d'audició",
"upload_form.description": "Descriu-ho per a persones amb problemes de visió",
"upload_form.drag_and_drop.instructions": "Per a agafar un fitxer multimèdia adjunt, premeu l'espai o la tecla Enter. Mentre l'arrossegueu, utilitzeu les fletxes per a moure l'adjunt en qualsevol direcció. Premeu espai o Enter un altre cop per a deixar-lo anar a la seva nova posició, o premeu la tecla d'escapament per cancel·lar.",
"upload_form.drag_and_drop.on_drag_cancel": "S'ha cancel·lat l'arrossegament. S'ha deixat anar l'adjunt multimèdia {item}.",
"upload_form.drag_and_drop.on_drag_end": "S'ha deixat anar l'adjunt multimèdia {item}.",
"upload_form.drag_and_drop.on_drag_over": "S'ha mogut l'adjunt multimèdia {item}.",
"upload_form.drag_and_drop.on_drag_start": "S'ha agafat l'adjunt multimèdia {item}.",
"upload_form.edit": "Edita",
"upload_form.thumbnail": "Canvia la miniatura",
"upload_form.video_description": "Descriu-ho per a persones amb problemes de visió o audició",
"upload_modal.analyzing_picture": "S'analitza la imatge…",
"upload_modal.apply": "Aplica",
"upload_modal.applying": "S'aplica…",
"upload_modal.choose_image": "Tria la imatge",
"upload_modal.description_placeholder": "Setze jutges d'un jutjat mengen fetge d'un penjat",
"upload_modal.detect_text": "Detecta el text de la imatge",
"upload_modal.edit_media": "Edita el Mèdia",
"upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per a triar el punt focal que sempre serà visible en totes les miniatures.",
"upload_modal.preparing_ocr": "Es prepara l'OCR…",
"upload_modal.preview_label": "Previsualitza ({ratio})",
"upload_progress.label": "Pujant...",
"upload_progress.processing": "En procés…",
"username.taken": "Aquest nom d'usuari ja està agafat. Prova un altre",

View file

@ -554,21 +554,7 @@
"upload_button.label": "وێنە، ڤیدیۆ یان پەیامی دەنگی زیاد بکە",
"upload_error.limit": "سنووری بەرزکردنەوەت بەزاندووە.",
"upload_error.poll": "فایل و ڕاپرسی پێکەوە ڕێپێنەدراون.",
"upload_form.audio_description": "پەیامەکەت بۆ نابیستەکان",
"upload_form.description": "پەیامەکەت بۆ نابیناکان",
"upload_form.edit": "دەستکاری",
"upload_form.thumbnail": "گۆڕانی وینۆچکە",
"upload_form.video_description": "پەیامەکەت بۆ نابیست و نابیناکان",
"upload_modal.analyzing_picture": "وێنەکە شی دەکرێتەوە…",
"upload_modal.apply": "بیسەپێنە",
"upload_modal.applying": "داواکاری…",
"upload_modal.choose_image": "وێنە هەڵبژێرە",
"upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا",
"upload_modal.detect_text": "نووسینی ناو وێنەکە دەستنیشان بکە",
"upload_modal.edit_media": "دەستکاریکردنی میدیا",
"upload_modal.hint": "گەر وێنە چکۆلە یان بڕاوەبێت، خاڵی ناوەندی دیار دەکەوێت. خاڵی ناوەندی وێنە بە کرتە یان جێبەجیکردنی رێکبخەن.",
"upload_modal.preparing_ocr": "نووسینەکە دەستنیشان دەکرێت…",
"upload_modal.preview_label": "پێشبینین ({ratio})",
"upload_progress.label": "بار دەکرێت...",
"upload_progress.processing": "جێبەجێکردن...",
"video.close": "داخستنی ڤیدیۆ",

View file

@ -333,21 +333,7 @@
"upload_button.label": "Aghjunghje un media",
"upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
"upload_form.audio_description": "Discrizzione per i ciochi",
"upload_form.description": "Discrizzione per i malvistosi",
"upload_form.edit": "Mudificà",
"upload_form.thumbnail": "Cambià vignetta",
"upload_form.video_description": "Discrizzione per i ciochi o cechi",
"upload_modal.analyzing_picture": "Analisi di u ritrattu…",
"upload_modal.apply": "Affettà",
"upload_modal.applying": "Appiegazione…",
"upload_modal.choose_image": "Cambià ritrattu",
"upload_modal.description_placeholder": "Chì tempi brevi ziu, quandu solfeghji",
"upload_modal.detect_text": "Ditettà testu da u ritrattu",
"upload_modal.edit_media": "Cambià media",
"upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.",
"upload_modal.preparing_ocr": "Priparazione di l'OCR…",
"upload_modal.preview_label": "Vista ({ratio})",
"upload_progress.label": "Caricamentu...",
"video.close": "Chjudà a video",
"video.download": "Scaricà fugliale",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Přidat obrázky, video nebo audio soubor",
"upload_error.limit": "Byl překročen limit nahraných souborů.",
"upload_error.poll": "Nahrávání souborů není povoleno s anketami.",
"upload_form.audio_description": "Popis pro sluchově postižené",
"upload_form.description": "Popis pro zrakově postižené",
"upload_form.drag_and_drop.instructions": "Chcete-li zvednout přílohu, stiskněte mezerník nebo enter. Při přetažení použijte klávesnicové šipky k přesunutí mediální přílohy v libovolném směru. Stiskněte mezerník nebo enter pro vložení přílohy do nové pozice, nebo stiskněte Esc pro ukončení.",
"upload_form.drag_and_drop.on_drag_cancel": "Přetažení bylo zrušeno. Příloha {item} byla vrácena.",
"upload_form.drag_and_drop.on_drag_end": "Příloha {item} byla vrácena.",
"upload_form.drag_and_drop.on_drag_over": "Příloha {item} byla přesunuta.",
"upload_form.drag_and_drop.on_drag_start": "Zvednuta příloha {item}.",
"upload_form.edit": "Upravit",
"upload_form.thumbnail": "Změnit miniaturu",
"upload_form.video_description": "Popis pro sluchově či zrakově postižené",
"upload_modal.analyzing_picture": "Analyzuji obrázek…",
"upload_modal.apply": "Použít",
"upload_modal.applying": "Aplikuji…",
"upload_modal.choose_image": "Vybrat obrázek",
"upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy",
"upload_modal.detect_text": "Detekovat text z obrázku",
"upload_modal.edit_media": "Upravit média",
"upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.",
"upload_modal.preparing_ocr": "Příprava OCR…",
"upload_modal.preview_label": "Náhled ({ratio})",
"upload_progress.label": "Nahrávání...",
"upload_progress.processing": "Zpracovávání…",
"username.taken": "Toto uživatelské jméno je obsazeno. Zkuste jiné",

View file

@ -874,26 +874,12 @@
"upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Wedi pasio'r uchafswm llwytho.",
"upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.",
"upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw",
"upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
"upload_form.drag_and_drop.instructions": "I godi atodiad cyfryngau, pwyswch y space neu enter. Wrth lusgo, defnyddiwch y bysellau saeth i symud yr atodiad cyfryngau i unrhyw gyfeiriad penodol. Pwyswch space neu enter eto i ollwng yr atodiad cyfryngau yn ei safle newydd, neu pwyswch escape i ddiddymu.",
"upload_form.drag_and_drop.on_drag_cancel": "Cafodd llusgo ei ddiddymu. Cafodd atodiad cyfryngau {item} ei ollwng.",
"upload_form.drag_and_drop.on_drag_end": "Cafodd atodiad cyfryngau {item} ei ollwng.",
"upload_form.drag_and_drop.on_drag_over": "Symudwyd atodiad cyfryngau {item}.",
"upload_form.drag_and_drop.on_drag_start": "Atodiad cyfryngau godwyd {item}.",
"upload_form.edit": "Golygu",
"upload_form.thumbnail": "Newid llun bach",
"upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg",
"upload_modal.analyzing_picture": "Yn dadansoddi llun…",
"upload_modal.apply": "Gosod",
"upload_modal.applying": "Yn gosod…",
"upload_modal.choose_image": "Dewis delwedd",
"upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau",
"upload_modal.detect_text": "Canfod testun o'r llun",
"upload_modal.edit_media": "Golygu cyfryngau",
"upload_modal.hint": "Cliciwch neu llusgwch y cylch ar y rhagolwg i ddewis y canolbwynt a fydd bob amser i'w weld ar bob llun bach.",
"upload_modal.preparing_ocr": "Yn paratoi OCR…",
"upload_modal.preview_label": "Rhagolwg ({ratio})",
"upload_progress.label": "Yn llwytho...",
"upload_progress.processing": "Wrthi'n prosesu…",
"username.taken": "Mae'r enw defnyddiwr hwnnw'n cael ei ddefnyddio eisoes. Rhowch gynnig ar un arall",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "En uventet fejl opstod.",
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Alt text",
"alt_text_modal.add_alt_text": "Tilføj alternativ tekst",
"alt_text_modal.add_text_from_image": "Tilføj tekst fra billede",
"alt_text_modal.cancel": "Afbryd",
"alt_text_modal.change_thumbnail": "Skift miniature",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Beskriv dette for personer med nedsat hørelse…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Beskriv dette for personer med nedsat syn…",
"alt_text_modal.done": "Færdig",
"announcement.announcement": "Bekendtgørelse",
"annual_report.summary.archetype.booster": "Cool-hunter",
"annual_report.summary.archetype.lurker": "Lurker",
@ -875,26 +882,12 @@
"upload_button.label": "Tilføj billed-, video- eller lydfil(er)",
"upload_error.limit": "Grænse for filupload nået.",
"upload_error.poll": "Filupload ikke tilladt for afstemninger.",
"upload_form.audio_description": "Beskrivelse til hørehæmmede",
"upload_form.description": "Beskrivelse til svagtseende",
"upload_form.drag_and_drop.instructions": "For at opsamle en medievedhæftning, tryk på Mellemrum eller Retur. Mens der trækkes, benyt piletasterne til at flytte medievedhæftningen i en given retning. Tryk på Mellemrum eller Retur igen for at slippe medievedhæftningen på den nye position, eller tryk på Escape for at afbryde.",
"upload_form.drag_and_drop.on_drag_cancel": "Træk blev afbrudt. Medievedhæftningen {item} blev sluppet.",
"upload_form.drag_and_drop.on_drag_end": "Medievedhæftningen {item} er sluppet.",
"upload_form.drag_and_drop.on_drag_over": "Medievedhæftningen {item} er flyttet.",
"upload_form.drag_and_drop.on_drag_start": "Opsamlede medievedhæftningen {item}.",
"upload_form.edit": "Redigér",
"upload_form.thumbnail": "Skift miniature",
"upload_form.video_description": "Beskrivelse for hørehæmmede eller synshandicappede personer",
"upload_modal.analyzing_picture": "Analyserer billede…",
"upload_modal.apply": "Anvend",
"upload_modal.applying": "Effektuerer…",
"upload_modal.choose_image": "Vælg billede",
"upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund",
"upload_modal.detect_text": "Detektér tekst i billede",
"upload_modal.edit_media": "Redigér medie",
"upload_modal.hint": "Klik eller træk cirklen i forhåndsvisningen for at vælge det fokuspunkt, der altid vil være synligt på alle miniaturer.",
"upload_modal.preparing_ocr": "Klargør OCR…",
"upload_modal.preview_label": "Forhåndsvisning ({ratio})",
"upload_progress.label": "Uploader...",
"upload_progress.processing": "Behandler…",
"username.taken": "Brugernavnet er taget. Prøv et andet",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
"alert.unexpected.title": "Oha!",
"alt_text_badge.title": "Bildbeschreibung",
"alt_text_modal.add_alt_text": "Bildbeschreibung hinzufügen",
"alt_text_modal.add_text_from_image": "Text aus Bild hinzufügen",
"alt_text_modal.cancel": "Abbrechen",
"alt_text_modal.change_thumbnail": "Vorschaubild ändern",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Beschreibe den Inhalt für Menschen mit Schwerhörigkeit …",
"alt_text_modal.describe_for_people_with_visual_impairments": "Beschreibe den Inhalt für Menschen mit Sehschwäche …",
"alt_text_modal.done": "Fertig",
"announcement.announcement": "Ankündigung",
"annual_report.summary.archetype.booster": "Trendjäger*in",
"annual_report.summary.archetype.lurker": "Beobachter*in",
@ -875,26 +882,12 @@
"upload_button.label": "Bilder, Video oder Audio hinzufügen",
"upload_error.limit": "Dateiupload-Limit überschritten.",
"upload_error.poll": "Medien-Anhänge sind zusammen mit Umfragen nicht erlaubt.",
"upload_form.audio_description": "Beschreibe für Menschen mit Hörbehinderung",
"upload_form.description": "Beschreibe für Menschen mit Sehbehinderung",
"upload_form.drag_and_drop.instructions": "Drücke zum Aufnehmen eines Medienanhangs die Eingabe- oder Leertaste. Verwende beim Ziehen die Pfeiltasten, um den Medienanhang zur gewünschten Position zu bewegen. Drücke erneut die Eingabe- oder Leertaste, um den Medienanhang an der gewünschten Position abzulegen. Mit der Escape-Taste kannst du den Vorgang abbrechen.",
"upload_form.drag_and_drop.on_drag_cancel": "Das Ziehen wurde abgebrochen und der Medienanhang {item} wurde abgelegt.",
"upload_form.drag_and_drop.on_drag_end": "Der Medienanhang {item} wurde abgelegt.",
"upload_form.drag_and_drop.on_drag_over": "Der Medienanhang {item} wurde bewegt.",
"upload_form.drag_and_drop.on_drag_start": "Der Medienanhang {item} wurde aufgenommen.",
"upload_form.edit": "Bearbeiten",
"upload_form.thumbnail": "Vorschaubild ändern",
"upload_form.video_description": "Beschreibe für Menschen mit einer Hör- oder Sehbehinderung",
"upload_modal.analyzing_picture": "Bild wird analysiert …",
"upload_modal.apply": "Übernehmen",
"upload_modal.applying": "Wird übernommen …",
"upload_modal.choose_image": "Bild auswählen",
"upload_modal.description_placeholder": "Victor jagt zwölf Boxkämpfer quer über den großen Sylter Deich",
"upload_modal.detect_text": "Text aus Bild erkennen",
"upload_modal.edit_media": "Medien bearbeiten",
"upload_modal.hint": "Ziehe den Kreis auf die Stelle deines Bildes, um den Fokuspunkt festzulegen, der bei Vorschaubildern immer zu sehen sein soll.",
"upload_modal.preparing_ocr": "Texterkennung wird vorbereitet …",
"upload_modal.preview_label": "Vorschau ({ratio})",
"upload_progress.label": "Wird hochgeladen …",
"upload_progress.processing": "Wird verarbeitet…",
"username.taken": "Dieser Profilname ist vergeben. Versuche einen anderen",

View file

@ -873,26 +873,12 @@
"upload_button.label": "Πρόσθεσε εικόνες, ένα βίντεο ή ένα αρχείο ήχου",
"upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
"upload_form.description": "Περιγραφή για άτομα με προβλήματα όρασης",
"upload_form.drag_and_drop.instructions": "Για να επιλέξετε ένα συνημμένο αρχείο πολυμέσων, πατήστε το Space ή το Enter. Ενώ το σέρνετε, χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε το συνημμένο αρχείο πολυμέσων προς οποιαδήποτε κατεύθυνση. Πατήστε ξανά το Space ή το Enter για να αποθέσετε το συνημμένο αρχείο πολυμέσων στη νέα του θέση ή πατήστε το Escape για ακύρωση.",
"upload_form.drag_and_drop.on_drag_cancel": "Η μετακίνηση ακυρώθηκε. Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».",
"upload_form.drag_and_drop.on_drag_end": "Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».",
"upload_form.drag_and_drop.on_drag_over": "Έγινε μετακίνηση του συνημμένου αρχείου πολυμέσων «{item}».",
"upload_form.drag_and_drop.on_drag_start": "Έγινε επιλογή του συνημμένου αρχείου πολυμέσων «{item}».",
"upload_form.edit": "Επεξεργασία",
"upload_form.thumbnail": "Αλλαγή μικρογραφίας",
"upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης",
"upload_modal.analyzing_picture": "Ανάλυση εικόνας…",
"upload_modal.apply": "Εφαρμογή",
"upload_modal.applying": "Εφαρμογή…",
"upload_modal.choose_image": "Επιλογή εικόνας",
"upload_modal.description_placeholder": "Αρνάκι άσπρο και παχύ της μάνας του καμάρι",
"upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα",
"upload_modal.edit_media": "Επεξεργασία Πολυμέσων",
"upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.",
"upload_modal.preparing_ocr": "Προετοιμασία αναγνώρισης κειμένου…",
"upload_modal.preview_label": "Προεπισκόπηση ({ratio})",
"upload_progress.label": "Μεταφόρτωση...",
"upload_progress.processing": "Επεξεργασία…",
"username.taken": "Αυτό το όνομα χρήστη χρησιμοποιείται. Δοκίμασε ένα άλλο",

View file

@ -103,6 +103,7 @@
"annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag",
"annual_report.summary.most_used_hashtag.none": "None",
"annual_report.summary.new_posts.new_posts": "new posts",
"annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of {domain} users.</bottomLabel>",
"annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.",
"annual_report.summary.thanks": "Thanks for being part of Mastodon!",
"attachments_list.unprocessed": "(unprocessed)",
@ -128,6 +129,7 @@
"bundle_column_error.routing.body": "The requested page could not be found. Are you sure the URL in the address bar is correct?",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Close",
"bundle_modal_error.message": "Something went wrong while loading this screen.",
"bundle_modal_error.retry": "Try again",
"closed_registrations.other_server_instructions": "Since Mastodon is decentralised, you can create an account on another server and still interact with this one.",
"closed_registrations_modal.description": "Creating an account on {domain} is currently not possible, but please keep in mind that you do not need an account specifically on {domain} to use Mastodon.",
@ -203,6 +205,9 @@
"confirmations.edit.confirm": "Edit",
"confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.edit.title": "Overwrite post?",
"confirmations.follow_to_list.confirm": "Follow and add to list",
"confirmations.follow_to_list.message": "You need to be following {name} to add them to a list.",
"confirmations.follow_to_list.title": "Follow user?",
"confirmations.logout.confirm": "Log out",
"confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.logout.title": "Log out?",
@ -234,6 +239,10 @@
"disabled_account_banner.text": "Your account {disabledAccount} is currently disabled.",
"dismissable_banner.community_timeline": "These are the most recent public posts from people whose accounts are hosted by {domain}.",
"dismissable_banner.dismiss": "Dismiss",
"dismissable_banner.explore_links": "These news stories are being shared the most on the Fediverse today. Newer news stories posted by more different people are ranked higher.",
"dismissable_banner.explore_statuses": "These posts from across the Fediverse are gaining traction today. Newer posts with more boosts and favourites are ranked higher.",
"dismissable_banner.explore_tags": "These hashtags are gaining traction on the Fediverse today. Hashtags that are used by more different people are ranked higher.",
"dismissable_banner.public_timeline": "These are the most recent public posts from people on the Fediverse that people on {domain} follow.",
"domain_block_modal.block": "Block server",
"domain_block_modal.block_account_instead": "Block @{name} instead",
"domain_block_modal.they_can_interact_with_old_posts": "People from this server can interact with your old posts.",
@ -353,8 +362,10 @@
"footer.privacy_policy": "Privacy policy",
"footer.source_code": "View source code",
"footer.status": "Status",
"footer.terms_of_service": "Terms of service",
"generic.saved": "Saved",
"getting_started.heading": "Getting started",
"hashtag.admin_moderation": "Open moderation interface for #{name}",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}",
@ -396,6 +407,13 @@
"ignore_notifications_modal.not_followers_title": "Ignore notifications from people not following you?",
"ignore_notifications_modal.not_following_title": "Ignore notifications from people you don't follow?",
"ignore_notifications_modal.private_mentions_title": "Ignore notifications from unsolicited Private Mentions?",
"interaction_modal.action.favourite": "To continue, you need to favourite from your account.",
"interaction_modal.action.follow": "To continue, you need to follow from your account.",
"interaction_modal.action.reblog": "To continue, you need to reblog from your account.",
"interaction_modal.action.reply": "To continue, you need to reply from your account.",
"interaction_modal.action.vote": "To continue, you need to vote from your account.",
"interaction_modal.go": "Go",
"interaction_modal.no_account_yet": "Don't have an account yet?",
"interaction_modal.on_another_server": "On a different server",
"interaction_modal.on_this_server": "On this server",
"interaction_modal.title.favourite": "Favourite {name}'s post",
@ -403,6 +421,7 @@
"interaction_modal.title.reblog": "Boost {name}'s post",
"interaction_modal.title.reply": "Reply to {name}'s post",
"interaction_modal.title.vote": "Vote in {name}'s poll",
"interaction_modal.username_prompt": "E.g. {example}",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
@ -438,6 +457,7 @@
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "Show/hide media",
"keyboard_shortcuts.toot": "to start a brand new post",
"keyboard_shortcuts.translate": "to translate a post",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "Move up in the list",
"lightbox.close": "Close",
@ -474,6 +494,7 @@
"lists.replies_policy.list": "Members of the list",
"lists.replies_policy.none": "No one",
"lists.save": "Save",
"lists.search": "Search",
"lists.show_replies_to": "Include replies from list members to",
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"loading_indicator.label": "Loading…",
@ -527,6 +548,8 @@
"notification.annual_report.view": "View #Wrapstodon",
"notification.favourite": "{name} favourited your post",
"notification.favourite.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> favourited your post",
"notification.favourite_pm": "{name} favourited your private mention",
"notification.favourite_pm.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> favourited your private mention",
"notification.follow": "{name} followed you",
"notification.follow.name_and_others": "{name} and <a>{count, plural, one {# other} other {# others}}</a> followed you",
"notification.follow_request": "{name} has requested to follow you",
@ -673,6 +696,8 @@
"privacy_policy.title": "Privacy Policy",
"recommended": "Recommended",
"refresh": "Refresh",
"regeneration_indicator.please_stand_by": "Please stand by.",
"regeneration_indicator.preparing_your_home_feed": "Preparing your home feed…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
@ -756,8 +781,11 @@
"search_results.accounts": "Profiles",
"search_results.all": "All",
"search_results.hashtags": "Hashtags",
"search_results.no_results": "No results.",
"search_results.no_search_yet": "Try searching for posts, profiles or hashtags.",
"search_results.see_all": "See all",
"search_results.statuses": "Posts",
"search_results.title": "Search for \"{q}\"",
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:",
@ -809,6 +837,7 @@
"status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.remove_favourite": "Remove from favourites",
"status.replied_in_thread": "Replied in thread",
"status.replied_to": "Replied to {name}",
"status.reply": "Reply",
@ -830,6 +859,7 @@
"subscribed_languages.target": "Change subscribed languages for {target}",
"tabs_bar.home": "Home",
"tabs_bar.notifications": "Notifications",
"terms_of_service.title": "Terms of Service",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
@ -845,26 +875,12 @@
"upload_button.label": "Add images, a video or an audio file",
"upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people who are deaf or hard of hearing",
"upload_form.description": "Describe for people who are blind or have low vision",
"upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.",
"upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.",
"upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.",
"upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.",
"upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.",
"upload_form.edit": "Edit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
"upload_modal.analyzing_picture": "Analysing picture…",
"upload_modal.apply": "Apply",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "Choose image",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading…",
"upload_progress.processing": "Processing…",
"username.taken": "That username is taken. Try another",

View file

@ -99,6 +99,13 @@
"alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!",
"alt_text_badge.title": "Alt text",
"alt_text_modal.add_alt_text": "Add alt text",
"alt_text_modal.add_text_from_image": "Add text from image",
"alt_text_modal.cancel": "Cancel",
"alt_text_modal.change_thumbnail": "Change thumbnail",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Describe this for people with hearing impairments…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Describe this for people with visual impairments…",
"alt_text_modal.done": "Done",
"announcement.announcement": "Announcement",
"annual_report.summary.archetype.booster": "The cool-hunter",
"annual_report.summary.archetype.lurker": "The lurker",
@ -1091,26 +1098,12 @@
"upload_button.label": "Add images, a video or an audio file",
"upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people who are deaf or hard of hearing",
"upload_form.description": "Describe for people who are blind or have low vision",
"upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.",
"upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.",
"upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.",
"upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.",
"upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.",
"upload_form.edit": "Edit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
"upload_modal.analyzing_picture": "Analyzing picture…",
"upload_modal.apply": "Apply",
"upload_modal.applying": "Applying…",
"upload_modal.choose_image": "Choose image",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preparing_ocr": "Preparing OCR…",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...",
"upload_progress.processing": "Processing…",
"username.taken": "That username is taken. Try another",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Neatendita eraro okazis.",
"alert.unexpected.title": "Aj!",
"alt_text_badge.title": "Alt-teksto",
"alt_text_modal.add_alt_text": "Aldoni alttekston",
"alt_text_modal.add_text_from_image": "Aldoni tekston de bildo",
"alt_text_modal.cancel": "Nuligi",
"alt_text_modal.change_thumbnail": "Ŝanĝi bildeton",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Priskribi ĉi tion por homoj kun aŭdmalkapabloj…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Priskribi ĉi tion por homoj kun vidaj malkapabloj…",
"alt_text_modal.done": "Farita",
"announcement.announcement": "Anonco",
"annual_report.summary.archetype.booster": "La Ĉasanto de Mojoso",
"annual_report.summary.archetype.lurker": "La vidanto",
@ -875,26 +882,12 @@
"upload_button.label": "Aldonu bildojn, filmeton aŭ sondosieron",
"upload_error.limit": "Limo de dosiera alŝutado transpasita.",
"upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.",
"upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi",
"upload_form.description": "Priskribi por personoj, kiuj estas blindaj aŭ havas vidmalsufiĉon",
"upload_form.drag_and_drop.instructions": "Por preni amaskomunikilaron aldonaĵon, premu spacoklavon aŭ enen-klavon. Dum trenado, uzu la sagoklavojn por movi la amaskomunikilaron aldonaĵon en iu ajn direkto. Premu spacoklavon aŭ enen-klavon denove por faligi la amaskomunikilaron aldonaĵon en ĝia nova pozicio, aŭ premu eskapan klavon por nuligi.",
"upload_form.drag_and_drop.on_drag_cancel": "Trenado estis nuligita. Amaskomunikila aldonaĵo {item} estis forigita.",
"upload_form.drag_and_drop.on_drag_end": "Amaskomunikila aldonaĵo {item} estis forigita.",
"upload_form.drag_and_drop.on_drag_over": "Amaskomunikila aldonaĵo {item} estis movita.",
"upload_form.drag_and_drop.on_drag_start": "Prenis amaskomunikilan aldonaĵon {item}.",
"upload_form.edit": "Redakti",
"upload_form.thumbnail": "Ŝanĝi etigita bildo",
"upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi",
"upload_modal.analyzing_picture": "Bilda analizado…",
"upload_modal.apply": "Apliki",
"upload_modal.applying": "Apliki…",
"upload_modal.choose_image": "Elekti bildon",
"upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj",
"upload_modal.detect_text": "Detekti tekston de la bildo",
"upload_modal.edit_media": "Redakti la plurmedion",
"upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.",
"upload_modal.preparing_ocr": "Preparante OSR…",
"upload_modal.preview_label": "Antaŭvido ({ratio})",
"upload_progress.label": "Alŝutante...",
"upload_progress.processing": "Traktante…",
"username.taken": "La uzantnomo estas jam posedita. Provu alion",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Ocurrió un error.",
"alert.unexpected.title": "¡Epa!",
"alt_text_badge.title": "Texto alternativo",
"alt_text_modal.add_alt_text": "Agregar texto alternativo",
"alt_text_modal.add_text_from_image": "Agregar texto a partir de la imagen",
"alt_text_modal.cancel": "Cancelar",
"alt_text_modal.change_thumbnail": "Cambiar miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Describí esto para personas con dificultades auditivas…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Describí esto para personas con dificultades visuales…",
"alt_text_modal.done": "Listo",
"announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "Corrió la voz",
"annual_report.summary.archetype.lurker": "El acechador",
@ -814,7 +821,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 {# voto} other {# votos}}",
"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}",
@ -875,26 +882,12 @@
"upload_button.label": "Agregá imágenes, o un archivo de audio o video",
"upload_error.limit": "Se excedió el límite de subida de archivos.",
"upload_error.poll": "No se permite la subida de archivos en encuestas.",
"upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas",
"upload_form.description": "Agregá una descripción para personas con dificultades visuales",
"upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsá la barra espaciadora o la tecla Enter. Mientras arrastrás, usá las teclas de flecha para mover el archivo multimedia en cualquier dirección. Volvé a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsá la tecla Escape para cancelar.",
"upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.",
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue soltado.",
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.",
"upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar miniatura",
"upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales",
"upload_modal.analyzing_picture": "Analizando imagen…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.choose_image": "Elegir imagen",
"upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.",
"upload_modal.detect_text": "Detectar texto de la imagen",
"upload_modal.edit_media": "Editar medio",
"upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Previsualización ({ratio})",
"upload_progress.label": "Subiendo...",
"upload_progress.processing": "Procesando…",
"username.taken": "Ese nombre de usuario está ocupado. Probá con otro",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!",
"alt_text_badge.title": "Texto alternativo",
"alt_text_modal.add_alt_text": "Añadir texto alternativo",
"alt_text_modal.add_text_from_image": "Añadir texto de la imagen",
"alt_text_modal.cancel": "Cancelar",
"alt_text_modal.change_thumbnail": "Cambiar miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Describe esto para personas con discapacidad auditiva…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Describe esto para personas con discapacidad visual…",
"alt_text_modal.done": "Hecho",
"announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "El cazador de tendencias",
"annual_report.summary.archetype.lurker": "El merodeador",
@ -875,26 +882,12 @@
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "Subida de archivos no permitida con encuestas.",
"upload_form.audio_description": "Describir para personas con problemas auditivos",
"upload_form.description": "Describir para los usuarios con dificultad visual",
"upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.",
"upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.",
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.",
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.",
"upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar miniatura",
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
"upload_modal.analyzing_picture": "Analizando imagen…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.choose_image": "Elegir imagen",
"upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso",
"upload_modal.detect_text": "Detectar texto de la imagen",
"upload_modal.edit_media": "Editar multimedia",
"upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Subiendo…",
"upload_progress.processing": "Procesando…",
"username.taken": "Ese nombre de usuario está ocupado. Prueba con otro",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "¡Ups!",
"alt_text_badge.title": "Texto alternativo",
"alt_text_modal.add_alt_text": "Añadir texto alternativo",
"alt_text_modal.add_text_from_image": "Añadir texto a partir de la imagen",
"alt_text_modal.cancel": "Cancelar",
"alt_text_modal.change_thumbnail": "Cambiar miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descríbelo para personas con deficiencias auditivas…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descríbelo para personas con discapacidad visual…",
"alt_text_modal.done": "Hecho",
"announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "El cazador de tendencias",
"annual_report.summary.archetype.lurker": "El acechador",
@ -875,26 +882,12 @@
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Límite de subida de archivos excedido.",
"upload_error.poll": "No se permite la subida de archivos con encuestas.",
"upload_form.audio_description": "Describir para personas con problemas auditivos",
"upload_form.description": "Describir para personas con discapacidad visual",
"upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.",
"upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.",
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.",
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.",
"upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar miniatura",
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
"upload_modal.analyzing_picture": "Analizando imagen…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.choose_image": "Elegir imagen",
"upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso",
"upload_modal.detect_text": "Detectar texto de la imagen",
"upload_modal.edit_media": "Editar multimedia",
"upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Subiendo…",
"upload_progress.processing": "Procesando…",
"username.taken": "Ese nombre de usuario ya está en uso. Prueba con otro",

View file

@ -864,26 +864,12 @@
"upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Faili üleslaadimise limiit ületatud.",
"upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.",
"upload_form.audio_description": "Kirjelda kuulmispuudega inimeste jaoks",
"upload_form.description": "Kirjelda vaegnägijatele",
"upload_form.drag_and_drop.instructions": "Vajuta tühikut või enterit, et tõsta manus. Lohistamise ajal kasuta nooleklahve, et manust liigutada teatud suunas. Vajuta tühikut või enterit uuesti, et paigutada manus oma uuele kohale, või escape tühistamiseks.",
"upload_form.drag_and_drop.on_drag_cancel": "Lohistamine tühistati. Manus {item} on asetatud.",
"upload_form.drag_and_drop.on_drag_end": "Manus {item} on asetatud.",
"upload_form.drag_and_drop.on_drag_over": "Manus {item} on liigutatud.",
"upload_form.drag_and_drop.on_drag_start": "Tõstetud on manus {item}.",
"upload_form.edit": "Muuda",
"upload_form.thumbnail": "Muuda pisipilti",
"upload_form.video_description": "Kirjelda kuulmis- või nägemispuudega inimeste jaoks",
"upload_modal.analyzing_picture": "Analüüsime pilti…",
"upload_modal.apply": "Rakenda",
"upload_modal.applying": "Rakendan…",
"upload_modal.choose_image": "Vali pilt",
"upload_modal.description_placeholder": "Kiire pruun rebane hüppab üle laisa koera",
"upload_modal.detect_text": "Tuvasta teksti pildilt",
"upload_modal.edit_media": "Muuda meediat",
"upload_modal.hint": "Vajuta või tõmba ringi eelvaatel, et valida fookuspunkti, mis on alati nähtaval kõikidel eelvaadetel.",
"upload_modal.preparing_ocr": "Valmistan masinlugemist…",
"upload_modal.preview_label": "Eelvaade ({ratio})",
"upload_progress.label": "Laeb üles....",
"upload_progress.processing": "Töötlen…",
"username.taken": "See kasutajanimi on juba kasutusel. Proovi teist",

View file

@ -87,6 +87,16 @@
"alert.unexpected.title": "Ene!",
"alt_text_badge.title": "Testu alternatiboa",
"announcement.announcement": "Iragarpena",
"annual_report.summary.followers.followers": "jarraitzaileak",
"annual_report.summary.followers.total": "{count} guztira",
"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",
"annual_report.summary.most_used_app.most_used_app": "app erabiliena",
"annual_report.summary.most_used_hashtag.most_used_hashtag": "traola erabiliena",
"annual_report.summary.most_used_hashtag.none": "Bat ere ez",
"annual_report.summary.new_posts.new_posts": "bidalketa berriak",
"annual_report.summary.thanks": "Eskerrik asko Mastodonen parte izateagatik!",
"attachments_list.unprocessed": "(prozesatu gabe)",
"audio.hide": "Ezkutatu audioa",
"block_modal.remote_users_caveat": "{domain} zerbitzariari zure erabakia errespeta dezan eskatuko diogu. Halere, araua beteko den ezin da bermatu, zerbitzari batzuk modu desberdinean kudeatzen baitituzte blokeoak. Baliteke argitalpen publikoak saioa hasi ez duten erabiltzaileentzat ikusgai egotea.",
@ -120,13 +130,16 @@
"column.blocks": "Blokeatutako erabiltzaileak",
"column.bookmarks": "Laster-markak",
"column.community": "Denbora-lerro lokala",
"column.create_list": "Sortu zerrenda",
"column.direct": "Aipamen pribatuak",
"column.directory": "Arakatu profilak",
"column.domain_blocks": "Ezkutatutako domeinuak",
"column.edit_list": "Editatu zerrenda",
"column.favourites": "Gogokoak",
"column.firehose": "Zuzeneko jarioak",
"column.follow_requests": "Jarraitzeko eskaerak",
"column.home": "Hasiera",
"column.list_members": "Kudeatu zerrrendako partaideak",
"column.lists": "Zerrendak",
"column.mutes": "Mutututako erabiltzaileak",
"column.notifications": "Jakinarazpenak",
@ -139,6 +152,7 @@
"column_header.pin": "Finkatu",
"column_header.show_settings": "Erakutsi ezarpenak",
"column_header.unpin": "Desfinkatu",
"column_search.cancel": "Utzi",
"column_subheading.settings": "Ezarpenak",
"community.column_settings.local_only": "Lokala soilik",
"community.column_settings.media_only": "Edukiak soilik",
@ -157,6 +171,7 @@
"compose_form.poll.duration": "Inkestaren iraupena",
"compose_form.poll.multiple": "Aukera aniza",
"compose_form.poll.option_placeholder": "{number}. aukera",
"compose_form.poll.single": "Aukera bakarra",
"compose_form.poll.switch_to_multiple": "Aldatu inkesta hainbat aukera onartzeko",
"compose_form.poll.switch_to_single": "Aldatu inkesta aukera bakarra onartzeko",
"compose_form.poll.type": "Estiloa",
@ -198,6 +213,7 @@
"confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?",
"content_warning.hide": "Tuta ezkutatu",
"content_warning.show": "Erakutsi hala ere",
"content_warning.show_more": "Erakutsi gehiago",
"conversation.delete": "Ezabatu elkarrizketa",
"conversation.mark_as_read": "Markatu irakurrita bezala",
"conversation.open": "Ikusi elkarrizketa",
@ -298,6 +314,7 @@
"filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria",
"filter_modal.select_filter.title": "Iragazi bidalketa hau",
"filter_modal.title.status": "Iragazi bidalketa bat",
"filter_warning.matches_filter": "“<span>{title}</span>” iragazkiarekin bat dator",
"filtered_notifications_banner.pending_requests": "Ezagutu dezakezun {count, plural, =0 {inoren} one {pertsona baten} other {# pertsonen}}",
"filtered_notifications_banner.title": "Iragazitako jakinarazpenak",
"firehose.all": "Guztiak",
@ -329,8 +346,10 @@
"footer.privacy_policy": "Pribatutasun politika",
"footer.source_code": "Ikusi iturburu kodea",
"footer.status": "Egoera",
"footer.terms_of_service": "Erabilera baldintzak",
"generic.saved": "Gordea",
"getting_started.heading": "Menua",
"hashtag.admin_moderation": "#{name}-(r)en moderazio-interfazea ireki",
"hashtag.column_header.tag_mode.all": "eta {osagarria}",
"hashtag.column_header.tag_mode.any": "edo {osagarria}",
"hashtag.column_header.tag_mode.none": "gabe {osagarria}",
@ -372,12 +391,15 @@
"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?",
"interaction_modal.go": "Joan",
"interaction_modal.no_account_yet": "Ez al duzu konturik oraindik?",
"interaction_modal.on_another_server": "Beste zerbitzari batean",
"interaction_modal.on_this_server": "Zerbitzari honetan",
"interaction_modal.title.favourite": "Egin gogoko {name}(r)en bidalketa",
"interaction_modal.title.follow": "Jarraitu {name}(r)i",
"interaction_modal.title.reblog": "Bultzatu {name}(r)en bidalketa",
"interaction_modal.title.reply": "Erantzun {name}(r)en bidalketari",
"interaction_modal.username_prompt": "Adib. {example}",
"intervals.full.days": "{number, plural, one {egun #} other {# egun}}",
"intervals.full.hours": "{number, plural, one {ordu #} other {# ordu}}",
"intervals.full.minutes": "{number, plural, one {minutu #} other {# minutu}}",
@ -423,7 +445,13 @@
"link_preview.author": "Egilea: {name}",
"link_preview.more_from_author": "{name} erabiltzaileaz gehiago jakin",
"link_preview.shares": "{count, plural, one {{counter} bidalketa} other {{counter} bidalketa}}",
"lists.add_member": "Gehitu",
"lists.add_to_list": "Gehitu zerrendara",
"lists.add_to_lists": "Gehitu {name} zerrendetara",
"lists.create": "Sortu",
"lists.create_list": "Sortu zerrenda",
"lists.delete": "Ezabatu zerrenda",
"lists.done": "Egina",
"lists.edit": "Editatu zerrenda",
"lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
"lists.replies_policy.list": "Zerrendako kideak",
@ -576,7 +604,11 @@
"notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak",
"notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.",
"notifications_permission_banner.title": "Ez galdu ezer inoiz",
"onboarding.follows.back": "Atzera",
"onboarding.follows.done": "Egina",
"onboarding.follows.empty": "Zoritxarrez, ezin da emaitzik erakutsi orain. Bilaketa erabil dezakezu edo Arakatu orrian jendea bilatu jarraitzeko, edo saiatu geroago.",
"onboarding.follows.search": "Bilatu",
"onboarding.follows.title": "Jarraitu jendea hasteko",
"onboarding.profile.discoverable": "Profila aurkitzeko moduan jarri",
"onboarding.profile.discoverable_hint": "Mastodon zure profila aurkitzeko moduan duzunean, zure mezuak bilaketa-emaitzetan eta jarraipenetan ager daitezke, eta zure profila antzeko interesa duen jendeari iradoki ahal zaio.",
"onboarding.profile.display_name": "Bistaratzeko izena",
@ -615,6 +647,7 @@
"recommended": "Gomendatua",
"refresh": "Berritu",
"regeneration_indicator.please_stand_by": "Itxaron, mesedez.",
"regeneration_indicator.preparing_your_home_feed": "Zure hasierako jarioa prestatzen…",
"relative_time.days": "{number}e",
"relative_time.full.days": "Duela {number, plural, one {egun #} other {# egun}}",
"relative_time.full.hours": "Duela {number, plural, one {ordu #} other {# ordu}}",
@ -698,6 +731,7 @@
"search_results.accounts": "Profilak",
"search_results.all": "Guztiak",
"search_results.hashtags": "Traolak",
"search_results.no_results": "Emaitzarik ez.",
"search_results.see_all": "Ikusi guztiak",
"search_results.statuses": "Bidalketak",
"server_banner.about_active_users": "Azken 30 egunetan zerbitzari hau erabili duen jendea (hilabeteko erabiltzaile aktiboak)",
@ -787,21 +821,7 @@
"upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Fitxategi igoera muga gaindituta.",
"upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.",
"upload_form.audio_description": "Deskribatu entzumen galera duten pertsonentzat",
"upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat",
"upload_form.edit": "Editatu",
"upload_form.thumbnail": "Aldatu koadro txikia",
"upload_form.video_description": "Deskribatu entzumen galera edo ikusmen urritasuna duten pertsonentzat",
"upload_modal.analyzing_picture": "Irudia aztertzen…",
"upload_modal.apply": "Aplikatu",
"upload_modal.applying": "Aplikatzen…",
"upload_modal.choose_image": "Aukeratu irudia",
"upload_modal.description_placeholder": "Vaudeville itxurako filmean yogi ñaño bat jipoitzen dute Quebec-en whiski truk",
"upload_modal.detect_text": "Antzeman testua iruditik",
"upload_modal.edit_media": "Editatu media",
"upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.",
"upload_modal.preparing_ocr": "OCR prestatzen…",
"upload_modal.preview_label": "Aurreikusi ({ratio})",
"upload_progress.label": "Igotzen...",
"upload_progress.processing": "Prozesatzen…",
"username.taken": "Erabiltzailea hartuta dago. Saiatu beste batekin",

View file

@ -86,6 +86,13 @@
"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.describe_for_people_with_hearing_impairments": "شرح برای افرادی با مشکلات شنوایی…",
"alt_text_modal.describe_for_people_with_visual_impairments": "شرح برای افرادی با مشکلات بینایی…",
"alt_text_modal.done": "انجام شد",
"announcement.announcement": "اعلامیه",
"annual_report.summary.archetype.booster": "باحال‌یاب",
"annual_report.summary.archetype.lurker": "کم‌پیدا",
@ -98,6 +105,7 @@
"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_hashtag.none": "هیچ‌کدام",
@ -456,6 +464,7 @@
"keyboard_shortcuts.toggle_hidden": "نمایش/نهفتن نوشتهٔ پشت هشدار محتوا",
"keyboard_shortcuts.toggle_sensitivity": "نمایش/نهفتن رسانه",
"keyboard_shortcuts.toot": "شروع یک فرستهٔ جدید",
"keyboard_shortcuts.translate": "برای ترجمه یک پست",
"keyboard_shortcuts.unfocus": "برداشتن تمرکز از ناحیهٔ نوشتن یا جست‌وجو",
"keyboard_shortcuts.up": "بالا بردن در سیاهه",
"lightbox.close": "بستن",
@ -536,6 +545,9 @@
"navigation_bar.security": "امنیت",
"not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.",
"notification.admin.report": "{name}، {target} را گزارش داد",
"notification.admin.report_account": "{name} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد",
"notification.admin.report_account_other": "{name} {count, plural, one {یک پست} other {پست}} از {target} را گزارش داد",
"notification.admin.report_statuses": "{name} {target} برای {category} را گزارش داد",
"notification.admin.report_statuses_other": "{name}، {target} را گزارش داد",
"notification.admin.sign_up": "{name} ثبت نام کرد",
"notification.admin.sign_up.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} ثبت‌نام کردند",
@ -544,6 +556,7 @@
"notification.favourite": "{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_and_others": "{name} و <a>{count, plural, other {#}} نفر دیگر</a> پیتان گرفتند",
"notification.follow_request": "{name} درخواست پی‌گیریتان را داد",
@ -569,16 +582,21 @@
"notification.reblog.name_and_others_with_link": "{name} و <a>{count, plural, one {# نفر دیگر} 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.learn_more": "بیشتر بدانید",
"notification.relationships_severance_event.user_domain_block": "شما {target} را مسدود کرده‌اید، {followersCount} از دنبال‌کنندگان خود و {followingCount, plural, one {حساب} other {حساب}} که دنبال می‌کنید را حذف کرده‌اید.",
"notification.status": "{name} چیزی فرستاد",
"notification.update": "{name} فرسته‌ای را ویرایش کرد",
"notification_requests.accept": "پذیرش",
"notification_requests.accept_multiple": "{count, plural, one {پذیرش درخواست…} other {پذیرش درخواست‌ها…}}",
"notification_requests.confirm_accept_multiple.button": "پذیرش {count, plural,one {درخواست} other {درخواست‌ها}}",
"notification_requests.confirm_accept_multiple.message": "در حال پذیرش {count, plural,one {یک}other {#}} درخواست آگاهی هستید. مطمئنید که می‌خواهید ادامه دهید؟",
"notification_requests.confirm_accept_multiple.title": "پذیرش درخواست‌های آگاهی؟",
"notification_requests.confirm_dismiss_multiple.button": "رد {count, plural,one {درخواست} other {درخواست‌ها}}",
"notification_requests.confirm_dismiss_multiple.message": "شما در شرف رد کردن {count, plural, one {یک درخواست آگاهی} other {درخواست آگاهی}} هستید. دیگر نمی توانید به راحتی به {count, plural, one {آن} other {آن‌ها}} دسترسی پیدا کنید. آیا مطمئن هستید که می خواهید ادامه دهید؟",
"notification_requests.confirm_dismiss_multiple.title": "رد کردن درخواست‌های آگاهی؟",
"notification_requests.dismiss": "دورانداختن",
"notification_requests.dismiss_multiple": "{count, plural, one {دورانداختن درخواست…} other {دورانداختن درخواست‌ها…}}",
"notification_requests.edit_selection": "ویرایش",
"notification_requests.exit_selection": "انجام شد",
"notification_requests.explainer_for_limited_account": "اعلان‌های این حساب فیلتر شده‌اند زیرا حساب توسط یک ناظر محدود شده است.",
@ -686,6 +704,7 @@
"recommended": "پیشنهادشده",
"refresh": "نوسازی",
"regeneration_indicator.please_stand_by": "لطفا منتظر باشید.",
"regeneration_indicator.preparing_your_home_feed": "در حال آماده کردن خوراک خانگی شما…",
"relative_time.days": "{number} روز",
"relative_time.full.days": "{number, plural, one {# روز} other {# روز}} پیش",
"relative_time.full.hours": "{number, plural, one {# ساعت} other {# ساعت}} پیش",
@ -825,6 +844,7 @@
"status.reblogs.empty": "هنوز هیچ کسی این فرسته را تقویت نکرده است. وقتی کسی چنین کاری کند، این‌جا نمایش داده خواهد شد.",
"status.redraft": "حذف و بازنویسی",
"status.remove_bookmark": "برداشتن نشانک",
"status.remove_favourite": "حذف از موارد دلخواه",
"status.replied_in_thread": "در رشته پاسخ داده",
"status.replied_to": "به {name} پاسخ داد",
"status.reply": "پاسخ",
@ -862,26 +882,12 @@
"upload_button.label": "افزودن تصاویر، ویدیو یا یک پروندهٔ صوتی",
"upload_error.limit": "از حد مجاز بارگذاری پرونده فراتر رفتید.",
"upload_error.poll": "بارگذاری پرونده در نظرسنجی‌ها مجاز نیست.",
"upload_form.audio_description": "برای ناشنوایان توصیفش کنید",
"upload_form.description": "برای کم‌بینایان توصیفش کنید",
"upload_form.drag_and_drop.instructions": "برای دریافت پیوست رسانه، space را فشار دهید یا وارد کنید. در حین کشیدن، از کلیدهای جهت دار برای حرکت دادن پیوست رسانه در هر جهت معین استفاده کنید. برای رها کردن ضمیمه رسانه در موقعیت جدید خود، مجدداً space یا enter را فشار دهید، یا برای لغو، escape را فشار دهید.",
"upload_form.drag_and_drop.on_drag_cancel": "کشیدن لغو شد. پیوست رسانه {item} حذف شد.",
"upload_form.drag_and_drop.on_drag_end": "پیوست رسانه {item} حذف شد.",
"upload_form.drag_and_drop.on_drag_over": "پیوست رسانه {item} منتقل شد.",
"upload_form.drag_and_drop.on_drag_start": "پیوست رسانه {item} برداشته شد.",
"upload_form.edit": "ویرایش",
"upload_form.thumbnail": "تغییر بندانگشتی",
"upload_form.video_description": "برای کم‌بینایان یا ناشنوایان توصیفش کنید",
"upload_modal.analyzing_picture": "در حال پردازش تصویر…",
"upload_modal.apply": "اعمال",
"upload_modal.applying": "اعمال کردن…",
"upload_modal.choose_image": "گزینش تصویر",
"upload_modal.description_placeholder": "الا یا ایّها الساقی، ادر کأساً و ناولها",
"upload_modal.detect_text": "تشخیص متن درون عکس",
"upload_modal.edit_media": "ویرایش رسانه",
"upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابه‌جا کردن آن تنظیم کنید.",
"upload_modal.preparing_ocr": "در حال آماده سازی OCR…",
"upload_modal.preview_label": "پیش‌نمایش ({ratio})",
"upload_progress.label": "در حال بارگذاری…",
"upload_progress.processing": "در حال پردازش…",
"username.taken": "این نام کاربری گرفته شده. نام دیگری امتحان کنید",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Lisää kuvia, video tai äänitiedosto",
"upload_error.limit": "Tiedostolähetysten rajoitus ylitetty.",
"upload_error.poll": "Tiedostojen lisääminen äänestysten oheen ei ole sallittua.",
"upload_form.audio_description": "Kuvaile sisältöä kuuroille ja kuulorajoitteisille",
"upload_form.description": "Kuvaile sisältöä sokeille ja näkörajoitteisille",
"upload_form.drag_and_drop.instructions": "Valitse medialiite painamalla välilyöntiä tai enteriä. Vetäessäsi käytä nuolinäppäimiä siirtääksesi medialiitettä vastaavaan suuntaan. Paina välilyöntiä tai enteriä uudelleen pudottaaksesi medialiitteen uuteen kohtaansa, tai peru siirto painamalla escape-näppäintä.",
"upload_form.drag_and_drop.on_drag_cancel": "Veto peruttiin. Medialiitettä {item} ei siirretty.",
"upload_form.drag_and_drop.on_drag_end": "Medialiite {item} pudotettiin.",
"upload_form.drag_and_drop.on_drag_over": "Medialiitettä {item} siirrettiin.",
"upload_form.drag_and_drop.on_drag_start": "Valittiin medialiite {item}.",
"upload_form.edit": "Muokkaa",
"upload_form.thumbnail": "Vaihda pienoiskuva",
"upload_form.video_description": "Kuvaile sisältöä kuuroille, kuulorajoitteisille, sokeille tai näkörajoitteisille",
"upload_modal.analyzing_picture": "Analysoidaan kuvaa…",
"upload_modal.apply": "Käytä",
"upload_modal.applying": "Otetaan käyttöön…",
"upload_modal.choose_image": "Valitse kuva",
"upload_modal.description_placeholder": "Nopea ruskea kettu hyppää laiskan koiran yli",
"upload_modal.detect_text": "Tunnista teksti kuvasta",
"upload_modal.edit_media": "Muokkaa mediaa",
"upload_modal.hint": "Napsauta tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.",
"upload_modal.preparing_ocr": "Valmistellaan tekstintunnistusta…",
"upload_modal.preview_label": "Esikatselu ({ratio})",
"upload_progress.label": "Lähetetään…",
"upload_progress.processing": "Käsitellään…",
"username.taken": "Tämä käyttäjänimi on jo käytössä. Kokeile toista",

View file

@ -378,8 +378,5 @@
"time_remaining.days": "{number, plural, one {# araw} other {# na araw}} ang natitira",
"time_remaining.hours": "{number, plural, one {# oras} other {# na oras}} ang natitira",
"time_remaining.minutes": "{number, plural, one {# minuto} other {# na minuto}} ang natitira",
"time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira",
"upload_modal.apply": "Ilapat",
"upload_modal.applying": "Nilalapat…",
"upload_modal.choose_image": "Pumili ng larawan"
"time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira"
}

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Ein óvæntaður feilur kom fyri.",
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Annar tekstur",
"alt_text_modal.add_alt_text": "Legg alternativan tekst afturat",
"alt_text_modal.add_text_from_image": "Legg tekst frá mynd afturat",
"alt_text_modal.cancel": "Angra",
"alt_text_modal.change_thumbnail": "Broyt smámynd",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Lýs hetta fyri fólk við tey, ið hava niðursetta hoyrn…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Lýs hetta fyri fólk við tey, ið hava avmarkaða sjón…",
"alt_text_modal.done": "Liðugt",
"announcement.announcement": "Kunngerð",
"annual_report.summary.archetype.booster": "Kuli jagarin",
"annual_report.summary.archetype.lurker": "Lúrarin",
@ -875,26 +882,12 @@
"upload_button.label": "Legg myndir, sjónfílu ella ljóðfílu afturat",
"upload_error.limit": "Farið er um markið fyri fíluuppsending.",
"upload_error.poll": "Ikki loyvt at leggja fílur upp í spurnarkanningum.",
"upload_form.audio_description": "Lýs fyri teimum, sum eru deyv ella hava ringa hoyrn",
"upload_form.description": "Lýs fyri teimum, sum eru blind ella eru sjónveik",
"upload_form.drag_and_drop.instructions": "Fyri at heinta eitt miðlaviðfesti, trýst á millumrúm ella returknapp. Meðan tú dregur, brúka pílarnar fyri at flyta miðaviðfesti í einhvønn rætning. Trýst á millumrúm ella returknapp aftur fyri at sleppa miðlaviðfestinum í nýggja staðnum ella trýst á esc-knappin fyri at angra.",
"upload_form.drag_and_drop.on_drag_cancel": "Draging varð steðgað. Miðlaviðfestið {item} varð slept.",
"upload_form.drag_and_drop.on_drag_end": "Miðlaviðfestið {item} var slept.",
"upload_form.drag_and_drop.on_drag_over": "Miðlaviðfestið {item} var flutt.",
"upload_form.drag_and_drop.on_drag_start": "Heintaði miðlaviðfestið {item}.",
"upload_form.edit": "Rætta",
"upload_form.thumbnail": "Broyt smámynd",
"upload_form.video_description": "Lýs fyri teimum, sum eru deyv, hava ringa hoyrn, eru blind ella eru sjónveik",
"upload_modal.analyzing_picture": "Greini mynd…",
"upload_modal.apply": "Ger virkið",
"upload_modal.applying": "Geri virkið…",
"upload_modal.choose_image": "Vel mynd",
"upload_modal.description_placeholder": "Ein skjótur brúnur revur loypur uppum dovna hundin",
"upload_modal.detect_text": "Finn text á mynd",
"upload_modal.edit_media": "Broyt miðil",
"upload_modal.hint": "Klikk ella drag sirkulin á undanvísingini fyri at velja brennidepilspunktið, sum altíð fer at vera sjónligt á øllum smámyndum.",
"upload_modal.preparing_ocr": "Fyrireiki OCR…",
"upload_modal.preview_label": "Undanvísing ({ratio})",
"upload_progress.label": "Leggi upp...",
"upload_progress.processing": "Viðgeri…",
"username.taken": "Brúkaranavnið er tikið. Royn eitt annað",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Une erreur inattendue sest produite.",
"alert.unexpected.title": "Oups!",
"alt_text_badge.title": "Texte alternatif",
"alt_text_modal.add_alt_text": "Ajouter un texte alternatif",
"alt_text_modal.add_text_from_image": "Ajouter le texte provenant de l'image",
"alt_text_modal.cancel": "Annuler",
"alt_text_modal.change_thumbnail": "Changer la vignette",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Décrire pour les personnes ayant des difficultés daudition…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Décrire pour les personnes ayant des problèmes de vue…",
"alt_text_modal.done": "Terminé",
"announcement.announcement": "Annonce",
"annual_report.summary.archetype.booster": "Le chasseur de sang-froid",
"annual_report.summary.archetype.lurker": "Le faucheur",
@ -875,26 +882,12 @@
"upload_button.label": "Ajouter des images, une vidéo ou un fichier audio",
"upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
"upload_error.poll": "Lenvoi de fichiers nest pas autorisé avec les sondages.",
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés daudition",
"upload_form.description": "Décrire pour les malvoyants",
"upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
"upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.",
"upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.",
"upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.",
"upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.",
"upload_form.edit": "Modifier",
"upload_form.thumbnail": "Changer la vignette",
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
"upload_modal.analyzing_picture": "Analyse de limage en cours…",
"upload_modal.apply": "Appliquer",
"upload_modal.applying": "Application en cours…",
"upload_modal.choose_image": "Choisir une image",
"upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux",
"upload_modal.detect_text": "Détecter le texte de limage",
"upload_modal.edit_media": "Modifier le média",
"upload_modal.hint": "Cliquez ou faites glisser le cercle sur laperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.",
"upload_modal.preparing_ocr": "Préparation de la ROC…",
"upload_modal.preview_label": "Aperçu ({ratio})",
"upload_progress.label": "Envoi en cours...",
"upload_progress.processing": "Traitement en cours…",
"username.taken": "Ce nom d'utilisateur est déjà pris. Essayez-en en autre",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Une erreur inattendue sest produite.",
"alert.unexpected.title": "Oups!",
"alt_text_badge.title": "Texte alternatif",
"alt_text_modal.add_alt_text": "Ajouter un texte alternatif",
"alt_text_modal.add_text_from_image": "Ajouter le texte provenant de l'image",
"alt_text_modal.cancel": "Annuler",
"alt_text_modal.change_thumbnail": "Changer la vignette",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Décrire pour les personnes ayant des difficultés daudition…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Décrire pour les personnes ayant des problèmes de vue…",
"alt_text_modal.done": "Terminé",
"announcement.announcement": "Annonce",
"annual_report.summary.archetype.booster": "Le chasseur de sang-froid",
"annual_report.summary.archetype.lurker": "Le faucheur",
@ -875,26 +882,12 @@
"upload_button.label": "Ajouter des images, une vidéo ou un fichier audio",
"upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
"upload_error.poll": "Lenvoi de fichiers nest pas autorisé avec les sondages.",
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés daudition",
"upload_form.description": "Décrire pour les malvoyant·e·s",
"upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
"upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.",
"upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.",
"upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.",
"upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.",
"upload_form.edit": "Modifier",
"upload_form.thumbnail": "Changer la vignette",
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
"upload_modal.analyzing_picture": "Analyse de limage en cours…",
"upload_modal.apply": "Appliquer",
"upload_modal.applying": "Application en cours…",
"upload_modal.choose_image": "Choisir une image",
"upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux",
"upload_modal.detect_text": "Détecter le texte de limage",
"upload_modal.edit_media": "Modifier le média",
"upload_modal.hint": "Cliquez ou faites glisser le cercle sur laperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.",
"upload_modal.preparing_ocr": "Préparation de lOCR…",
"upload_modal.preview_label": "Aperçu ({ratio})",
"upload_progress.label": "Envoi en cours…",
"upload_progress.processing": "En cours…",
"username.taken": "Ce nom d'utilisateur est déjà pris. Essayez d'en prendre un autre",

View file

@ -804,26 +804,12 @@
"upload_button.label": "Ofbyldingen, in fideo- of in lûdsbestân tafoegje",
"upload_error.limit": "Oer de oplaadlimyt fan bestân.",
"upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.drag_and_drop.instructions": "Druk op spaasje of Enter om in mediabylage op te pakken. Bruk de pylktoetsen om de bylage yn in bepaalde rjochting te ferpleatsen. Druk opnij op de spaasjebalke of Enter om de mediabylage op de nije posysje te pleatsen, of druk op Esc om te annulearjen.",
"upload_form.drag_and_drop.on_drag_cancel": "Slepen is annulearre. Mediabylage {item} is net ferpleatst.",
"upload_form.drag_and_drop.on_drag_end": "Mediabylage {item} is net ferpleatst.",
"upload_form.drag_and_drop.on_drag_over": "Mediabylage {item} is ferpleatst.",
"upload_form.drag_and_drop.on_drag_start": "Mediabylage {item} is oppakt.",
"upload_form.edit": "Bewurkje",
"upload_form.thumbnail": "Miniatuerôfbylding wizigje",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.analyzing_picture": "Ofbylding analysearje…",
"upload_modal.apply": "Tapasse",
"upload_modal.applying": "Oan it tapassen…",
"upload_modal.choose_image": "Kies in ôfbylding",
"upload_modal.description_placeholder": "Heit syn wize foks ljept tûk oar de loaie hûn",
"upload_modal.detect_text": "Tekst yn in ôfbylding detektearje",
"upload_modal.edit_media": "Media bewurkje",
"upload_modal.hint": "Klik of sleep de sirkel yn de foarfertoaning nei in sintraal fokuspunt dat op elke thumbnail sichtber bliuwe moat.",
"upload_modal.preparing_ocr": "OCR tariede…",
"upload_modal.preview_label": "Foarfertoaning ({ratio})",
"upload_progress.label": "Uploading…",
"upload_progress.processing": "Dwaande…",
"username.taken": "Dy brûkersnamme is al yn gebrûk. Probearje in oare",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Cuir íomhánna, físeán nó comhad fuaime leis",
"upload_error.limit": "Sáraíodh an teorainn uaslódála comhaid.",
"upload_error.poll": "Ní cheadaítear uaslódáil comhad le pobalbhreith.",
"upload_form.audio_description": "Déan cur síos ar dhaoine bodhra nó lagéisteachta",
"upload_form.description": "Describe for the visually impaired",
"upload_form.drag_and_drop.instructions": "Chun ceangaltán meán a phiocadh suas, brúigh spás nó cuir isteach. Agus tú ag tarraingt, bain úsáid as na heochracha saigheada chun an ceangaltán meán a bhogadh i dtreo ar bith. Brúigh spás nó cuir isteach arís chun an ceangaltán meán a scaoileadh ina phost nua, nó brúigh éalú chun cealú.",
"upload_form.drag_and_drop.on_drag_cancel": "Cuireadh an tarraingt ar ceal. Scaoileadh ceangaltán meán {item}.",
"upload_form.drag_and_drop.on_drag_end": "Scaoileadh ceangaltán meán {item}.",
"upload_form.drag_and_drop.on_drag_over": "Bogadh ceangaltán meán {item}.",
"upload_form.drag_and_drop.on_drag_start": "Roghnaíodh ceangaltán meán {item}.",
"upload_form.edit": "Cuir in eagar",
"upload_form.thumbnail": "Athraigh mionsamhail",
"upload_form.video_description": "Déan cur síos ar dhaoine atá bodhar, lagéisteachta, dall nó lagamhairc",
"upload_modal.analyzing_picture": "Ag anailísiú íomhá…",
"upload_modal.apply": "Cuir i bhFeidhm",
"upload_modal.applying": "Á gcur i bhfeidhm…",
"upload_modal.choose_image": "Roghnaigh íomhá",
"upload_modal.description_placeholder": "Chuaigh bé mhórsách le dlúthspád fíorfhinn trí hata mo dhea-phorcáin bhig",
"upload_modal.detect_text": "Braith téacs ó phictiúr",
"upload_modal.edit_media": "Cuir gné in eagar",
"upload_modal.hint": "Cliceáil nó tarraing an ciorcal ar an réamhamharc chun an pointe fócasach a roghnú a bheidh le feiceáil i gcónaí ar na mionsamhlacha go léir.",
"upload_modal.preparing_ocr": "OCR á ullmhú…",
"upload_modal.preview_label": "Réamhamharc ({ratio})",
"upload_progress.label": "Ag uaslódáil...",
"upload_progress.processing": "Ag próiseáil…",
"username.taken": "Glactar leis an ainm úsáideora sin. Bain triail eile as",

View file

@ -817,26 +817,12 @@
"upload_button.label": "Cuir ris dealbhan, video no faidhle fuaime",
"upload_error.limit": "Luchdaich thu suas na tha ceadaichte dhut a dhfhaidhlichean mu thràth.",
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
"upload_form.drag_and_drop.instructions": "Airson ceanglachan meadhain a thogail, brùth air space no enter. Fhad a bhios tu ga shlaodadh, cleachd na h-iuchraichean-saighde airson an ceanglachan meadhain a ghluasad gu comhair sam bith. Brùth air space no enter a-rithist airson an ceanglachen meadhain a leigeil às air an ionad ùr aige no brùth air escape airson sgur dheth.",
"upload_form.drag_and_drop.on_drag_cancel": "Chaidh sgur dhen t-slaodadh. Chaidh an ceanglachan meadhain {item} a leigeil às.",
"upload_form.drag_and_drop.on_drag_end": "Chaidh an ceanglachan meadhain {item} a leigeil às.",
"upload_form.drag_and_drop.on_drag_over": "Chaidh an ceanglachan meadhain {item} a ghluasad.",
"upload_form.drag_and_drop.on_drag_start": "Chaidh an ceanglachan meadhain {item} a thogail.",
"upload_form.edit": "Deasaich",
"upload_form.thumbnail": "Atharraich an dealbhag",
"upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne",
"upload_modal.analyzing_picture": "A sgrùdadh an deilbh…",
"upload_modal.apply": "Cuir an sàs",
"upload_modal.applying": "Ga chur an sàs…",
"upload_modal.choose_image": "Tagh dealbh",
"upload_modal.description_placeholder": "Lorg Sìm fiù bò, cè ⁊ neup ad àth",
"upload_modal.detect_text": "Mothaich dhan teacsa on dealbh",
"upload_modal.edit_media": "Deasaich am meadhan",
"upload_modal.hint": "Briog no slaod an cearcall air an ro-shealladh airson puing an fhòcais a thaghadh a chithear air gach dealbhag dheth.",
"upload_modal.preparing_ocr": "Ag ullachadh OCR…",
"upload_modal.preview_label": "Ro-shealladh ({ratio})",
"upload_progress.label": "Ga luchdadh suas…",
"upload_progress.processing": "Ga phròiseasadh…",
"username.taken": "Tha an t-ainm-cleachdaiche seo aig cuideigin eile. Feuch fear eile",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Aconteceu un fallo non agardado.",
"alert.unexpected.title": "Vaites!",
"alt_text_badge.title": "Texto Alt",
"alt_text_modal.add_alt_text": "Engadir texto descritivo",
"alt_text_modal.add_text_from_image": "Engadir texto desde a imaxe",
"alt_text_modal.cancel": "Desbotar",
"alt_text_modal.change_thumbnail": "Cambiar a miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Describe isto para as persoas con dificultades auditivas…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Describe isto para as persoas con dificultades visuais…",
"alt_text_modal.done": "Feito",
"announcement.announcement": "Anuncio",
"annual_report.summary.archetype.booster": "O Telexornal",
"annual_report.summary.archetype.lurker": "Volleur",
@ -875,26 +882,12 @@
"upload_button.label": "Engadir imaxes, un vídeo ou ficheiro de audio",
"upload_error.limit": "Límite máximo do ficheiro a subir excedido.",
"upload_error.poll": "Non se poden subir ficheiros nas enquisas.",
"upload_form.audio_description": "Describir para persoas con problemas auditivos",
"upload_form.description": "Describir para persoas cegas ou con problemas visuais",
"upload_form.drag_and_drop.instructions": "Preme en Espazo ou Enter para escoller un anexo multimedia. Ao arrastrar usa as teclas de frecha para mover o anexo en todas direccións.Preme Espazo ou Enter outra vez para soltalo na súa nova posición, ou preme Escape para desbotar.",
"upload_form.drag_and_drop.on_drag_cancel": "Cancelouse o movemento. O anexo {item} soltouse.",
"upload_form.drag_and_drop.on_drag_end": "Soltouse o anexo multimedia {item}.",
"upload_form.drag_and_drop.on_drag_over": "Moveuse o anexo multimedia {item}.",
"upload_form.drag_and_drop.on_drag_start": "Escolleuse o anexo multimedia {item}.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar a miniatura",
"upload_form.video_description": "Describe para persoas con problemas visuais ou auditivos",
"upload_modal.analyzing_picture": "Estase a analizar a imaxe…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicando…",
"upload_modal.choose_image": "Elixir imaxe",
"upload_modal.description_placeholder": "Un raposo veloz brinca sobre o can preguiceiro",
"upload_modal.detect_text": "Detectar texto na imaxe",
"upload_modal.edit_media": "Editar multimedia",
"upload_modal.hint": "Preme ou arrastra o círculo na vista previa para escoller o punto focal que sempre estará á vista en todas as miniaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Estase a subir...",
"upload_progress.processing": "Procesando…",
"username.taken": "O identificador xa está pillado. Inténtao con outro",

View file

@ -86,6 +86,13 @@
"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.describe_for_people_with_hearing_impairments": "תיאור התוכן לכבדי שמיעה…",
"alt_text_modal.describe_for_people_with_visual_impairments": "תיאור התוכן לפגועי ראיה…",
"alt_text_modal.done": "סיום",
"announcement.announcement": "הכרזה",
"annual_report.summary.archetype.booster": "ההד-וניסט(ית)",
"annual_report.summary.archetype.lurker": "השורץ.ת השקט.ה",
@ -875,26 +882,12 @@
"upload_button.label": "הוספת מדיה",
"upload_error.limit": "קובץ להעלאה חורג מנפח מותר.",
"upload_error.poll": "לא ניתן להעלות קובץ עם סקר.",
"upload_form.audio_description": "תאר/י עבור לקויי שמיעה",
"upload_form.description": "תיאור לכבדי ראיה",
"upload_form.drag_and_drop.instructions": "כדי לבחור קובץ מוצמד, יש ללחוץ על מקש רווח או אנטר. בעת הגרירה, השתמשו במקשי החיצים כדי להזיז את הקובץ המוצמד בכל כיוון. לחצו רווח או אנטר בשנית כדי לעזוב את הקובץ במקומו החדש, או לחצו אסקייפ לביטול.",
"upload_form.drag_and_drop.on_drag_cancel": "הגרירה בוטלה. קובץ המדיה {item} נעזב.",
"upload_form.drag_and_drop.on_drag_end": "קובץ המדיה {item} נעזב.",
"upload_form.drag_and_drop.on_drag_over": "קובץ המדיה {item} הוזז.",
"upload_form.drag_and_drop.on_drag_start": "קובץ המדיה {item} נבחר.",
"upload_form.edit": "עריכה",
"upload_form.thumbnail": "שנה/י תמונה ממוזערת",
"upload_form.video_description": "תאר/י עבור לקויי שמיעה ולקויי ראייה",
"upload_modal.analyzing_picture": "מנתח תמונה…",
"upload_modal.apply": "החל",
"upload_modal.applying": "מחיל…",
"upload_modal.choose_image": "בחר/י תמונה",
"upload_modal.description_placeholder": "עטלף אבק נס דרך מזגן שהתפוצץ כי חם",
"upload_modal.detect_text": "זהה טקסט מתמונה",
"upload_modal.edit_media": "עריכת מדיה",
"upload_modal.hint": "הקליקי או גררי את המעגל על גבי התצוגה המקדימה על מנת לבחור בנקודת המוקד שתראה תמיד בכל התמונות הממוזערות.",
"upload_modal.preparing_ocr": "מכין OCR…",
"upload_modal.preview_label": "תצוגה ({ratio})",
"upload_progress.label": "עולה...",
"upload_progress.processing": "מעבד…",
"username.taken": "שם המשתמש הזה תפוס. נסו אחר",

View file

@ -479,12 +479,7 @@
"tabs_bar.home": "होम",
"tabs_bar.notifications": "सूचनाएँ",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.edit": "संशोधन करें",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.apply": "लागू करें",
"upload_modal.edit_media": "मीडिया में संशोधन करें",
"upload_progress.label": "अपलोडिंग...",
"video.download": "फाइल डाउनलोड करें"
}

View file

@ -474,20 +474,7 @@
"upload_button.label": "Dodajte slike, video ili audio datoteku",
"upload_error.limit": "Ograničenje prijenosa datoteka je prekoračeno.",
"upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.",
"upload_form.audio_description": "Opišite za ljude sa slabim sluhom",
"upload_form.description": "Opišite za ljude sa slabim vidom",
"upload_form.edit": "Uredi",
"upload_form.thumbnail": "Promijeni pretpregled",
"upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom",
"upload_modal.analyzing_picture": "Analiza slike…",
"upload_modal.apply": "Primijeni",
"upload_modal.applying": "Primjenjivanje…",
"upload_modal.choose_image": "Odaberite sliku",
"upload_modal.description_placeholder": "Gojazni đačić s biciklom drži hmelj i finu vatu u džepu nošnje",
"upload_modal.detect_text": "Detektiraj tekst sa slike",
"upload_modal.edit_media": "Uređivanje medija",
"upload_modal.preparing_ocr": "Pripremam OCR…",
"upload_modal.preview_label": "Pretpregled ({ratio})",
"upload_progress.label": "Prenošenje...",
"upload_progress.processing": "Obrada…",
"video.close": "Zatvori video",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Képek, videó vagy audiófájl hozzáadása",
"upload_error.limit": "A fájlfeltöltési korlát elérésre került.",
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
"upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára",
"upload_form.description": "Leírás vak vagy gyengénlátó emberek számára",
"upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomj Szóközt vagy Entert. Húzás közben használd a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomd meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomd meg az Esc gombot.",
"upload_form.drag_and_drop.on_drag_cancel": "Az áthúzás megszakítva. A(z) {item} médiamelléklet el lett dobva.",
"upload_form.drag_and_drop.on_drag_end": "A(z) {item} médiamelléklet el lett dobva.",
"upload_form.drag_and_drop.on_drag_over": "A(z) {item} médiamelléklet át lett helyezve.",
"upload_form.drag_and_drop.on_drag_start": "A(z) {item} médiamelléklet fel lett véve.",
"upload_form.edit": "Szerkesztés",
"upload_form.thumbnail": "Bélyegkép megváltoztatása",
"upload_form.video_description": "Leírás siket, hallássérült, vak vagy gyengénlátó emberek számára",
"upload_modal.analyzing_picture": "Kép elemzése…",
"upload_modal.apply": "Alkalmaz",
"upload_modal.applying": "Alkalmazás…",
"upload_modal.choose_image": "Kép kiválasztása",
"upload_modal.description_placeholder": "A gyors, barna róka átugrik a lusta kutya fölött",
"upload_modal.detect_text": "Szöveg felismerése a képről",
"upload_modal.edit_media": "Média szerkesztése",
"upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden bélyegképen látható kell, hogy legyen.",
"upload_modal.preparing_ocr": "OCR előkészítése…",
"upload_modal.preview_label": "Előnézet ({ratio})",
"upload_progress.label": "Feltöltés…",
"upload_progress.processing": "Feldolgozás…",
"username.taken": "Ez a felhasználónév foglalt. Válassz másikat.",

View file

@ -464,21 +464,7 @@
"upload_button.label": "Աւելացնել մեդիա",
"upload_error.limit": "Նիշքի վերբեռնման սահմանաչափը գերազանցուած է։",
"upload_error.poll": "Հարցումների հետ նիշք կցել հնարաւոր չէ։",
"upload_form.audio_description": "Նկարագրիր ձայնագրութեան բովանդակութիւնը լսողական խնդիրներով անձանց համար",
"upload_form.description": "Նկարագիր՝ տեսողական խնդիրներ ունեցողների համար",
"upload_form.edit": "Խմբագրել",
"upload_form.thumbnail": "Փոխել պատկերակը",
"upload_form.video_description": "Նկարագրիր տեսանիւթը լսողական կամ տեսողական խնդիրներով անձանց համար",
"upload_modal.analyzing_picture": "Լուսանկարի վերլուծում…",
"upload_modal.apply": "Կիրառել",
"upload_modal.applying": "Կիրառւում է...",
"upload_modal.choose_image": "Ընտրել նկար",
"upload_modal.description_placeholder": "Բել դղեակի ձախ ժամն օֆ ազգութեանը ցպահանջ չճշտած վնաս էր եւ փառք։",
"upload_modal.detect_text": "Յայտնաբերել տեքստը նկարից",
"upload_modal.edit_media": "Խմբագրել մեդիան",
"upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։",
"upload_modal.preparing_ocr": "Գրաճանաչման նախապատրաստում…",
"upload_modal.preview_label": "Նախադիտում ({ratio})",
"upload_progress.label": "Վերբեռնվում է…",
"upload_progress.processing": "Մշակուում է...",
"video.close": "Փակել տեսագրութիւնը",

View file

@ -86,6 +86,9 @@
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Texto alternative",
"alt_text_modal.add_text_from_image": "Adder texto ab imagine",
"alt_text_modal.cancel": "Cancellar",
"alt_text_modal.change_thumbnail": "Cambiar le miniatura",
"announcement.announcement": "Annuncio",
"annual_report.summary.archetype.booster": "Le impulsator",
"annual_report.summary.archetype.lurker": "Le lector",
@ -380,7 +383,7 @@
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} hodie",
"hashtag.follow": "Sequer hashtag",
"hashtag.unfollow": "Non sequer plus le hashtag",
"hashtags.and_other": "…e {count, plural, one {}other {# plus}}",
"hashtags.and_other": "…e {count, plural, one {un altere} other {# alteres}}",
"hints.profiles.followers_may_be_missing": "Le sequitores de iste profilo pote mancar.",
"hints.profiles.follows_may_be_missing": "Le profilos sequite per iste profilo pote mancar.",
"hints.profiles.posts_may_be_missing": "Alcun messages de iste profilo pote mancar.",
@ -875,26 +878,12 @@
"upload_button.label": "Adde imagines, un video o un file de audio",
"upload_error.limit": "Limite de incargamento de files excedite.",
"upload_error.poll": "Incargamento de files non permittite con sondages.",
"upload_form.audio_description": "Describe lo pro le gente con difficultates auditive",
"upload_form.description": "Describe lo pro le gente con difficultates visual",
"upload_form.drag_and_drop.instructions": "Pro prender un annexo multimedial, preme sur le barra de spatios o Enter. Trahente lo, usa le claves de flecha pro displaciar le annexo multimedial in un certe direction. Preme le barra de spatios o Enter de novo pro deponer le annexo multimedial in su nove position, o preme sur Escape pro cancellar.",
"upload_form.drag_and_drop.on_drag_cancel": "Le displaciamento ha essite cancellate. Le annexo multimedial {item} ha essite deponite.",
"upload_form.drag_and_drop.on_drag_end": "Le annexo multimedial {item} ha essite deponite.",
"upload_form.drag_and_drop.on_drag_over": "Le annexo multimedial {item} ha essite displaciate.",
"upload_form.drag_and_drop.on_drag_start": "Le annexo multimedial {item} ha essite prendite.",
"upload_form.edit": "Modificar",
"upload_form.thumbnail": "Cambiar le miniatura",
"upload_form.video_description": "Describe lo pro le gente con difficultates auditive o visual",
"upload_modal.analyzing_picture": "Analysa imagine…",
"upload_modal.apply": "Applicar",
"upload_modal.applying": "Applicante…",
"upload_modal.choose_image": "Seliger un imagine",
"upload_modal.description_placeholder": "Cinque expertos del zoo jam bibeva whisky frigide",
"upload_modal.detect_text": "Deteger texto de un imagine",
"upload_modal.edit_media": "Modificar multimedia",
"upload_modal.hint": "Clicca o trahe le circulo sur le previsualisation pro eliger le puncto focal que essera sempre visibile sur tote le miniaturas.",
"upload_modal.preparing_ocr": "Preparation del OCR…",
"upload_modal.preview_label": "Previsualisation ({ratio})",
"upload_progress.label": "Incargante...",
"upload_progress.processing": "Processante…",
"username.taken": "Iste nomine de usator es ja in uso. Proba con un altere",

View file

@ -601,21 +601,7 @@
"upload_button.label": "Tambahkan media",
"upload_error.limit": "Batas unggah berkas terlampaui.",
"upload_error.poll": "Unggah berkas tak diizinkan di japat ini.",
"upload_form.audio_description": "Penjelasan untuk orang dengan gangguan pendengaran",
"upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
"upload_form.edit": "Sunting",
"upload_form.thumbnail": "Ubah gambar kecil",
"upload_form.video_description": "Penjelasan untuk orang dengan gangguan pendengaran atau penglihatan",
"upload_modal.analyzing_picture": "Analisis gambar…",
"upload_modal.apply": "Terapkan",
"upload_modal.applying": "Menerapkan…",
"upload_modal.choose_image": "Pilih gambar",
"upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar",
"upload_modal.detect_text": "Deteksi teks pada gambar",
"upload_modal.edit_media": "Sunting media",
"upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.",
"upload_modal.preparing_ocr": "Menyiapkan OCR…",
"upload_modal.preview_label": "Pratinjau ({ratio})",
"upload_progress.label": "Mengunggah...",
"upload_progress.processing": "Memproses…",
"video.close": "Tutup video",

View file

@ -696,21 +696,7 @@
"upload_button.label": "Adjunter images, un video o un audio-file",
"upload_error.limit": "Límite de medie-cargationes transpassat.",
"upload_error.poll": "On ne es permisset cargar medie con balotationes.",
"upload_form.audio_description": "Descrir por persones qui es surd o ne audi bon",
"upload_form.description": "Descrir por persones qui es ciec o have mal vision",
"upload_form.edit": "Redacter",
"upload_form.thumbnail": "Changear previsual image",
"upload_form.video_description": "Descrir por persones qui es surd, ciec, ne audi bon, o have mal vision",
"upload_modal.analyzing_picture": "Analisant image…",
"upload_modal.apply": "Aplicar",
"upload_modal.applying": "Aplicant…",
"upload_modal.choose_image": "Selecter image",
"upload_modal.description_placeholder": "Li Europan lingues es membres del sam familie. Lor separat existentie es un mite",
"upload_modal.detect_text": "Detecter text del image",
"upload_modal.edit_media": "Redacter medie",
"upload_modal.hint": "Clicca o trena li circul por selecter li focal punctu quel va esser sempre visibil in omni previse-images.",
"upload_modal.preparing_ocr": "Preparant OCR…",
"upload_modal.preview_label": "Previse ({ratio})",
"upload_progress.label": "Cargant...",
"upload_progress.processing": "Tractant…",
"username.taken": "Ti usator-nómine es ja prendet. Trova altri",

View file

@ -149,9 +149,5 @@
"tabs_bar.notifications": "Nziọkwà",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"trends.trending_now": "Na-ewu ewu kịta",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_modal.choose_image": "Họrọ onyonyo",
"upload_progress.label": "Uploading…"
}

View file

@ -790,26 +790,12 @@
"upload_button.label": "Adjuntar kontenajo",
"upload_error.limit": "Failadcharglimito ecesesis.",
"upload_error.poll": "Failadchargo ne permisesas kun votposti.",
"upload_form.audio_description": "Deskriptez por personi kun audnekapableso",
"upload_form.description": "Deskriptez por personi kun vidnekapableso",
"upload_form.drag_and_drop.instructions": "Por tenar mediatachajo, presez spaco o eniro. Presez spaco o eniro itere por destenar la mediatachajo en olua nova loko, o presez eskapo por anular.",
"upload_form.drag_and_drop.on_drag_cancel": "Tiro anulesis. Mediatachajo {item} destenesis.",
"upload_form.drag_and_drop.on_drag_end": "Mediatachajo {item} destenesis.",
"upload_form.drag_and_drop.on_drag_over": "Mediatachajo {item} movigesis.",
"upload_form.drag_and_drop.on_drag_start": "Tenis mediatachajo {item}.",
"upload_form.edit": "Modifikez",
"upload_form.thumbnail": "Chanjez imajeto",
"upload_form.video_description": "Deskriptez por personi kun audnekapableso o vidnekapableso",
"upload_modal.analyzing_picture": "Analizas imajo…",
"upload_modal.apply": "Aplikez",
"upload_modal.applying": "Aplikas…",
"upload_modal.choose_image": "Selektez imajo",
"upload_modal.description_placeholder": "Rapida bruna foxo saltas super la indolenta hundo",
"upload_modal.detect_text": "Deskovrez texto de imajo",
"upload_modal.edit_media": "Modifikez medii",
"upload_modal.hint": "Kliktez o tirez cirklo che prevido por selektar centrala punto quo sempre montresas kun omna imajeti.",
"upload_modal.preparing_ocr": "Preparas OCR…",
"upload_modal.preview_label": "Previdez ({ratio})",
"upload_progress.label": "Kargante...",
"upload_progress.processing": "Traktante…",
"username.taken": "Ta uzantnomo ja es posedita. Provez altro",

View file

@ -875,26 +875,12 @@
"upload_button.label": "Bæta við myndum, myndskeiði eða hljóðskrá",
"upload_error.limit": "Fór yfir takmörk á innsendingum skráa.",
"upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.",
"upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta",
"upload_form.description": "Lýstu þessu fyrir sjónskerta",
"upload_form.drag_and_drop.instructions": "Til að taka í myndefnisviðhengi skaltu ýta á bilslána eða Enter. Til að draga geturðu notað örvalyklana til að færa viðhengið í samsvarandi áttir. Ýttu aftur á bilslána eða Enter til að sleppa viðhenginu á nýja staðinn, eða ýttu á Escape til að hætta við.",
"upload_form.drag_and_drop.on_drag_cancel": "Hætt var við að draga. Myndefnisviðhenginu {item} var sleppt.",
"upload_form.drag_and_drop.on_drag_end": "Myndefnisviðhenginu {item} var sleppt.",
"upload_form.drag_and_drop.on_drag_over": "Myndefnisviðhengið {item} var fært.",
"upload_form.drag_and_drop.on_drag_start": "Tók í myndefnisviðhengið {item}.",
"upload_form.edit": "Breyta",
"upload_form.thumbnail": "Skipta um smámynd",
"upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón",
"upload_modal.analyzing_picture": "Greini mynd…",
"upload_modal.apply": "Virkja",
"upload_modal.applying": "Beiti…",
"upload_modal.choose_image": "Veldu mynd",
"upload_modal.description_placeholder": "Öllum dýrunum í skóginum þætti bezt að vera vinir",
"upload_modal.detect_text": "Skynja texta úr mynd",
"upload_modal.edit_media": "Breyta myndskrá",
"upload_modal.hint": "Smelltu eða dragðu til hringinn á forskoðuninni til að velja miðpunktinn sem verður alltaf sýnilegastur á öllum smámyndum.",
"upload_modal.preparing_ocr": "Undirbý OCR-ljóslestur…",
"upload_modal.preview_label": "Forskoðun ({ratio})",
"upload_progress.label": "Er að senda inn...",
"upload_progress.processing": "Meðhöndla…",
"username.taken": "Þetta notandanafn er frátekið. Prófaðu eitthvað annað",

View file

@ -86,6 +86,13 @@
"alert.unexpected.message": "Si è verificato un errore imprevisto.",
"alert.unexpected.title": "Oops!",
"alt_text_badge.title": "Testo alternativo",
"alt_text_modal.add_alt_text": "Aggiungi testo alternativo",
"alt_text_modal.add_text_from_image": "Aggiungi testo dall'immagine",
"alt_text_modal.cancel": "Annulla",
"alt_text_modal.change_thumbnail": "Cambia la miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descrivi questo per le persone con disturbi dell'udito…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descrivi questo per le persone con disabilità visive…",
"alt_text_modal.done": "Fatto",
"announcement.announcement": "Annuncio",
"annual_report.summary.archetype.booster": "Cacciatore/trice di tendenze",
"annual_report.summary.archetype.lurker": "L'osservatore/trice",
@ -875,26 +882,12 @@
"upload_button.label": "Aggiungi un file immagine, video o audio",
"upload_error.limit": "Limite di caricamento dei file superato.",
"upload_error.poll": "Caricamento del file non consentito con i sondaggi.",
"upload_form.audio_description": "Descrizione per persone con deficit uditivi",
"upload_form.description": "Descrizione per ipovedenti",
"upload_form.drag_and_drop.instructions": "Per selezionare un allegato multimediale, premi Spazio o Invio. Mentre trascini, usa i tasti con le frecce per spostare l'allegato multimediale in una qualsiasi direzione. Premi di nuovo Spazio o Invio per rilasciare l'allegato multimediale nella sua nuova posizione, oppure premi Esc per annullare.",
"upload_form.drag_and_drop.on_drag_cancel": "Il trascinamento è stato annullato. L'allegato multimediale {item} è stato eliminato.",
"upload_form.drag_and_drop.on_drag_end": "L'allegato multimediale {item} è stato eliminato.",
"upload_form.drag_and_drop.on_drag_over": "L'allegato multimediale {item} è stato spostato.",
"upload_form.drag_and_drop.on_drag_start": "L'allegato multimediale {item} è stato ricevuto.",
"upload_form.edit": "Modifica",
"upload_form.thumbnail": "Cambia la miniatura",
"upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti",
"upload_modal.analyzing_picture": "Analizzando l'immagine…",
"upload_modal.apply": "Applica",
"upload_modal.applying": "Applicazione…",
"upload_modal.choose_image": "Scegli l'immagine",
"upload_modal.description_placeholder": "Ma la volpe col suo balzo ha raggiunto il fiero Fido",
"upload_modal.detect_text": "Rileva il testo dall'immagine",
"upload_modal.edit_media": "Modifica il media",
"upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.",
"upload_modal.preparing_ocr": "Preparazione OCR…",
"upload_modal.preview_label": "Anteprima ({ratio})",
"upload_progress.label": "Caricamento...",
"upload_progress.processing": "Elaborazione…",
"username.taken": "Quel nome utente è già in uso. Prova con un altro",

View file

@ -1067,26 +1067,12 @@
"upload_button.label": "メディアを追加 (複数の画像または1つの動画か音声ファイル)",
"upload_error.limit": "アップロードできる上限を超えています。",
"upload_error.poll": "アンケートではファイルをアップロードできません。",
"upload_form.audio_description": "聴き取りが難しいユーザーへの説明",
"upload_form.description": "視覚的に閲覧が難しいユーザーへの説明",
"upload_form.drag_and_drop.instructions": "メディア添付ファイルを選択するには、スペースキーまたはエンターキーを押してください。ドラッグ中は、矢印キーを使ってメディア添付ファイルを任意の方向に移動できます。再度スペースキーまたはエンターキーを押すと新しい位置にメディア添付ファイルをドロップできます。キャンセルするにはエスケープキーを押してください。",
"upload_form.drag_and_drop.on_drag_cancel": "ドラッグがキャンセルされました。メディア添付ファイル {item} がドロップされました。",
"upload_form.drag_and_drop.on_drag_end": "メディア添付ファイル {item} がドロップされました。",
"upload_form.drag_and_drop.on_drag_over": "メディア添付ファイル {item} が移動されました。",
"upload_form.drag_and_drop.on_drag_start": "メディア添付ファイル {item} を選択しました。",
"upload_form.edit": "編集",
"upload_form.thumbnail": "サムネイルを変更",
"upload_form.video_description": "聴き取りや視覚的に閲覧が難しいユーザーへの説明",
"upload_modal.analyzing_picture": "画像を解析中…",
"upload_modal.apply": "適用",
"upload_modal.applying": "適用中...",
"upload_modal.choose_image": "画像を選択",
"upload_modal.description_placeholder": "あのイーハトーヴォのすきとおった風",
"upload_modal.detect_text": "画像からテキストを検出",
"upload_modal.edit_media": "メディアを編集",
"upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。",
"upload_modal.preparing_ocr": "OCRの準備中…",
"upload_modal.preview_label": "プレビュー ({ratio})",
"upload_progress.label": "アップロード中...",
"upload_progress.processing": "処理中…",
"username.taken": "このユーザー名はすでに使用されています。ほかのユーザー名を入力してください",

View file

@ -228,9 +228,6 @@
"ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.",
"upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ",
"upload_button.label": "მედიის დამატება",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_progress.label": "იტვირთება...",
"video.close": "ვიდეოს დახურვა",
"video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა",

View file

@ -602,20 +602,7 @@
"upload_button.label": "Rnu taɣwalt",
"upload_error.limit": "Asali n ufaylu iεedda talast.",
"upload_error.poll": "Ur ittusireg ara usali n ufaylu s tefranin.",
"upload_form.audio_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt",
"upload_form.description": "Glem-d i yemdaneni yesɛan ugur deg yiẓri",
"upload_form.edit": "Ẓreg",
"upload_form.thumbnail": "Beddel tugna",
"upload_form.video_description": "Glem-d i yemdanen i yesɛan ugur deg tmesliwt neɣ deg yiẓri",
"upload_modal.analyzing_picture": "Tasleḍt n tugna tetteddu…",
"upload_modal.apply": "Snes",
"upload_modal.applying": "Asnas…",
"upload_modal.choose_image": "Fren tugna",
"upload_modal.description_placeholder": "Aberraɣ arurad ineggez nnig n uqjun amuṭṭis",
"upload_modal.detect_text": "Sefru-d aḍris seg tugna",
"upload_modal.edit_media": "Ẓreg amidya",
"upload_modal.preparing_ocr": "Aheyyi n OCR…",
"upload_modal.preview_label": "Taskant ({ratio})",
"upload_progress.label": "Asali iteddu...",
"upload_progress.processing": "Asesfer…",
"username.taken": "Yettwaṭṭef yisem-a n useqdac. Ɛreḍ wayeḍ",

View file

@ -329,19 +329,7 @@
"upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.",
"upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.",
"upload_form.audio_description": "Есту қабілеті нашар адамдарға сипаттама беріңіз",
"upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз",
"upload_form.edit": "Түзету",
"upload_form.thumbnail": "Суретті өзгерту",
"upload_form.video_description": "Есту немесе көру қабілеті нашар адамдарға сипаттама беріңіз",
"upload_modal.analyzing_picture": "Суретті анализ жасау…",
"upload_modal.apply": "Қолдану",
"upload_modal.choose_image": "Сурет таңдау",
"upload_modal.description_placeholder": "Щучинск съезіндегі өрт пе? Вагон-үй, аэромобиль һәм ұшақ фюзеляжы цехінен ғой",
"upload_modal.detect_text": "Суреттен мәтін анықтау",
"upload_modal.edit_media": "Медиафайлды өңдеу",
"upload_modal.hint": "Алдын-ала қарау шеңберін басыңыз немесе сүйреңіз, барлық нобайларда көрінетін фокусты таңдау үшін.",
"upload_modal.preview_label": "Превью ({ratio})",
"upload_progress.label": "Жүктеп жатыр...",
"video.close": "Видеоны жабу",
"video.download": "Файлды түсіру",

View file

@ -87,8 +87,5 @@
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
"upload_progress.label": "Uploading…"
}

View file

@ -867,26 +867,12 @@
"upload_button.label": "이미지, 영상, 오디오 파일 추가",
"upload_error.limit": "파일 업로드 제한에 도달했습니다.",
"upload_error.poll": "파일 업로드는 설문과 함께 쓸 수 없습니다.",
"upload_form.audio_description": "청각장애인이나 저청각자를 위한 설명",
"upload_form.description": "시각장애인이나 저시력자를 위한 설명",
"upload_form.drag_and_drop.instructions": "미디어 첨부파일을 집으려면 스페이스나 엔터를 누르세요. 드래그 하는 동안 방향키를 이용해 원하는 방향으로 이동할 수 있습니다. 스페이스나 엔터를 다시 눌러 새 위치에 놓거나 ESC를 이용해 취소할 수 있습니다.",
"upload_form.drag_and_drop.on_drag_cancel": "드래그가 취소되었습니다. 미디어 첨부파일 {item}은 이동되지 않았습니다.",
"upload_form.drag_and_drop.on_drag_end": "미디어 첨부파일 {item}은 이동되지 않았습니다.",
"upload_form.drag_and_drop.on_drag_over": "미디어 첨부파일 {item}이 이동되었습니다.",
"upload_form.drag_and_drop.on_drag_start": "미디어 첨부파일 {item}을 집었습니다.",
"upload_form.edit": "수정",
"upload_form.thumbnail": "썸네일 변경",
"upload_form.video_description": "청각장애인, 저청각자, 시각장애인, 저시력자를 위한 설명",
"upload_modal.analyzing_picture": "사진 분석 중…",
"upload_modal.apply": "적용",
"upload_modal.applying": "적용 중...",
"upload_modal.choose_image": "이미지 선택",
"upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파",
"upload_modal.detect_text": "사진에서 문자 탐색",
"upload_modal.edit_media": "미디어 수정",
"upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 초점을 맞추세요. 이 점은 썸네일에서 항상 보여질 부분을 나타냅니다.",
"upload_modal.preparing_ocr": "OCR 준비 중…",
"upload_modal.preview_label": "미리보기 ({ratio})",
"upload_progress.label": "업로드 중...",
"upload_progress.processing": "처리 중...",
"username.taken": "이미 쓰인 사용자명입니다. 다른 것으로 시도해보세요",

View file

@ -514,21 +514,7 @@
"upload_button.label": "Wêne, vîdeoyek an jî pelê dengî tevlî bike",
"upload_error.limit": "Sînora barkirina pelan derbas bû.",
"upload_error.poll": "Di rapirsîyan de mafê barkirina pelan nayê dayîn.",
"upload_form.audio_description": "Ji bona kesên kêm dibihîsin re pênase bike",
"upload_form.description": "Ji bona astengdarên dîtinê re vebêje",
"upload_form.edit": "Serrast bike",
"upload_form.thumbnail": "Wêneyê biçûk biguherîne",
"upload_form.video_description": "Ji bo kesên kerr û lalan pênase bike",
"upload_modal.analyzing_picture": "Wêne tê analîzkirin…",
"upload_modal.apply": "Bisepîne",
"upload_modal.applying": "Tê sepandin…",
"upload_modal.choose_image": "Wêneyê hilbijêre",
"upload_modal.description_placeholder": "Rovîyek qehweyî û bilez li ser kûçikê tîral banz dide",
"upload_modal.detect_text": "Ji nivîsa wêneyê re serwext be",
"upload_modal.edit_media": "Medyayê sererast bike",
"upload_modal.hint": "Ji bo hilbijartina xala navendê her tim dîmenê piçûk de pêşdîtina çerxê bitikîne an jî kaş bike.",
"upload_modal.preparing_ocr": "OCR dihê amadekirin…",
"upload_modal.preview_label": "Pêşdîtin ({ratio})",
"upload_progress.label": "Tê barkirin...",
"upload_progress.processing": "Kar tê kirin…",
"video.close": "Vîdyoyê bigire",

View file

@ -331,20 +331,7 @@
"upload_button.label": "Keworra skeusennow, gwydhyow po sonadow",
"upload_error.limit": "Finweth ughkarga a veu gorfassys.",
"upload_error.poll": "Nyns yw gesys ughkarga restrennow gans sondyansow.",
"upload_form.audio_description": "Deskrifewgh rag tus vodharek",
"upload_form.description": "Deskrifewgh rag tus dhallek",
"upload_form.edit": "Golegi",
"upload_form.thumbnail": "Chanjya avenik",
"upload_form.video_description": "Deskrifa rag tus vodharek po dallek",
"upload_modal.analyzing_picture": "Ow tytratya skeusen…",
"upload_modal.apply": "Gweytha",
"upload_modal.choose_image": "Dewis aven",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Kilela tekst a skeusen",
"upload_modal.edit_media": "Golegi myski",
"upload_modal.hint": "Klykkyewgh po tenna'n kylgh war an gynwel dhe dhewis an poynt fogella neb a vydh pupprys gweladow yn pub avenik.",
"upload_modal.preparing_ocr": "Ow pareusi ANG…",
"upload_modal.preview_label": "Kynwel ({ratio})",
"upload_progress.label": "Owth ughkarga...",
"video.close": "Degea gwydhyow",
"video.download": "Iskarga restren",

View file

@ -240,9 +240,7 @@
"units.short.million": "{count} milionum",
"units.short.thousand": "{count} millia",
"upload_button.label": "Imaginēs, vīdeō aut fīle audītūs adde",
"upload_form.audio_description": "Describe for people who are hard of hearing",
"upload_form.edit": "Recolere",
"upload_modal.description_placeholder": "A velox brunneis vulpes salit super piger canis",
"upload_progress.label": "Uploading…",
"video.mute": "Confutare soni"
}

View file

@ -747,21 +747,7 @@
"upload_button.label": "Adjusta imajes, un video or una dosya audio",
"upload_error.limit": "Limito de dosyas kargadas eksedido.",
"upload_error.poll": "No se permite kargar dosyas kon anketas.",
"upload_form.audio_description": "Deskrive para personas sodras o kon problemes auditivos",
"upload_form.description": "Deskrive para personas siegas o kon problemes vizuales",
"upload_form.edit": "Edita",
"upload_form.thumbnail": "Troka minyatura",
"upload_form.video_description": "Deskrive para personas sodras, kon problemes auditivos, siegas o kon problemes vizuales",
"upload_modal.analyzing_picture": "Analizando imaje…",
"upload_modal.apply": "Aplika",
"upload_modal.applying": "Aplikando…",
"upload_modal.choose_image": "Eskoje imaje",
"upload_modal.description_placeholder": "Lorem ipsum dolor sit amet",
"upload_modal.detect_text": "Detektar teksto de la imaje",
"upload_modal.edit_media": "Edita multimedia",
"upload_modal.hint": "Klika o arrastra el sirkolo en la vista previa para eskojer el punto fokal ke siempre estara en vista en todas las minyaturas.",
"upload_modal.preparing_ocr": "Preparando OCR…",
"upload_modal.preview_label": "Vista previa ({ratio})",
"upload_progress.label": "Kargando...",
"upload_progress.processing": "Prosesando…",
"username.taken": "Akel nombre de utilizador ya esta en uzo. Aprova otruno",

View file

@ -860,26 +860,12 @@
"upload_button.label": "Pridėti vaizdų, vaizdo įrašą arba garso failą",
"upload_error.limit": "Viršyta failo įkėlimo riba.",
"upload_error.poll": "Failų įkėlimas neleidžiamas su apklausomis.",
"upload_form.audio_description": "Aprašyk žmonėms, kurie yra kurtieji ar neprigirdintys.",
"upload_form.description": "Aprašyk žmonėms, kurie yra aklieji arba silpnaregiai.",
"upload_form.drag_and_drop.instructions": "Kad paimtum medijos priedą, paspausk tarpo arba įvedimo klavišą. Tempant naudok rodyklių klavišus, kad perkeltum medijos priedą bet kuria kryptimi. Dar kartą paspausk tarpo arba įvedimo klavišą, kad nuleistum medijos priedą naujoje vietoje, arba paspausk grįžimo klavišą, kad atšauktum.",
"upload_form.drag_and_drop.on_drag_cancel": "Nutempimas buvo atšauktas. Medijos priedas {item} buvo nuleistas.",
"upload_form.drag_and_drop.on_drag_end": "Medijos priedas {item} buvo nuleistas.",
"upload_form.drag_and_drop.on_drag_over": "Medijos priedas {item} buvo perkeltas.",
"upload_form.drag_and_drop.on_drag_start": "Paimtas medijos priedas {item}.",
"upload_form.edit": "Redaguoti",
"upload_form.thumbnail": "Keisti miniatiūrą",
"upload_form.video_description": "Aprašyk žmonėms, kurie yra kurtieji, neprigirdintys, aklieji ar silpnaregiai.",
"upload_modal.analyzing_picture": "Analizuojamas vaizdas…",
"upload_modal.apply": "Taikyti",
"upload_modal.applying": "Pritaikoma…",
"upload_modal.choose_image": "Pasirinkti vaizdą",
"upload_modal.description_placeholder": "Greita rudoji lapė peršoka tinginį šunį",
"upload_modal.detect_text": "Aptikti tekstą iš nuotraukos",
"upload_modal.edit_media": "Redaguoti mediją",
"upload_modal.hint": "Spustelėk arba nuvilk apskritimą peržiūroje, kad pasirinktum centrinį tašką, kuris visada bus matomas visose miniatiūrose.",
"upload_modal.preparing_ocr": "Rengimas OCR…",
"upload_modal.preview_label": "Peržiūra ({ratio})",
"upload_progress.label": "Įkeliama...",
"upload_progress.processing": "Apdorojama…",
"username.taken": "Šis naudotojo vardas užimtas. Pabandyk kitą.",

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