Merge commit '58b3fc03796dbde54dbba9a4c554c2d8d24f81fd' into glitch-soc/merge-upstream
This commit is contained in:
commit
58b29be439
2
.github/renovate.json5
vendored
2
.github/renovate.json5
vendored
@ -23,8 +23,6 @@
|
|||||||
// Require Dependency Dashboard Approval for major version bumps of these node packages
|
// Require Dependency Dashboard Approval for major version bumps of these node packages
|
||||||
matchManagers: ['npm'],
|
matchManagers: ['npm'],
|
||||||
matchPackageNames: [
|
matchPackageNames: [
|
||||||
'tesseract.js', // Requires code changes
|
|
||||||
|
|
||||||
// react-router: Requires manual upgrade
|
// react-router: Requires manual upgrade
|
||||||
'history',
|
'history',
|
||||||
'react-router-dom',
|
'react-router-dom',
|
||||||
|
|||||||
12
CHANGELOG.md
12
CHANGELOG.md
@ -6,13 +6,14 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Add support for allowing and authoring quotes** (#35355, #35578, #35614, #35618, #35624, #35626, #35652, #35629, #35665, #35653, #35670, #35677, #35690, #35697, #35689, #35699, #35700, #35701, #35709, #35714, #35713, #35715, #35725, #35749, #35769, #35780, #35762, #35804, #35808, #35805, #35819, #35824, #35828, #35822, #35835, #35865, #35860, #35832, #35891, #35894, #35895, #35820, #35917, #35924, #35925, #35914, #35930, #35941, #35939, #35948, #35955, #35967, #35990, #35991, #35975, #35971, #36002, #35986, #36031, #36034, #36038, #36054, #36052, #36055, #36065, #36068, #36083, #36087, #36080, #36091, #36090, #36118, #36119, #36128, #36094, #36129, #36138, #36132, #36151, #36158, #36171, #36194, #36220, #36169, #36130, #36249, #36153, #36299, #36291, #36301, #36315, #36317, #36364, #36383, #36381, #36459, #36464, #36461, #36516, #36528, #36549, #36550 and #36559 by @ChaosExAnima, @ClearlyClaire, @Lycolia, @diondiondion, and @tribela)\
|
- **Add support for allowing and authoring quotes** (#35355, #35578, #35614, #35618, #35624, #35626, #35652, #35629, #35665, #35653, #35670, #35677, #35690, #35697, #35689, #35699, #35700, #35701, #35709, #35714, #35713, #35715, #35725, #35749, #35769, #35780, #35762, #35804, #35808, #35805, #35819, #35824, #35828, #35822, #35835, #35865, #35860, #35832, #35891, #35894, #35895, #35820, #35917, #35924, #35925, #35914, #35930, #35941, #35939, #35948, #35955, #35967, #35990, #35991, #35975, #35971, #36002, #35986, #36031, #36034, #36038, #36054, #36052, #36055, #36065, #36068, #36083, #36087, #36080, #36091, #36090, #36118, #36119, #36128, #36094, #36129, #36138, #36132, #36151, #36158, #36171, #36194, #36220, #36169, #36130, #36249, #36153, #36299, #36291, #36301, #36315, #36317, #36364, #36383, #36381, #36459, #36464, #36461, #36516, #36528, #36549, #36550, #36559, #36693, #36704, #36690, #36689, #36696, #36721 and #36695 by @ChaosExAnima, @ClearlyClaire, @Lycolia, @diondiondion, and @tribela)\
|
||||||
This includes a revamp of the composer interface.\
|
This includes a revamp of the composer interface.\
|
||||||
See https://blog.joinmastodon.org/2025/09/introducing-quote-posts/ for a user-centric overview of the feature, and https://docs.joinmastodon.org/client/quotes/ for API documentation.
|
See https://blog.joinmastodon.org/2025/09/introducing-quote-posts/ for a user-centric overview of the feature, and https://docs.joinmastodon.org/client/quotes/ for API documentation.
|
||||||
- **Add support for fetching and refreshing replies to the web UI** (#35210, #35496, #35575, #35500, #35577, #35602, #35603, #35654, #36141, #36237, #36172, #36256, #36271, #36334, #36382, #36239, #36484, #36481, #36583, #36627 and #36547 by @ClearlyClaire, @diondiondion, @Gargron and @renchap)
|
- **Add support for fetching and refreshing replies to the web UI** (#35210, #35496, #35575, #35500, #35577, #35602, #35603, #35654, #36141, #36237, #36172, #36256, #36271, #36334, #36382, #36239, #36484, #36481, #36583, #36627 and #36547 by @ClearlyClaire, @diondiondion, @Gargron and @renchap)
|
||||||
- **Add ability to block words in usernames** (#35407, #35655, and #35806 by @ClearlyClaire and @Gargron)
|
- **Add ability to block words in usernames** (#35407, #35655, and #35806 by @ClearlyClaire and @Gargron)
|
||||||
- Add ability to individually disable local or remote feeds for visitors or logged-in users `disabled` value to server setting for live and topic feeds, as well as user permission to bypass that (#36338, #36467, #36497, #36563, #36577, #36585, and #36607 by @ClearlyClaire)\
|
- Add ability to individually disable local or remote feeds for visitors or logged-in users `disabled` value to server setting for live and topic feeds, as well as user permission to bypass that (#36338, #36467, #36497, #36563, #36577, #36585, #36607 and #36703 by @ClearlyClaire)\
|
||||||
This splits the `timeline_preview` setting into four more granular settings controlling live feeds and topic (hashtag, trending link) feeds, with 3 values each: `public`, `authenticated`, `disabled`.\
|
This splits the `timeline_preview` setting into four more granular settings controlling live feeds and topic (hashtag, trending link) feeds.\
|
||||||
|
The setting for local topic feeds has 2 values: `public` and `authenticated`. Every other setting has 3 values: `public`, `authenticated`, `disabled`.\
|
||||||
When `disabled`, users with the “View live and topic feeds” will still be able to view them.
|
When `disabled`, users with the “View live and topic feeds” will still be able to view them.
|
||||||
- Add support for displaying of quote posts in Moderator UI (#35964 by @ThisIsMissEm)
|
- Add support for displaying of quote posts in Moderator UI (#35964 by @ThisIsMissEm)
|
||||||
- Add support for displaying link previews for Admin UI (#35958 by @ThisIsMissEm)
|
- Add support for displaying link previews for Admin UI (#35958 by @ThisIsMissEm)
|
||||||
@ -43,6 +44,9 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Change appearance settings to introduce new Advanced settings section (#36496 and #36506 by @diondiondion)
|
- Change appearance settings to introduce new Advanced settings section (#36496 and #36506 by @diondiondion)
|
||||||
- Change display of blocked and muted quoted users (#36619 by @ClearlyClaire)\
|
- Change display of blocked and muted quoted users (#36619 by @ClearlyClaire)\
|
||||||
This adds `blocked_account`, `blocked_domain` and `muted_account` values to the `state` attribute of `Quote` and `ShallowQuote` REST API entities.
|
This adds `blocked_account`, `blocked_domain` and `muted_account` values to the `state` attribute of `Quote` and `ShallowQuote` REST API entities.
|
||||||
|
- Change submitting an empty post to show an error rather than failing silently (#36650 by @diondiondion)
|
||||||
|
- Change "Privacy and reach" settings from "Public profile" to their own top-level category (#27294 by @ChaelCodes)
|
||||||
|
- Change number of times quote verification is retried to better deal with temporary failures (#36698 by @ClearlyClaire)
|
||||||
- Change display of content warnings in Admin UI (#35935 by @ThisIsMissEm)
|
- Change display of content warnings in Admin UI (#35935 by @ThisIsMissEm)
|
||||||
- Change styling of column banners (#36531 by @ClearlyClaire)
|
- Change styling of column banners (#36531 by @ClearlyClaire)
|
||||||
- Change recommended Node version to 24 (LTS) (#36539 by @renchap)
|
- Change recommended Node version to 24 (LTS) (#36539 by @renchap)
|
||||||
@ -70,9 +74,11 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Fix relationship not being fetched to evaluate whether to show a quote post (#36517 by @ClearlyClaire)
|
- Fix relationship not being fetched to evaluate whether to show a quote post (#36517 by @ClearlyClaire)
|
||||||
- Fix rendering of poll options in status history modal (#35633 by @ThisIsMissEm)
|
- Fix rendering of poll options in status history modal (#35633 by @ThisIsMissEm)
|
||||||
- Fix “mute” button being displayed to unauthenticated visitors in hashtag dropdown (#36353 by @mkljczk)
|
- Fix “mute” button being displayed to unauthenticated visitors in hashtag dropdown (#36353 by @mkljczk)
|
||||||
|
- Fix initially selected language in Rules panel, hide selector when no alternative translations exist (#36672 by @diondiondion)
|
||||||
- Fix URL comparison for mentions in case of empty path (#36613 and #36626 by @ClearlyClaire)
|
- Fix URL comparison for mentions in case of empty path (#36613 and #36626 by @ClearlyClaire)
|
||||||
- Fix hashtags not being picked up when full-width hash sign is used (#36103 and #36625 by @ClearlyClaire and @Gargron)
|
- Fix hashtags not being picked up when full-width hash sign is used (#36103 and #36625 by @ClearlyClaire and @Gargron)
|
||||||
- Fix layout of severed relationships when purged events are listed (#36593 by @mejofi)
|
- Fix layout of severed relationships when purged events are listed (#36593 by @mejofi)
|
||||||
|
- Fix Skeleton placeholders being animated when setting to reduce animations is enabled (#36716 by @ClearlyClaire)
|
||||||
- Fix vacuum tasks being interrupted by a single batch failure (#36606 by @Gargron)
|
- Fix vacuum tasks being interrupted by a single batch failure (#36606 by @Gargron)
|
||||||
- Fix handling of unreachable network error for search services (#36587 by @mjankowski)
|
- Fix handling of unreachable network error for search services (#36587 by @mjankowski)
|
||||||
- Fix bookmarks export when a bookmarked status is soft-deleted (#36576 by @ClearlyClaire)
|
- Fix bookmarks export when a bookmarked status is soft-deleted (#36576 by @ClearlyClaire)
|
||||||
|
|||||||
2
Gemfile
2
Gemfile
@ -13,7 +13,7 @@ gem 'haml-rails', '~>3.0'
|
|||||||
gem 'pg', '~> 1.5'
|
gem 'pg', '~> 1.5'
|
||||||
gem 'pghero'
|
gem 'pghero'
|
||||||
|
|
||||||
gem 'aws-sdk-core', '< 3.216.0', require: false # TODO: https://github.com/mastodon/mastodon/pull/34173#issuecomment-2733378873
|
gem 'aws-sdk-core', require: false
|
||||||
gem 'aws-sdk-s3', '~> 1.123', require: false
|
gem 'aws-sdk-s3', '~> 1.123', require: false
|
||||||
gem 'blurhash', '~> 0.1'
|
gem 'blurhash', '~> 0.1'
|
||||||
gem 'fog-core', '<= 2.6.0'
|
gem 'fog-core', '<= 2.6.0'
|
||||||
|
|||||||
17
Gemfile.lock
17
Gemfile.lock
@ -96,17 +96,20 @@ GEM
|
|||||||
ast (2.4.3)
|
ast (2.4.3)
|
||||||
attr_required (1.0.2)
|
attr_required (1.0.2)
|
||||||
aws-eventstream (1.4.0)
|
aws-eventstream (1.4.0)
|
||||||
aws-partitions (1.1168.0)
|
aws-partitions (1.1180.0)
|
||||||
aws-sdk-core (3.215.1)
|
aws-sdk-core (3.236.0)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.992.0)
|
aws-partitions (~> 1, >= 1.992.0)
|
||||||
aws-sigv4 (~> 1.9)
|
aws-sigv4 (~> 1.9)
|
||||||
|
base64
|
||||||
|
bigdecimal
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.96.0)
|
logger
|
||||||
aws-sdk-core (~> 3, >= 3.210.0)
|
aws-sdk-kms (1.116.0)
|
||||||
|
aws-sdk-core (~> 3, >= 3.234.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sdk-s3 (1.177.0)
|
aws-sdk-s3 (1.202.0)
|
||||||
aws-sdk-core (~> 3, >= 3.210.0)
|
aws-sdk-core (~> 3, >= 3.234.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sigv4 (1.12.1)
|
aws-sigv4 (1.12.1)
|
||||||
@ -933,7 +936,7 @@ DEPENDENCIES
|
|||||||
active_model_serializers (~> 0.10)
|
active_model_serializers (~> 0.10)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
annotaterb (~> 4.13)
|
annotaterb (~> 4.13)
|
||||||
aws-sdk-core (< 3.216.0)
|
aws-sdk-core
|
||||||
aws-sdk-s3 (~> 1.123)
|
aws-sdk-s3 (~> 1.123)
|
||||||
better_errors (~> 2.9)
|
better_errors (~> 2.9)
|
||||||
binding_of_caller (~> 1.0)
|
binding_of_caller (~> 1.0)
|
||||||
|
|||||||
@ -49,7 +49,11 @@ export const Alert: React.FC<{
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
{hasAction && (
|
{hasAction && (
|
||||||
<button className='notification-bar__action' onClick={onActionClick}>
|
<button
|
||||||
|
className='notification-bar__action'
|
||||||
|
onClick={onActionClick}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
{action}
|
{action}
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -78,6 +78,7 @@ export const Button: React.FC<Props> = ({
|
|||||||
aria-live={loading !== undefined ? 'polite' : undefined}
|
aria-live={loading !== undefined ? 'polite' : undefined}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
title={title}
|
title={title}
|
||||||
|
// eslint-disable-next-line react/button-has-type -- set correctly via TS
|
||||||
type={type}
|
type={type}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
|
|||||||
@ -30,7 +30,7 @@ export const ColumnBackButton: React.FC<{ onClick?: OnClickCallback }> = ({
|
|||||||
const handleClick = useHandleClick(onClick);
|
const handleClick = useHandleClick(onClick);
|
||||||
|
|
||||||
const component = (
|
const component = (
|
||||||
<button onClick={handleClick} className='column-back-button'>
|
<button onClick={handleClick} className='column-back-button' type='button'>
|
||||||
<Icon
|
<Icon
|
||||||
id='chevron-left'
|
id='chevron-left'
|
||||||
icon={ArrowBackIcon}
|
icon={ArrowBackIcon}
|
||||||
|
|||||||
@ -53,6 +53,7 @@ const BackButton: React.FC<{
|
|||||||
compact: onlyIcon,
|
compact: onlyIcon,
|
||||||
})}
|
})}
|
||||||
aria-label={intl.formatMessage(messages.back)}
|
aria-label={intl.formatMessage(messages.back)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
id='chevron-left'
|
id='chevron-left'
|
||||||
@ -172,6 +173,7 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
<button
|
<button
|
||||||
className='text-btn column-header__setting-btn'
|
className='text-btn column-header__setting-btn'
|
||||||
onClick={handlePin}
|
onClick={handlePin}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='times' icon={CloseIcon} />{' '}
|
<Icon id='times' icon={CloseIcon} />{' '}
|
||||||
<FormattedMessage id='column_header.unpin' defaultMessage='Unpin' />
|
<FormattedMessage id='column_header.unpin' defaultMessage='Unpin' />
|
||||||
@ -185,6 +187,7 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
aria-label={intl.formatMessage(messages.moveLeft)}
|
aria-label={intl.formatMessage(messages.moveLeft)}
|
||||||
className='icon-button column-header__setting-btn'
|
className='icon-button column-header__setting-btn'
|
||||||
onClick={handleMoveLeft}
|
onClick={handleMoveLeft}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='chevron-left' icon={ChevronLeftIcon} />
|
<Icon id='chevron-left' icon={ChevronLeftIcon} />
|
||||||
</button>
|
</button>
|
||||||
@ -193,6 +196,7 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
aria-label={intl.formatMessage(messages.moveRight)}
|
aria-label={intl.formatMessage(messages.moveRight)}
|
||||||
className='icon-button column-header__setting-btn'
|
className='icon-button column-header__setting-btn'
|
||||||
onClick={handleMoveRight}
|
onClick={handleMoveRight}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='chevron-right' icon={ChevronRightIcon} />
|
<Icon id='chevron-right' icon={ChevronRightIcon} />
|
||||||
</button>
|
</button>
|
||||||
@ -203,6 +207,7 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
<button
|
<button
|
||||||
className='text-btn column-header__setting-btn'
|
className='text-btn column-header__setting-btn'
|
||||||
onClick={handlePin}
|
onClick={handlePin}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='plus' icon={AddIcon} />{' '}
|
<Icon id='plus' icon={AddIcon} />{' '}
|
||||||
<FormattedMessage id='column_header.pin' defaultMessage='Pin' />
|
<FormattedMessage id='column_header.pin' defaultMessage='Pin' />
|
||||||
@ -237,6 +242,7 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
collapsed ? messages.show : messages.hide,
|
collapsed ? messages.show : messages.hide,
|
||||||
)}
|
)}
|
||||||
onClick={handleToggleClick}
|
onClick={handleToggleClick}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<i className='icon-with-badge'>
|
<i className='icon-with-badge'>
|
||||||
<Icon
|
<Icon
|
||||||
@ -259,7 +265,11 @@ export const ColumnHeader: React.FC<Props> = ({
|
|||||||
<>
|
<>
|
||||||
{backButton}
|
{backButton}
|
||||||
|
|
||||||
<button onClick={handleTitleClick} className='column-header__title'>
|
<button
|
||||||
|
onClick={handleTitleClick}
|
||||||
|
className='column-header__title'
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
{!backButton && (
|
{!backButton && (
|
||||||
<Icon
|
<Icon
|
||||||
id={icon}
|
id={icon}
|
||||||
|
|||||||
@ -74,7 +74,7 @@ export const CopyPasteText: React.FC<{ value: string }> = ({ value }) => {
|
|||||||
onBlur={handleBlur}
|
onBlur={handleBlur}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<button className='button' onClick={handleButtonClick}>
|
<button className='button' onClick={handleButtonClick} type='button'>
|
||||||
<Icon id='copy' icon={ContentCopyIcon} />{' '}
|
<Icon id='copy' icon={ContentCopyIcon} />{' '}
|
||||||
{copied ? (
|
{copied ? (
|
||||||
<FormattedMessage id='copypaste.copied' defaultMessage='Copied' />
|
<FormattedMessage id='copypaste.copied' defaultMessage='Copied' />
|
||||||
|
|||||||
@ -237,6 +237,7 @@ export const DropdownMenu = <Item = MenuItem,>({
|
|||||||
onKeyUp={handleItemKeyUp}
|
onKeyUp={handleItemKeyUp}
|
||||||
data-index={i}
|
data-index={i}
|
||||||
aria-disabled={disabled}
|
aria-disabled={disabled}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<DropdownMenuItemContent item={option} />
|
<DropdownMenuItemContent item={option} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -98,7 +98,12 @@ export const EditedTimestamp: React.FC<{
|
|||||||
className='dropdown-menu__item edited-timestamp__history__item'
|
className='dropdown-menu__item edited-timestamp__history__item'
|
||||||
key={item.get('created_at') as string}
|
key={item.get('created_at') as string}
|
||||||
>
|
>
|
||||||
<button data-index={index} onClick={onClick} onKeyUp={onKeyUp}>
|
<button
|
||||||
|
data-index={index}
|
||||||
|
onClick={onClick}
|
||||||
|
onKeyUp={onKeyUp}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
{label}
|
{label}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
@ -118,7 +123,7 @@ export const EditedTimestamp: React.FC<{
|
|||||||
onItemClick={handleItemClick}
|
onItemClick={handleItemClick}
|
||||||
forceDropdown
|
forceDropdown
|
||||||
>
|
>
|
||||||
<button className='dropdown-menu__text-button'>
|
<button className='dropdown-menu__text-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='status.edited'
|
id='status.edited'
|
||||||
defaultMessage='Edited {date}'
|
defaultMessage='Edited {date}'
|
||||||
|
|||||||
@ -235,7 +235,7 @@ const HashtagBar: React.FC<{
|
|||||||
))}
|
))}
|
||||||
|
|
||||||
{!expanded && hashtags.length > VISIBLE_HASHTAGS && (
|
{!expanded && hashtags.length > VISIBLE_HASHTAGS && (
|
||||||
<button className='link-button' onClick={handleClick}>
|
<button className='link-button' onClick={handleClick} type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='hashtags.and_other'
|
id='hashtags.and_other'
|
||||||
defaultMessage='…and {count, plural, other {# more}}'
|
defaultMessage='…and {count, plural, other {# more}}'
|
||||||
|
|||||||
@ -153,7 +153,7 @@ export const Default = {
|
|||||||
the app.
|
the app.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
When a <button>Button</button> is focused,
|
When a <button type='button'>Button</button> is focused,
|
||||||
<kbd>Enter</kbd>
|
<kbd>Enter</kbd>
|
||||||
should not trigger open, but <kbd>o</kbd>
|
should not trigger open, but <kbd>o</kbd>
|
||||||
should.
|
should.
|
||||||
|
|||||||
@ -23,6 +23,7 @@ export const LearnMoreLink: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
aria-controls={accessibilityId}
|
aria-controls={accessibilityId}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='learn_more_link.learn_more'
|
id='learn_more_link.learn_more'
|
||||||
@ -48,7 +49,11 @@ export const LearnMoreLink: React.FC<{ children: React.ReactNode }> = ({
|
|||||||
<div className='learn-more__popout__content'>{children}</div>
|
<div className='learn-more__popout__content'>{children}</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button className='link-button' onClick={handleClick}>
|
<button
|
||||||
|
className='link-button'
|
||||||
|
onClick={handleClick}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='learn_more_link.got_it'
|
id='learn_more_link.got_it'
|
||||||
defaultMessage='Got it'
|
defaultMessage='Got it'
|
||||||
|
|||||||
@ -32,6 +32,7 @@ export const LoadGap = <T,>({ disabled, param, onClick }: Props<T>) => {
|
|||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
aria-label={intl.formatMessage(messages.load_more)}
|
aria-label={intl.formatMessage(messages.load_more)}
|
||||||
title={intl.formatMessage(messages.load_more)}
|
title={intl.formatMessage(messages.load_more)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<LoadingIndicator />
|
<LoadingIndicator />
|
||||||
|
|||||||
@ -7,7 +7,7 @@ interface Props {
|
|||||||
|
|
||||||
export const LoadPending: React.FC<Props> = ({ onClick, count }) => {
|
export const LoadPending: React.FC<Props> = ({ onClick, count }) => {
|
||||||
return (
|
return (
|
||||||
<button className='load-more load-gap' onClick={onClick}>
|
<button className='load-more load-gap' onClick={onClick} type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='load_pending'
|
id='load_pending'
|
||||||
defaultMessage='{count, plural, one {# new item} other {# new items}}'
|
defaultMessage='{count, plural, one {# new item} other {# new items}}'
|
||||||
|
|||||||
@ -171,13 +171,14 @@ export const Poll: React.FC<PollProps> = ({ pollId, disabled, status }) => {
|
|||||||
className='button button-secondary'
|
className='button button-secondary'
|
||||||
disabled={voteDisabled}
|
disabled={voteDisabled}
|
||||||
onClick={handleVote}
|
onClick={handleVote}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage id='poll.vote' defaultMessage='Vote' />
|
<FormattedMessage id='poll.vote' defaultMessage='Vote' />
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
{!showResults && (
|
{!showResults && (
|
||||||
<>
|
<>
|
||||||
<button className='poll__link' onClick={handleReveal}>
|
<button className='poll__link' onClick={handleReveal} type='button'>
|
||||||
<FormattedMessage id='poll.reveal' defaultMessage='See results' />
|
<FormattedMessage id='poll.reveal' defaultMessage='See results' />
|
||||||
</button>{' '}
|
</button>{' '}
|
||||||
·{' '}
|
·{' '}
|
||||||
@ -185,7 +186,11 @@ export const Poll: React.FC<PollProps> = ({ pollId, disabled, status }) => {
|
|||||||
)}
|
)}
|
||||||
{showResults && !disabled && (
|
{showResults && !disabled && (
|
||||||
<>
|
<>
|
||||||
<button className='poll__link' onClick={handleRefresh}>
|
<button
|
||||||
|
className='poll__link'
|
||||||
|
onClick={handleRefresh}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
<FormattedMessage id='poll.refresh' defaultMessage='Refresh' />
|
<FormattedMessage id='poll.refresh' defaultMessage='Refresh' />
|
||||||
</button>{' '}
|
</button>{' '}
|
||||||
·{' '}
|
·{' '}
|
||||||
|
|||||||
@ -232,6 +232,7 @@ const ReblogMenuItem: FC<ReblogMenuItemProps> = ({
|
|||||||
ref={focusRefCallback}
|
ref={focusRefCallback}
|
||||||
aria-disabled={disabled}
|
aria-disabled={disabled}
|
||||||
data-index={index}
|
data-index={index}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<DropdownMenuItemContent item={item} />
|
<DropdownMenuItemContent item={item} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -49,6 +49,7 @@ export const StatusBanner: React.FC<{
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
ref={buttonRef}
|
ref={buttonRef}
|
||||||
|
type='button'
|
||||||
className='link-button'
|
className='link-button'
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
aria-describedby={descriptionId}
|
aria-describedby={descriptionId}
|
||||||
|
|||||||
@ -73,7 +73,7 @@ const LimitedAccountHint: React.FC<{ accountId: string }> = ({ accountId }) => {
|
|||||||
defaultMessage='This account has been hidden by the moderators of {domain}.'
|
defaultMessage='This account has been hidden by the moderators of {domain}.'
|
||||||
values={{ domain }}
|
values={{ domain }}
|
||||||
/>
|
/>
|
||||||
<button onClick={reveal} className='link-button'>
|
<button onClick={reveal} className='link-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='status.quote_error.limited_account_hint.action'
|
id='status.quote_error.limited_account_hint.action'
|
||||||
defaultMessage='Show anyway'
|
defaultMessage='Show anyway'
|
||||||
@ -129,7 +129,7 @@ const FilteredQuote: React.FC<{
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{message}
|
{message}
|
||||||
<button onClick={reveal} className='link-button'>
|
<button onClick={reveal} className='link-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='status.quote_error.limited_account_hint.action'
|
id='status.quote_error.limited_account_hint.action'
|
||||||
defaultMessage='Show anyway'
|
defaultMessage='Show anyway'
|
||||||
|
|||||||
@ -31,6 +31,7 @@ export const Section: FC<SectionProps> = ({
|
|||||||
className='about__section__title'
|
className='about__section__title'
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
id={collapsed ? 'chevron-right' : 'chevron-down'}
|
id={collapsed ? 'chevron-right' : 'chevron-down'}
|
||||||
|
|||||||
@ -37,6 +37,7 @@ export const DomainPill: React.FC<{
|
|||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
aria-controls={accessibilityId}
|
aria-controls={accessibilityId}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{domain}
|
{domain}
|
||||||
</button>
|
</button>
|
||||||
@ -154,6 +155,7 @@ export const DomainPill: React.FC<{
|
|||||||
<button
|
<button
|
||||||
onClick={handleExpandClick}
|
onClick={handleExpandClick}
|
||||||
className='link-button'
|
className='link-button'
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{x}
|
{x}
|
||||||
</button>
|
</button>
|
||||||
@ -169,6 +171,7 @@ export const DomainPill: React.FC<{
|
|||||||
<button
|
<button
|
||||||
onClick={handleExpandClick}
|
onClick={handleExpandClick}
|
||||||
className='link-button'
|
className='link-button'
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{x}
|
{x}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -489,6 +489,7 @@ export const AltTextModal = forwardRef<ModalRef, Props & Partial<RestoreProps>>(
|
|||||||
className='link-button'
|
className='link-button'
|
||||||
onClick={handleDetectClick}
|
onClick={handleDetectClick}
|
||||||
disabled={type !== 'image' || isDetecting}
|
disabled={type !== 'image' || isDetecting}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='alt_text_modal.add_text_from_image'
|
id='alt_text_modal.add_text_from_image'
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useRef, useCallback, useState, useId } from 'react';
|
import { useEffect, useRef, useCallback, useState } from 'react';
|
||||||
|
|
||||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
@ -22,6 +22,8 @@ import { useAudioVisualizer } from 'mastodon/hooks/useAudioVisualizer';
|
|||||||
import { displayMedia, useBlurhash } from 'mastodon/initial_state';
|
import { displayMedia, useBlurhash } from 'mastodon/initial_state';
|
||||||
import { playerSettings } from 'mastodon/settings';
|
import { playerSettings } from 'mastodon/settings';
|
||||||
|
|
||||||
|
import { AudioVisualizer } from './visualizer';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
play: { id: 'video.play', defaultMessage: 'Play' },
|
play: { id: 'video.play', defaultMessage: 'Play' },
|
||||||
pause: { id: 'video.pause', defaultMessage: 'Pause' },
|
pause: { id: 'video.pause', defaultMessage: 'Pause' },
|
||||||
@ -116,7 +118,6 @@ export const Audio: React.FC<{
|
|||||||
const seekRef = useRef<HTMLDivElement>(null);
|
const seekRef = useRef<HTMLDivElement>(null);
|
||||||
const volumeRef = useRef<HTMLDivElement>(null);
|
const volumeRef = useRef<HTMLDivElement>(null);
|
||||||
const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>();
|
const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>();
|
||||||
const accessibilityId = useId();
|
|
||||||
|
|
||||||
const { audioContextRef, sourceRef, gainNodeRef, playAudio, pauseAudio } =
|
const { audioContextRef, sourceRef, gainNodeRef, playAudio, pauseAudio } =
|
||||||
useAudioContext({ audioElementRef: audioRef });
|
useAudioContext({ audioElementRef: audioRef });
|
||||||
@ -538,19 +539,6 @@ export const Audio: React.FC<{
|
|||||||
[togglePlay, toggleMute],
|
[togglePlay, toggleMute],
|
||||||
);
|
);
|
||||||
|
|
||||||
const springForBand0 = useSpring({
|
|
||||||
to: { r: 50 + (frequencyBands[0] ?? 0) * 10 },
|
|
||||||
config: config.wobbly,
|
|
||||||
});
|
|
||||||
const springForBand1 = useSpring({
|
|
||||||
to: { r: 50 + (frequencyBands[1] ?? 0) * 10 },
|
|
||||||
config: config.wobbly,
|
|
||||||
});
|
|
||||||
const springForBand2 = useSpring({
|
|
||||||
to: { r: 50 + (frequencyBands[2] ?? 0) * 10 },
|
|
||||||
config: config.wobbly,
|
|
||||||
});
|
|
||||||
|
|
||||||
const progress = Math.min((currentTime / loadedDuration) * 100, 100);
|
const progress = Math.min((currentTime / loadedDuration) * 100, 100);
|
||||||
const effectivelyMuted = muted || volume === 0;
|
const effectivelyMuted = muted || volume === 0;
|
||||||
|
|
||||||
@ -641,81 +629,7 @@ export const Audio: React.FC<{
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className='audio-player__controls__play'>
|
<div className='audio-player__controls__play'>
|
||||||
<svg
|
<AudioVisualizer frequencyBands={frequencyBands} poster={poster} />
|
||||||
className='audio-player__visualizer'
|
|
||||||
viewBox='0 0 124 124'
|
|
||||||
xmlns='http://www.w3.org/2000/svg'
|
|
||||||
>
|
|
||||||
<animated.circle
|
|
||||||
opacity={0.5}
|
|
||||||
cx={57}
|
|
||||||
cy={62.5}
|
|
||||||
r={springForBand0.r}
|
|
||||||
fill='var(--player-accent-color)'
|
|
||||||
/>
|
|
||||||
<animated.circle
|
|
||||||
opacity={0.5}
|
|
||||||
cx={65}
|
|
||||||
cy={57.5}
|
|
||||||
r={springForBand1.r}
|
|
||||||
fill='var(--player-accent-color)'
|
|
||||||
/>
|
|
||||||
<animated.circle
|
|
||||||
opacity={0.5}
|
|
||||||
cx={63}
|
|
||||||
cy={66.5}
|
|
||||||
r={springForBand2.r}
|
|
||||||
fill='var(--player-accent-color)'
|
|
||||||
/>
|
|
||||||
|
|
||||||
<g clipPath={`url(#${accessibilityId}-clip)`}>
|
|
||||||
<rect
|
|
||||||
x={14}
|
|
||||||
y={14}
|
|
||||||
width={96}
|
|
||||||
height={96}
|
|
||||||
fill={`url(#${accessibilityId}-pattern)`}
|
|
||||||
/>
|
|
||||||
<rect
|
|
||||||
x={14}
|
|
||||||
y={14}
|
|
||||||
width={96}
|
|
||||||
height={96}
|
|
||||||
fill='var(--player-background-color'
|
|
||||||
opacity={0.45}
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<defs>
|
|
||||||
<pattern
|
|
||||||
id={`${accessibilityId}-pattern`}
|
|
||||||
patternContentUnits='objectBoundingBox'
|
|
||||||
width='1'
|
|
||||||
height='1'
|
|
||||||
>
|
|
||||||
<use href={`#${accessibilityId}-image`} />
|
|
||||||
</pattern>
|
|
||||||
|
|
||||||
<clipPath id={`${accessibilityId}-clip`}>
|
|
||||||
<rect
|
|
||||||
x={14}
|
|
||||||
y={14}
|
|
||||||
width={96}
|
|
||||||
height={96}
|
|
||||||
rx={48}
|
|
||||||
fill='white'
|
|
||||||
/>
|
|
||||||
</clipPath>
|
|
||||||
|
|
||||||
<image
|
|
||||||
id={`${accessibilityId}-image`}
|
|
||||||
href={poster}
|
|
||||||
width={1}
|
|
||||||
height={1}
|
|
||||||
preserveAspectRatio='none'
|
|
||||||
/>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
type='button'
|
type='button'
|
||||||
|
|||||||
100
app/javascript/mastodon/features/audio/visualizer.tsx
Normal file
100
app/javascript/mastodon/features/audio/visualizer.tsx
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import { useId } from 'react';
|
||||||
|
import type { FC } from 'react';
|
||||||
|
|
||||||
|
import { animated, config, useSpring } from '@react-spring/web';
|
||||||
|
|
||||||
|
interface AudioVisualizerProps {
|
||||||
|
frequencyBands?: number[];
|
||||||
|
poster?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const AudioVisualizer: FC<AudioVisualizerProps> = ({
|
||||||
|
frequencyBands = [],
|
||||||
|
poster,
|
||||||
|
}) => {
|
||||||
|
const accessibilityId = useId();
|
||||||
|
|
||||||
|
const springForBand0 = useSpring({
|
||||||
|
to: { r: 50 + (frequencyBands[0] ?? 0) * 10 },
|
||||||
|
config: config.wobbly,
|
||||||
|
});
|
||||||
|
const springForBand1 = useSpring({
|
||||||
|
to: { r: 50 + (frequencyBands[1] ?? 0) * 10 },
|
||||||
|
config: config.wobbly,
|
||||||
|
});
|
||||||
|
const springForBand2 = useSpring({
|
||||||
|
to: { r: 50 + (frequencyBands[2] ?? 0) * 10 },
|
||||||
|
config: config.wobbly,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
className='audio-player__visualizer'
|
||||||
|
viewBox='0 0 124 124'
|
||||||
|
xmlns='http://www.w3.org/2000/svg'
|
||||||
|
>
|
||||||
|
<animated.circle
|
||||||
|
opacity={0.5}
|
||||||
|
cx={57}
|
||||||
|
cy={62.5}
|
||||||
|
r={springForBand0.r}
|
||||||
|
fill='var(--player-accent-color)'
|
||||||
|
/>
|
||||||
|
<animated.circle
|
||||||
|
opacity={0.5}
|
||||||
|
cx={65}
|
||||||
|
cy={57.5}
|
||||||
|
r={springForBand1.r}
|
||||||
|
fill='var(--player-accent-color)'
|
||||||
|
/>
|
||||||
|
<animated.circle
|
||||||
|
opacity={0.5}
|
||||||
|
cx={63}
|
||||||
|
cy={66.5}
|
||||||
|
r={springForBand2.r}
|
||||||
|
fill='var(--player-accent-color)'
|
||||||
|
/>
|
||||||
|
|
||||||
|
<g clipPath={`url(#${accessibilityId}-clip)`}>
|
||||||
|
<rect
|
||||||
|
x={14}
|
||||||
|
y={14}
|
||||||
|
width={96}
|
||||||
|
height={96}
|
||||||
|
fill={`url(#${accessibilityId}-pattern)`}
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
x={14}
|
||||||
|
y={14}
|
||||||
|
width={96}
|
||||||
|
height={96}
|
||||||
|
fill='var(--player-background-color'
|
||||||
|
opacity={0.45}
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id={`${accessibilityId}-pattern`}
|
||||||
|
patternContentUnits='objectBoundingBox'
|
||||||
|
width='1'
|
||||||
|
height='1'
|
||||||
|
>
|
||||||
|
<use href={`#${accessibilityId}-image`} />
|
||||||
|
</pattern>
|
||||||
|
|
||||||
|
<clipPath id={`${accessibilityId}-clip`}>
|
||||||
|
<rect x={14} y={14} width={96} height={96} rx={48} fill='white' />
|
||||||
|
</clipPath>
|
||||||
|
|
||||||
|
<image
|
||||||
|
id={`${accessibilityId}-image`}
|
||||||
|
href={poster}
|
||||||
|
width={1}
|
||||||
|
height={1}
|
||||||
|
preserveAspectRatio='none'
|
||||||
|
/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
};
|
||||||
@ -557,7 +557,11 @@ export const Search: React.FC<{
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<span>{label}</span>
|
<span>{label}</span>
|
||||||
<button className='icon-button' onMouseDown={forget}>
|
<button
|
||||||
|
className='icon-button'
|
||||||
|
onMouseDown={forget}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
<Icon id='times' icon={CloseIcon} />
|
<Icon id='times' icon={CloseIcon} />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -591,6 +595,7 @@ export const Search: React.FC<{
|
|||||||
className={classNames('search__popout__menu__item', {
|
className={classNames('search__popout__menu__item', {
|
||||||
selected: selectedOption === i,
|
selected: selectedOption === i,
|
||||||
})}
|
})}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{label}
|
{label}
|
||||||
</button>
|
</button>
|
||||||
@ -617,6 +622,7 @@ export const Search: React.FC<{
|
|||||||
selectedOption ===
|
selectedOption ===
|
||||||
(quickActions.length || recent.length) + i,
|
(quickActions.length || recent.length) + i,
|
||||||
})}
|
})}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{label}
|
{label}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import { useSortable } from '@dnd-kit/sortable';
|
|||||||
import { CSS } from '@dnd-kit/utilities';
|
import { CSS } from '@dnd-kit/utilities';
|
||||||
|
|
||||||
import CloseIcon from '@/material-icons/400-20px/close.svg?react';
|
import CloseIcon from '@/material-icons/400-20px/close.svg?react';
|
||||||
|
import SoundIcon from '@/material-icons/400-24px/audio.svg?react';
|
||||||
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
|
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
|
||||||
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
|
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
|
||||||
import { undoUploadCompose } from 'mastodon/actions/compose';
|
import { undoUploadCompose } from 'mastodon/actions/compose';
|
||||||
@ -17,7 +18,18 @@ import { openModal } from 'mastodon/actions/modal';
|
|||||||
import { Blurhash } from 'mastodon/components/blurhash';
|
import { Blurhash } from 'mastodon/components/blurhash';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import type { MediaAttachment } from 'mastodon/models/media_attachment';
|
import type { MediaAttachment } from 'mastodon/models/media_attachment';
|
||||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
import {
|
||||||
|
createAppSelector,
|
||||||
|
useAppDispatch,
|
||||||
|
useAppSelector,
|
||||||
|
} from 'mastodon/store';
|
||||||
|
|
||||||
|
import { AudioVisualizer } from '../../audio/visualizer';
|
||||||
|
|
||||||
|
const selectUserAvatar = createAppSelector(
|
||||||
|
[(state) => state.accounts, (state) => state.meta.get('me') as string],
|
||||||
|
(accounts, myId) => accounts.get(myId)?.avatar_static,
|
||||||
|
);
|
||||||
|
|
||||||
export const Upload: React.FC<{
|
export const Upload: React.FC<{
|
||||||
id: string;
|
id: string;
|
||||||
@ -38,6 +50,7 @@ export const Upload: React.FC<{
|
|||||||
const sensitive = useAppSelector(
|
const sensitive = useAppSelector(
|
||||||
(state) => state.compose.get('spoiler') as boolean,
|
(state) => state.compose.get('spoiler') as boolean,
|
||||||
);
|
);
|
||||||
|
const userAvatar = useAppSelector(selectUserAvatar);
|
||||||
|
|
||||||
const handleUndoClick = useCallback(() => {
|
const handleUndoClick = useCallback(() => {
|
||||||
dispatch(undoUploadCompose(id));
|
dispatch(undoUploadCompose(id));
|
||||||
@ -67,6 +80,8 @@ export const Upload: React.FC<{
|
|||||||
transform: CSS.Transform.toString(transform),
|
transform: CSS.Transform.toString(transform),
|
||||||
transition,
|
transition,
|
||||||
};
|
};
|
||||||
|
const preview_url = media.get('preview_url') as string | null;
|
||||||
|
const blurhash = media.get('blurhash') as string | null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@ -85,17 +100,19 @@ export const Upload: React.FC<{
|
|||||||
<div
|
<div
|
||||||
className='compose-form__upload__thumbnail'
|
className='compose-form__upload__thumbnail'
|
||||||
style={{
|
style={{
|
||||||
backgroundImage: !sensitive
|
backgroundImage:
|
||||||
? `url(${media.get('preview_url') as string})`
|
!sensitive && preview_url ? `url(${preview_url})` : undefined,
|
||||||
: undefined,
|
|
||||||
backgroundPosition: `${x}% ${y}%`,
|
backgroundPosition: `${x}% ${y}%`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{sensitive && (
|
{sensitive && blurhash && (
|
||||||
<Blurhash
|
<Blurhash hash={blurhash} className='compose-form__upload__preview' />
|
||||||
hash={media.get('blurhash') as string}
|
)}
|
||||||
className='compose-form__upload__preview'
|
{!sensitive && !preview_url && (
|
||||||
/>
|
<div className='compose-form__upload__visualizer'>
|
||||||
|
<AudioVisualizer poster={userAvatar} />
|
||||||
|
<Icon id='sound' icon={SoundIcon} />
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className='compose-form__upload__actions'>
|
<div className='compose-form__upload__actions'>
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
import { useEffect, useState } from 'react';
|
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
import { FormattedDate, FormattedMessage } from 'react-intl';
|
import { FormattedDate, FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
import { dismissAnnouncement } from '@/mastodon/actions/announcements';
|
||||||
import type { ApiAnnouncementJSON } from '@/mastodon/api_types/announcements';
|
import type { ApiAnnouncementJSON } from '@/mastodon/api_types/announcements';
|
||||||
import { AnimateEmojiProvider } from '@/mastodon/components/emoji/context';
|
import { AnimateEmojiProvider } from '@/mastodon/components/emoji/context';
|
||||||
import { EmojiHTML } from '@/mastodon/components/emoji/html';
|
import { EmojiHTML } from '@/mastodon/components/emoji/html';
|
||||||
|
import { useAppDispatch } from '@/mastodon/store';
|
||||||
|
|
||||||
import { ReactionsBar } from './reactions';
|
import { ReactionsBar } from './reactions';
|
||||||
|
|
||||||
@ -22,13 +24,23 @@ export const Announcement: FC<AnnouncementProps> = ({
|
|||||||
announcement,
|
announcement,
|
||||||
active,
|
active,
|
||||||
}) => {
|
}) => {
|
||||||
const [unread, setUnread] = useState(!announcement.read);
|
const { read, id } = announcement;
|
||||||
|
|
||||||
|
// Dismiss announcement when it becomes active.
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Only update `unread` marker once the announcement is out of view
|
if (active && !read) {
|
||||||
if (!active && unread !== !announcement.read) {
|
dispatch(dismissAnnouncement(id));
|
||||||
setUnread(!announcement.read);
|
|
||||||
}
|
}
|
||||||
}, [announcement.read, active, unread]);
|
}, [active, id, dispatch, read]);
|
||||||
|
|
||||||
|
// But visually show the announcement as read only when it goes out of view.
|
||||||
|
const [unread, setUnread] = useState(!read);
|
||||||
|
useEffect(() => {
|
||||||
|
if (!active && unread !== !read) {
|
||||||
|
setUnread(!read);
|
||||||
|
}
|
||||||
|
}, [active, unread, read]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AnimateEmojiProvider>
|
<AnimateEmojiProvider>
|
||||||
|
|||||||
@ -270,7 +270,7 @@ export const InlineFollowSuggestions: React.FC<{ hidden?: boolean }> = ({
|
|||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div className='inline-follow-suggestions__header__actions'>
|
<div className='inline-follow-suggestions__header__actions'>
|
||||||
<button className='link-button' onClick={handleDismiss}>
|
<button className='link-button' onClick={handleDismiss} type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='follow_suggestions.dismiss'
|
id='follow_suggestions.dismiss'
|
||||||
defaultMessage="Don't show again"
|
defaultMessage="Don't show again"
|
||||||
@ -309,6 +309,7 @@ export const InlineFollowSuggestions: React.FC<{ hidden?: boolean }> = ({
|
|||||||
className='inline-follow-suggestions__body__scroll-button left'
|
className='inline-follow-suggestions__body__scroll-button left'
|
||||||
onClick={handleLeftNav}
|
onClick={handleLeftNav}
|
||||||
aria-label={intl.formatMessage(messages.previous)}
|
aria-label={intl.formatMessage(messages.previous)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<div className='inline-follow-suggestions__body__scroll-button__icon'>
|
<div className='inline-follow-suggestions__body__scroll-button__icon'>
|
||||||
<Icon id='' icon={ChevronLeftIcon} />
|
<Icon id='' icon={ChevronLeftIcon} />
|
||||||
@ -321,6 +322,7 @@ export const InlineFollowSuggestions: React.FC<{ hidden?: boolean }> = ({
|
|||||||
className='inline-follow-suggestions__body__scroll-button right'
|
className='inline-follow-suggestions__body__scroll-button right'
|
||||||
onClick={handleRightNav}
|
onClick={handleRightNav}
|
||||||
aria-label={intl.formatMessage(messages.next)}
|
aria-label={intl.formatMessage(messages.next)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<div className='inline-follow-suggestions__body__scroll-button__icon'>
|
<div className='inline-follow-suggestions__body__scroll-button__icon'>
|
||||||
<Icon id='' icon={ChevronRightIcon} />
|
<Icon id='' icon={ChevronRightIcon} />
|
||||||
|
|||||||
@ -381,6 +381,7 @@ const LoginForm: React.FC<{
|
|||||||
className={classNames('search__popout__menu__item', {
|
className={classNames('search__popout__menu__item', {
|
||||||
selected: selectedOption === i,
|
selected: selectedOption === i,
|
||||||
})}
|
})}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{option
|
{option
|
||||||
.split(domainRegExp)
|
.split(domainRegExp)
|
||||||
@ -451,7 +452,7 @@ const InteractionModal: React.FC<{
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
signupButton = (
|
signupButton = (
|
||||||
<button className='link-button' onClick={handleSignupClick}>
|
<button className='link-button' onClick={handleSignupClick} type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='sign_in_banner.create_account'
|
id='sign_in_banner.create_account'
|
||||||
defaultMessage='Create account'
|
defaultMessage='Create account'
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import { Column } from 'mastodon/components/column';
|
|||||||
import { ColumnHeader } from 'mastodon/components/column_header';
|
import { ColumnHeader } from 'mastodon/components/column_header';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||||
|
import type { List } from 'mastodon/models/list';
|
||||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import { messages as membersMessages } from './members';
|
import { messages as membersMessages } from './members';
|
||||||
@ -72,36 +73,23 @@ const MembersLink: React.FC<{
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const NewList: React.FC<{
|
const NewList: React.FC<{ list?: List | null }> = ({ list }) => {
|
||||||
multiColumn?: boolean;
|
|
||||||
}> = ({ multiColumn }) => {
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { id } = useParams<{ id?: string }>();
|
|
||||||
const intl = useIntl();
|
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
const list = useAppSelector((state) =>
|
const {
|
||||||
id ? state.lists.get(id) : undefined,
|
id,
|
||||||
);
|
title: initialTitle = '',
|
||||||
const [title, setTitle] = useState('');
|
exclusive: initialExclusive = false,
|
||||||
const [exclusive, setExclusive] = useState(false);
|
replies_policy: initialRepliesPolicy = 'list',
|
||||||
const [repliesPolicy, setRepliesPolicy] = useState<RepliesPolicyType>('list');
|
} = list ?? {};
|
||||||
|
|
||||||
|
const [title, setTitle] = useState(initialTitle);
|
||||||
|
const [exclusive, setExclusive] = useState(initialExclusive);
|
||||||
|
const [repliesPolicy, setRepliesPolicy] =
|
||||||
|
useState<RepliesPolicyType>(initialRepliesPolicy);
|
||||||
const [submitting, setSubmitting] = useState(false);
|
const [submitting, setSubmitting] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (id) {
|
|
||||||
dispatch(fetchList(id));
|
|
||||||
}
|
|
||||||
}, [dispatch, id]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (id && list) {
|
|
||||||
setTitle(list.title);
|
|
||||||
setExclusive(list.exclusive);
|
|
||||||
setRepliesPolicy(list.replies_policy);
|
|
||||||
}
|
|
||||||
}, [setTitle, setExclusive, setRepliesPolicy, id, list]);
|
|
||||||
|
|
||||||
const handleTitleChange = useCallback(
|
const handleTitleChange = useCallback(
|
||||||
({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {
|
({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
setTitle(value);
|
setTitle(value);
|
||||||
@ -159,19 +147,6 @@ const NewList: React.FC<{
|
|||||||
}, [history, dispatch, setSubmitting, id, title, exclusive, repliesPolicy]);
|
}, [history, dispatch, setSubmitting, id, title, exclusive, repliesPolicy]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column
|
|
||||||
bindToDocument={!multiColumn}
|
|
||||||
label={intl.formatMessage(id ? messages.edit : messages.create)}
|
|
||||||
>
|
|
||||||
<ColumnHeader
|
|
||||||
title={intl.formatMessage(id ? messages.edit : messages.create)}
|
|
||||||
icon='list-ul'
|
|
||||||
iconComponent={ListAltIcon}
|
|
||||||
multiColumn={multiColumn}
|
|
||||||
showBackButton
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div className='scrollable'>
|
|
||||||
<form className='simple_form app-form' onSubmit={handleSubmit}>
|
<form className='simple_form app-form' onSubmit={handleSubmit}>
|
||||||
<div className='fields-group'>
|
<div className='fields-group'>
|
||||||
<div className='input with_label'>
|
<div className='input with_label'>
|
||||||
@ -264,10 +239,7 @@ const NewList: React.FC<{
|
|||||||
|
|
||||||
<div className='app-form__toggle__toggle'>
|
<div className='app-form__toggle__toggle'>
|
||||||
<div>
|
<div>
|
||||||
<Toggle
|
<Toggle checked={exclusive} onChange={handleExclusiveChange} />
|
||||||
checked={exclusive}
|
|
||||||
onChange={handleExclusiveChange}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
@ -285,6 +257,42 @@ const NewList: React.FC<{
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const NewListWrapper: React.FC<{
|
||||||
|
multiColumn?: boolean;
|
||||||
|
}> = ({ multiColumn }) => {
|
||||||
|
const intl = useIntl();
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
const { id } = useParams<{ id?: string }>();
|
||||||
|
const list = useAppSelector((state) =>
|
||||||
|
id ? state.lists.get(id) : undefined,
|
||||||
|
);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (id) {
|
||||||
|
dispatch(fetchList(id));
|
||||||
|
}
|
||||||
|
}, [dispatch, id]);
|
||||||
|
|
||||||
|
const isLoading = id && !list;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Column
|
||||||
|
bindToDocument={!multiColumn}
|
||||||
|
label={intl.formatMessage(id ? messages.edit : messages.create)}
|
||||||
|
>
|
||||||
|
<ColumnHeader
|
||||||
|
title={intl.formatMessage(id ? messages.edit : messages.create)}
|
||||||
|
icon='list-ul'
|
||||||
|
iconComponent={ListAltIcon}
|
||||||
|
multiColumn={multiColumn}
|
||||||
|
showBackButton
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div className='scrollable'>
|
||||||
|
{isLoading ? <LoadingIndicator /> : <NewList list={list} />}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Helmet>
|
<Helmet>
|
||||||
@ -298,4 +306,4 @@ const NewList: React.FC<{
|
|||||||
};
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line import/no-default-export
|
// eslint-disable-next-line import/no-default-export
|
||||||
export default NewList;
|
export default NewListWrapper;
|
||||||
|
|||||||
@ -113,7 +113,7 @@ export const MoreLink: React.FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Dropdown items={menu} placement='bottom-start'>
|
<Dropdown items={menu} placement='bottom-start'>
|
||||||
<button className='column-link column-link--transparent'>
|
<button className='column-link column-link--transparent' type='button'>
|
||||||
<Icon id='' icon={MoreHorizIcon} className='column-link__icon' />
|
<Icon id='' icon={MoreHorizIcon} className='column-link__icon' />
|
||||||
|
|
||||||
<FormattedMessage id='navigation_bar.more' defaultMessage='More' />
|
<FormattedMessage id='navigation_bar.more' defaultMessage='More' />
|
||||||
|
|||||||
@ -71,6 +71,7 @@ export const SignInBanner: React.FC = () => {
|
|||||||
<button
|
<button
|
||||||
className='button button--block'
|
className='button button--block'
|
||||||
onClick={openClosedRegistrationsModal}
|
onClick={openClosedRegistrationsModal}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='sign_in_banner.create_account'
|
id='sign_in_banner.create_account'
|
||||||
|
|||||||
@ -45,6 +45,7 @@ export const FilteredNotificationsIconButton: React.FC<{
|
|||||||
title={intl.formatMessage(messages.filteredNotifications)}
|
title={intl.formatMessage(messages.filteredNotifications)}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
className={className}
|
className={className}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='filtered-notifications' icon={InventoryIcon} />
|
<Icon id='filtered-notifications' icon={InventoryIcon} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -47,7 +47,7 @@ export const NotificationAnnualReport: React.FC<{
|
|||||||
values={{ year }}
|
values={{ year }}
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
<button onClick={handleClick} className='link-button'>
|
<button onClick={handleClick} className='link-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='notification.annual_report.view'
|
id='notification.annual_report.view'
|
||||||
defaultMessage='View #Wrapstodon'
|
defaultMessage='View #Wrapstodon'
|
||||||
|
|||||||
@ -50,6 +50,7 @@ const BarButton: React.FC<
|
|||||||
className={selectedFilter === type ? 'active' : ''}
|
className={selectedFilter === type ? 'active' : ''}
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
title={title}
|
title={title}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -245,6 +245,7 @@ export const Notifications: React.FC<{
|
|||||||
title={intl.formatMessage(messages.markAsRead)}
|
title={intl.formatMessage(messages.markAsRead)}
|
||||||
onClick={handleMarkAsRead}
|
onClick={handleMarkAsRead}
|
||||||
className='column-header__button'
|
className='column-header__button'
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='done-all' icon={DoneAllIcon} />
|
<Icon id='done-all' icon={DoneAllIcon} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const SearchSection: React.FC<{
|
|||||||
<div className='search-results__section__header'>
|
<div className='search-results__section__header'>
|
||||||
<h3>{title}</h3>
|
<h3>{title}</h3>
|
||||||
{onClickMore && (
|
{onClickMore && (
|
||||||
<button onClick={onClickMore}>
|
<button onClick={onClickMore} type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='search_results.see_all'
|
id='search_results.see_all'
|
||||||
defaultMessage='See all'
|
defaultMessage='See all'
|
||||||
|
|||||||
@ -232,12 +232,14 @@ export const SearchResults: React.FC<{ multiColumn: boolean }> = ({
|
|||||||
<button
|
<button
|
||||||
onClick={handleSelectAll}
|
onClick={handleSelectAll}
|
||||||
className={mappedType === 'all' ? 'active' : undefined}
|
className={mappedType === 'all' ? 'active' : undefined}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage id='search_results.all' defaultMessage='All' />
|
<FormattedMessage id='search_results.all' defaultMessage='All' />
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={handleSelectAccounts}
|
onClick={handleSelectAccounts}
|
||||||
className={mappedType === 'accounts' ? 'active' : undefined}
|
className={mappedType === 'accounts' ? 'active' : undefined}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='search_results.accounts'
|
id='search_results.accounts'
|
||||||
@ -247,6 +249,7 @@ export const SearchResults: React.FC<{ multiColumn: boolean }> = ({
|
|||||||
<button
|
<button
|
||||||
onClick={handleSelectHashtags}
|
onClick={handleSelectHashtags}
|
||||||
className={mappedType === 'hashtags' ? 'active' : undefined}
|
className={mappedType === 'hashtags' ? 'active' : undefined}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='search_results.hashtags'
|
id='search_results.hashtags'
|
||||||
@ -256,6 +259,7 @@ export const SearchResults: React.FC<{ multiColumn: boolean }> = ({
|
|||||||
<button
|
<button
|
||||||
onClick={handleSelectStatuses}
|
onClick={handleSelectStatuses}
|
||||||
className={mappedType === 'statuses' ? 'active' : undefined}
|
className={mappedType === 'statuses' ? 'active' : undefined}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='search_results.statuses'
|
id='search_results.statuses'
|
||||||
|
|||||||
@ -25,7 +25,12 @@ export const ActionsModal: React.FC<{
|
|||||||
|
|
||||||
if (isActionItem(option)) {
|
if (isActionItem(option)) {
|
||||||
element = (
|
element = (
|
||||||
<button onClick={onClick} data-index={i} disabled={disabled}>
|
<button
|
||||||
|
onClick={onClick}
|
||||||
|
data-index={i}
|
||||||
|
disabled={disabled}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
<DropdownMenuItemContent item={option} />
|
<DropdownMenuItemContent item={option} />
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -113,7 +113,7 @@ export const BoostModal: React.FC<{
|
|||||||
|
|
||||||
<div className='spacer' />
|
<div className='spacer' />
|
||||||
|
|
||||||
<button onClick={handleCancel} className='link-button'>
|
<button onClick={handleCancel} className='link-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='confirmation_modal.cancel'
|
id='confirmation_modal.cancel'
|
||||||
defaultMessage='Cancel'
|
defaultMessage='Cancel'
|
||||||
|
|||||||
@ -58,7 +58,7 @@ export const ConfirmationModal: React.FC<
|
|||||||
|
|
||||||
<div className='safety-action-modal__bottom'>
|
<div className='safety-action-modal__bottom'>
|
||||||
<div className='safety-action-modal__actions'>
|
<div className='safety-action-modal__actions'>
|
||||||
<button onClick={onClose} className='link-button'>
|
<button onClick={onClose} className='link-button' type='button'>
|
||||||
{cancel ?? (
|
{cancel ?? (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='confirmation_modal.cancel'
|
id='confirmation_modal.cancel'
|
||||||
@ -70,7 +70,11 @@ export const ConfirmationModal: React.FC<
|
|||||||
{secondary && (
|
{secondary && (
|
||||||
<>
|
<>
|
||||||
<div className='spacer' />
|
<div className='spacer' />
|
||||||
<button onClick={handleSecondary} className='link-button'>
|
<button
|
||||||
|
onClick={handleSecondary}
|
||||||
|
className='link-button'
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
{secondary}
|
{secondary}
|
||||||
</button>
|
</button>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@ -196,7 +196,7 @@ export const DomainBlockModal: React.FC<{
|
|||||||
|
|
||||||
<div className='spacer' />
|
<div className='spacer' />
|
||||||
|
|
||||||
<button onClick={handleCancel} className='link-button'>
|
<button onClick={handleCancel} className='link-button' type='button'>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='confirmation_modal.cancel'
|
id='confirmation_modal.cancel'
|
||||||
defaultMessage='Cancel'
|
defaultMessage='Cancel'
|
||||||
|
|||||||
@ -247,6 +247,7 @@ export const MediaModal: FC<MediaModalProps> = forwardRef<
|
|||||||
className='media-modal__nav media-modal__nav--prev'
|
className='media-modal__nav media-modal__nav--prev'
|
||||||
onClick={handlePrevClick}
|
onClick={handlePrevClick}
|
||||||
aria-label={intl.formatMessage(messages.previous)}
|
aria-label={intl.formatMessage(messages.previous)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='chevron-left' icon={ChevronLeftIcon} />
|
<Icon id='chevron-left' icon={ChevronLeftIcon} />
|
||||||
</button>
|
</button>
|
||||||
@ -257,6 +258,7 @@ export const MediaModal: FC<MediaModalProps> = forwardRef<
|
|||||||
className='media-modal__nav media-modal__nav--next'
|
className='media-modal__nav media-modal__nav--next'
|
||||||
onClick={handleNextClick}
|
onClick={handleNextClick}
|
||||||
aria-label={intl.formatMessage(messages.next)}
|
aria-label={intl.formatMessage(messages.next)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='chevron-right' icon={ChevronRightIcon} />
|
<Icon id='chevron-right' icon={ChevronRightIcon} />
|
||||||
</button>
|
</button>
|
||||||
@ -354,6 +356,7 @@ const MediaPagination: FC<MediaPaginationProps> = ({
|
|||||||
active: i === index,
|
active: i === index,
|
||||||
})}
|
})}
|
||||||
onClick={handleChangeIndex(i)}
|
onClick={handleChangeIndex(i)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
{i + 1}
|
{i + 1}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -127,7 +127,11 @@ const LoginOrSignUp: React.FC = () => {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
signupButton = (
|
signupButton = (
|
||||||
<button className='button' onClick={openClosedRegistrationsModal}>
|
<button
|
||||||
|
className='button'
|
||||||
|
onClick={openClosedRegistrationsModal}
|
||||||
|
type='button'
|
||||||
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='sign_in_banner.create_account'
|
id='sign_in_banner.create_account'
|
||||||
defaultMessage='Create account'
|
defaultMessage='Create account'
|
||||||
@ -195,6 +199,7 @@ export const NavigationBar: React.FC = () => {
|
|||||||
className={classNames('ui__navigation-bar__item', { active: open })}
|
className={classNames('ui__navigation-bar__item', { active: open })}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
aria-label={intl.formatMessage(messages.menu)}
|
aria-label={intl.formatMessage(messages.menu)}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<Icon id='' icon={MenuIcon} />
|
<Icon id='' icon={MenuIcon} />
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@ -875,6 +875,7 @@ export const Video: React.FC<{
|
|||||||
<button
|
<button
|
||||||
className='media-gallery__actions__pill'
|
className='media-gallery__actions__pill'
|
||||||
onClick={toggleReveal}
|
onClick={toggleReveal}
|
||||||
|
type='button'
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='media_gallery.hide'
|
id='media_gallery.hide'
|
||||||
|
|||||||
@ -249,6 +249,7 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
|
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
|
||||||
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
|
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
|
||||||
"confirmations.mute.confirm": "Ігнараваць",
|
"confirmations.mute.confirm": "Ігнараваць",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Звяртацца да рэдагавання",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Не нагадваць зноў",
|
"confirmations.quiet_post_quote_info.dismiss": "Не нагадваць зноў",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Зразумела",
|
"confirmations.quiet_post_quote_info.got_it": "Зразумела",
|
||||||
"confirmations.quiet_post_quote_info.message": "Калі будзеце цытаваць ціхі публічны допіс, Ваш допіс будзе схаваны ад трэндавых стужак.",
|
"confirmations.quiet_post_quote_info.message": "Калі будзеце цытаваць ціхі публічны допіс, Ваш допіс будзе схаваны ад трэндавых стужак.",
|
||||||
|
|||||||
@ -192,6 +192,7 @@
|
|||||||
"community.column_settings.local_only": "Només local",
|
"community.column_settings.local_only": "Només local",
|
||||||
"community.column_settings.media_only": "Només contingut",
|
"community.column_settings.media_only": "Només contingut",
|
||||||
"community.column_settings.remote_only": "Només remot",
|
"community.column_settings.remote_only": "Només remot",
|
||||||
|
"compose.error.blank_post": "La publicació no pot estar en blanc.",
|
||||||
"compose.language.change": "Canvia d'idioma",
|
"compose.language.change": "Canvia d'idioma",
|
||||||
"compose.language.search": "Cerca idiomes...",
|
"compose.language.search": "Cerca idiomes...",
|
||||||
"compose.published.body": "Tut publicat.",
|
"compose.published.body": "Tut publicat.",
|
||||||
@ -398,6 +399,7 @@
|
|||||||
"follow_suggestions.who_to_follow": "A qui seguir",
|
"follow_suggestions.who_to_follow": "A qui seguir",
|
||||||
"followed_tags": "Etiquetes seguides",
|
"followed_tags": "Etiquetes seguides",
|
||||||
"footer.about": "Quant a",
|
"footer.about": "Quant a",
|
||||||
|
"footer.about_this_server": "Quant a",
|
||||||
"footer.directory": "Directori de perfils",
|
"footer.directory": "Directori de perfils",
|
||||||
"footer.get_app": "Aconsegueix l'app",
|
"footer.get_app": "Aconsegueix l'app",
|
||||||
"footer.keyboard_shortcuts": "Dreceres de teclat",
|
"footer.keyboard_shortcuts": "Dreceres de teclat",
|
||||||
@ -745,7 +747,9 @@
|
|||||||
"privacy.unlisted.short": "Públic silenciós",
|
"privacy.unlisted.short": "Públic silenciós",
|
||||||
"privacy_policy.last_updated": "Darrera actualització {date}",
|
"privacy_policy.last_updated": "Darrera actualització {date}",
|
||||||
"privacy_policy.title": "Política de Privacitat",
|
"privacy_policy.title": "Política de Privacitat",
|
||||||
|
"quote_error.edit": "No es poden afegir cites en editar una publicació.",
|
||||||
"quote_error.poll": "Amb les enquestes no es permeten cites.",
|
"quote_error.poll": "Amb les enquestes no es permeten cites.",
|
||||||
|
"quote_error.private_mentions": "Amb mencions directes no es permeten cites.",
|
||||||
"quote_error.quote": "Només es permet una cita alhora.",
|
"quote_error.quote": "Només es permet una cita alhora.",
|
||||||
"quote_error.unauthorized": "No se us permet de citar aquesta publicació.",
|
"quote_error.unauthorized": "No se us permet de citar aquesta publicació.",
|
||||||
"quote_error.upload": "Amb media adjunts no es permeten cites.",
|
"quote_error.upload": "Amb media adjunts no es permeten cites.",
|
||||||
@ -867,6 +871,7 @@
|
|||||||
"status.contains_quote": "Conté una cita",
|
"status.contains_quote": "Conté una cita",
|
||||||
"status.context.loading": "Es carreguen més respostes",
|
"status.context.loading": "Es carreguen més respostes",
|
||||||
"status.context.loading_error": "No s'han pogut carregar respostes noves",
|
"status.context.loading_error": "No s'han pogut carregar respostes noves",
|
||||||
|
"status.context.loading_success": "S'han carregat les noves respostes",
|
||||||
"status.context.more_replies_found": "S'han trobat més respostes",
|
"status.context.more_replies_found": "S'han trobat més respostes",
|
||||||
"status.context.retry": "Torna-ho a provar",
|
"status.context.retry": "Torna-ho a provar",
|
||||||
"status.context.show": "Mostra",
|
"status.context.show": "Mostra",
|
||||||
@ -898,9 +903,12 @@
|
|||||||
"status.pin": "Fixa en el perfil",
|
"status.pin": "Fixa en el perfil",
|
||||||
"status.quote": "Cita",
|
"status.quote": "Cita",
|
||||||
"status.quote.cancel": "Canceŀlar la citació",
|
"status.quote.cancel": "Canceŀlar la citació",
|
||||||
|
"status.quote_error.blocked_account_hint.title": "Aquesta publicació està amagada perquè heu blocat a @{name}.",
|
||||||
|
"status.quote_error.blocked_domain_hint.title": "Aquesta publicació està amagada perquè heu blocat a {domain}.",
|
||||||
"status.quote_error.filtered": "No es mostra a causa d'un dels vostres filtres",
|
"status.quote_error.filtered": "No es mostra a causa d'un dels vostres filtres",
|
||||||
"status.quote_error.limited_account_hint.action": "Mostra-la igualment",
|
"status.quote_error.limited_account_hint.action": "Mostra-la igualment",
|
||||||
"status.quote_error.limited_account_hint.title": "Aquest perfil l'han amagat els moderadors de {domain}.",
|
"status.quote_error.limited_account_hint.title": "Aquest perfil l'han amagat els moderadors de {domain}.",
|
||||||
|
"status.quote_error.muted_account_hint.title": "Aquesta publicació està amagada perquè heu silenciat a @{name}.",
|
||||||
"status.quote_error.not_available": "Publicació no disponible",
|
"status.quote_error.not_available": "Publicació no disponible",
|
||||||
"status.quote_error.pending_approval": "Publicació pendent",
|
"status.quote_error.pending_approval": "Publicació pendent",
|
||||||
"status.quote_error.pending_approval_popout.body": "A Mastodon pots controlar si algú et pot citar. Aquesta publicació està pendent mentre esperem l'aprovació de l'autor original.",
|
"status.quote_error.pending_approval_popout.body": "A Mastodon pots controlar si algú et pot citar. Aquesta publicació està pendent mentre esperem l'aprovació de l'autor original.",
|
||||||
@ -999,6 +1007,7 @@
|
|||||||
"visibility_modal.helper.direct_quoting": "No es poden citar mencions privades fetes a Mastondon.",
|
"visibility_modal.helper.direct_quoting": "No es poden citar mencions privades fetes a Mastondon.",
|
||||||
"visibility_modal.helper.private_quoting": "No es poden citar publicacions fetes a Mastodon només per a seguidors.",
|
"visibility_modal.helper.private_quoting": "No es poden citar publicacions fetes a Mastodon només per a seguidors.",
|
||||||
"visibility_modal.helper.unlisted_quoting": "Quan la gent et citi les seves publicacions estaran amagades de les línies de temps de tendències.",
|
"visibility_modal.helper.unlisted_quoting": "Quan la gent et citi les seves publicacions estaran amagades de les línies de temps de tendències.",
|
||||||
|
"visibility_modal.instructions": "Controleu qui pot interactuar amb aquesta publicació. També podeu aplicar la configuració a totes les publicacions futures navegant a <link>Preferències > Valors per defecte de publicació</link>.",
|
||||||
"visibility_modal.privacy_label": "Visibilitat",
|
"visibility_modal.privacy_label": "Visibilitat",
|
||||||
"visibility_modal.quote_followers": "Només seguidors",
|
"visibility_modal.quote_followers": "Només seguidors",
|
||||||
"visibility_modal.quote_label": "Qui pot citar",
|
"visibility_modal.quote_label": "Qui pot citar",
|
||||||
|
|||||||
@ -196,6 +196,7 @@
|
|||||||
"community.column_settings.local_only": "Pouze místní",
|
"community.column_settings.local_only": "Pouze místní",
|
||||||
"community.column_settings.media_only": "Pouze média",
|
"community.column_settings.media_only": "Pouze média",
|
||||||
"community.column_settings.remote_only": "Pouze vzdálené",
|
"community.column_settings.remote_only": "Pouze vzdálené",
|
||||||
|
"compose.error.blank_post": "Příspěvek nemůže být prázdný.",
|
||||||
"compose.language.change": "Změnit jazyk",
|
"compose.language.change": "Změnit jazyk",
|
||||||
"compose.language.search": "Prohledat jazyky...",
|
"compose.language.search": "Prohledat jazyky...",
|
||||||
"compose.published.body": "Příspěvek zveřejněn.",
|
"compose.published.body": "Příspěvek zveřejněn.",
|
||||||
@ -248,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Přesto odeslat",
|
"confirmations.missing_alt_text.secondary": "Přesto odeslat",
|
||||||
"confirmations.missing_alt_text.title": "Přidat popisek?",
|
"confirmations.missing_alt_text.title": "Přidat popisek?",
|
||||||
"confirmations.mute.confirm": "Skrýt",
|
"confirmations.mute.confirm": "Skrýt",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Zpět k úpravám",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Publikovat příspěvek",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Nezobrazujte mi znovu tuto zprávu",
|
||||||
|
"confirmations.private_quote_notify.message": "Osoba, kterou citujete, a další zmínění budou upozorněni a budou moci si zobrazit váš příspěvek, i pokud vás nesledují.",
|
||||||
|
"confirmations.private_quote_notify.title": "Sdílet se sledujícími a zmíněnými uživateli?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Znovu nepřípomínat",
|
"confirmations.quiet_post_quote_info.dismiss": "Znovu nepřípomínat",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Rozumím",
|
"confirmations.quiet_post_quote_info.got_it": "Rozumím",
|
||||||
"confirmations.quiet_post_quote_info.message": "Při citování ztišeného veřejného příspěvku, váš příspěvek bude skrytý z os populárních příspěvků.",
|
"confirmations.quiet_post_quote_info.message": "Při citování ztišeného veřejného příspěvku, váš příspěvek bude skrytý z os populárních příspěvků.",
|
||||||
@ -407,6 +413,7 @@
|
|||||||
"follow_suggestions.who_to_follow": "Koho sledovat",
|
"follow_suggestions.who_to_follow": "Koho sledovat",
|
||||||
"followed_tags": "Sledované hashtagy",
|
"followed_tags": "Sledované hashtagy",
|
||||||
"footer.about": "O aplikaci",
|
"footer.about": "O aplikaci",
|
||||||
|
"footer.about_this_server": "O serveru",
|
||||||
"footer.directory": "Adresář profilů",
|
"footer.directory": "Adresář profilů",
|
||||||
"footer.get_app": "Získat aplikaci",
|
"footer.get_app": "Získat aplikaci",
|
||||||
"footer.keyboard_shortcuts": "Klávesové zkratky",
|
"footer.keyboard_shortcuts": "Klávesové zkratky",
|
||||||
@ -758,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Zásady ochrany osobních údajů",
|
"privacy_policy.title": "Zásady ochrany osobních údajů",
|
||||||
"quote_error.edit": "Citáty nemohou být přidány při úpravě příspěvku.",
|
"quote_error.edit": "Citáty nemohou být přidány při úpravě příspěvku.",
|
||||||
"quote_error.poll": "Citování není u dotazníků povoleno.",
|
"quote_error.poll": "Citování není u dotazníků povoleno.",
|
||||||
|
"quote_error.private_mentions": "Citování není povoleno s přímými zmínkami.",
|
||||||
"quote_error.quote": "Je povoleno citovat pouze jednou.",
|
"quote_error.quote": "Je povoleno citovat pouze jednou.",
|
||||||
"quote_error.unauthorized": "Nemáte oprávnění citovat tento příspěvek.",
|
"quote_error.unauthorized": "Nemáte oprávnění citovat tento příspěvek.",
|
||||||
"quote_error.upload": "Není povoleno citovat s přílohami.",
|
"quote_error.upload": "Není povoleno citovat s přílohami.",
|
||||||
@ -1011,6 +1019,8 @@
|
|||||||
"video.volume_down": "Snížit hlasitost",
|
"video.volume_down": "Snížit hlasitost",
|
||||||
"video.volume_up": "Zvýšit hlasitost",
|
"video.volume_up": "Zvýšit hlasitost",
|
||||||
"visibility_modal.button_title": "Nastavit viditelnost",
|
"visibility_modal.button_title": "Nastavit viditelnost",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Pokud uložíte aktuální nastavení, vložená citace bude převedena na odkaz.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Citace nemohou být vloženy do soukromých zmínek",
|
||||||
"visibility_modal.header": "Viditelnost a interakce",
|
"visibility_modal.header": "Viditelnost a interakce",
|
||||||
"visibility_modal.helper.direct_quoting": "Soukromé zmínky, které jsou vytvořeny na Mastodonu, nemohou být citovány ostatními.",
|
"visibility_modal.helper.direct_quoting": "Soukromé zmínky, které jsou vytvořeny na Mastodonu, nemohou být citovány ostatními.",
|
||||||
"visibility_modal.helper.privacy_editing": "Viditelnost nelze změnit po publikování příspěvku.",
|
"visibility_modal.helper.privacy_editing": "Viditelnost nelze změnit po publikování příspěvku.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
|
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
|
||||||
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
|
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
|
||||||
"confirmations.mute.confirm": "Skjul",
|
"confirmations.mute.confirm": "Skjul",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Tilbage til redigering",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Offentliggør indlæg",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Vis ikke denne besked igen",
|
||||||
|
"confirmations.private_quote_notify.message": "Den person, du citerer og andre omtalte vil blive underrettet, og vil være i stand til at se dit indlæg, selv om de ikke følger dig.",
|
||||||
|
"confirmations.private_quote_notify.title": "Del med følgere og omtalte brugere?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Påmind mig ikke igen",
|
"confirmations.quiet_post_quote_info.dismiss": "Påmind mig ikke igen",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Forstået",
|
"confirmations.quiet_post_quote_info.got_it": "Forstået",
|
||||||
"confirmations.quiet_post_quote_info.message": "Når du citerer et stille offentligt indlæg, vil dit indlæg blive skjult fra trendtidslinjer.",
|
"confirmations.quiet_post_quote_info.message": "Når du citerer et stille offentligt indlæg, vil dit indlæg blive skjult fra trendtidslinjer.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Privatlivspolitik",
|
"privacy_policy.title": "Privatlivspolitik",
|
||||||
"quote_error.edit": "Citater kan ikke tilføjes ved redigering af et indlæg.",
|
"quote_error.edit": "Citater kan ikke tilføjes ved redigering af et indlæg.",
|
||||||
"quote_error.poll": "Citering ikke tilladt i afstemninger.",
|
"quote_error.poll": "Citering ikke tilladt i afstemninger.",
|
||||||
|
"quote_error.private_mentions": "Citering er ikke tilladt med direkte omtaler.",
|
||||||
"quote_error.quote": "Kun ét citat ad gangen er tilladt.",
|
"quote_error.quote": "Kun ét citat ad gangen er tilladt.",
|
||||||
"quote_error.unauthorized": "Du har ikke tilladelse til at citere dette indlæg.",
|
"quote_error.unauthorized": "Du har ikke tilladelse til at citere dette indlæg.",
|
||||||
"quote_error.upload": "Citering ikke tilladt ved medievedhæftninger.",
|
"quote_error.upload": "Citering ikke tilladt ved medievedhæftninger.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "Lydstyrke ned",
|
"video.volume_down": "Lydstyrke ned",
|
||||||
"video.volume_up": "Lydstyrke op",
|
"video.volume_up": "Lydstyrke op",
|
||||||
"visibility_modal.button_title": "Indstil synlighed",
|
"visibility_modal.button_title": "Indstil synlighed",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Hvis du gemmer de aktuelle indstillinger, vil det indlejrede citat blive konverteret til et link.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Citater kan ikke indlejres i private omtaler",
|
||||||
"visibility_modal.header": "Synlighed og interaktion",
|
"visibility_modal.header": "Synlighed og interaktion",
|
||||||
"visibility_modal.helper.direct_quoting": "Private omtaler forfattet på Mastodon kan ikke citeres af andre.",
|
"visibility_modal.helper.direct_quoting": "Private omtaler forfattet på Mastodon kan ikke citeres af andre.",
|
||||||
"visibility_modal.helper.privacy_editing": "Synlighed kan ikke ændres, efter at et indlæg er offentliggjort.",
|
"visibility_modal.helper.privacy_editing": "Synlighed kan ikke ændres, efter at et indlæg er offentliggjort.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Trotzdem veröffentlichen",
|
"confirmations.missing_alt_text.secondary": "Trotzdem veröffentlichen",
|
||||||
"confirmations.missing_alt_text.title": "Bildbeschreibung hinzufügen?",
|
"confirmations.missing_alt_text.title": "Bildbeschreibung hinzufügen?",
|
||||||
"confirmations.mute.confirm": "Stummschalten",
|
"confirmations.mute.confirm": "Stummschalten",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Zurück zum Bearbeiten",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Beitrag veröffentlichen",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Diese Nachricht nicht erneut anzeigen",
|
||||||
|
"confirmations.private_quote_notify.message": "Die zitierte Person und andere erwähnte Personen werden benachrichtigt und können Ihren Beitrag sehen, auch wenn sie dir nicht folgen.",
|
||||||
|
"confirmations.private_quote_notify.title": "Mit Followern und erwähnten Nutzern teilen?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Nicht mehr anzeigen",
|
"confirmations.quiet_post_quote_info.dismiss": "Nicht mehr anzeigen",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Verstanden",
|
"confirmations.quiet_post_quote_info.got_it": "Verstanden",
|
||||||
"confirmations.quiet_post_quote_info.message": "Beim Zitieren eines Beitrags mit der Sichtbarkeit „Öffentlich (still)“ wird dein zitierter Beitrag ebenfalls nicht in den Trends und öffentlichen Timelines angezeigt.",
|
"confirmations.quiet_post_quote_info.message": "Beim Zitieren eines Beitrags mit der Sichtbarkeit „Öffentlich (still)“ wird dein zitierter Beitrag ebenfalls nicht in den Trends und öffentlichen Timelines angezeigt.",
|
||||||
@ -1013,6 +1018,8 @@
|
|||||||
"video.volume_down": "Leiser",
|
"video.volume_down": "Leiser",
|
||||||
"video.volume_up": "Lauter",
|
"video.volume_up": "Lauter",
|
||||||
"visibility_modal.button_title": "Sichtbarkeit festlegen",
|
"visibility_modal.button_title": "Sichtbarkeit festlegen",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Wenn die aktuellen Einstellungen gespeichert werden, wird das eingebettete Zitat in einen Link umgewandelt.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Zitate können nicht in private Erwähnungen eingebettet werden",
|
||||||
"visibility_modal.header": "Sichtbarkeit und Interaktion",
|
"visibility_modal.header": "Sichtbarkeit und Interaktion",
|
||||||
"visibility_modal.helper.direct_quoting": "Private Erwähnungen, die auf Mastodon verfasst wurden, können nicht von anderen zitiert werden.",
|
"visibility_modal.helper.direct_quoting": "Private Erwähnungen, die auf Mastodon verfasst wurden, können nicht von anderen zitiert werden.",
|
||||||
"visibility_modal.helper.privacy_editing": "Die Sichtbarkeit eines bereits veröffentlichten Beitrags kann nachträglich nicht mehr geändert werden.",
|
"visibility_modal.helper.privacy_editing": "Die Sichtbarkeit eines bereits veröffentlichten Beitrags kann nachträglich nicht mehr geändert werden.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
|
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
|
||||||
"confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;",
|
"confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;",
|
||||||
"confirmations.mute.confirm": "Αποσιώπηση",
|
"confirmations.mute.confirm": "Αποσιώπηση",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Πίσω στην επεξεργασία",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Δημοσίευση ανάρτησης",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Να μην εμφανιστεί ξανά αυτό το μήνυμα",
|
||||||
|
"confirmations.private_quote_notify.message": "Το άτομο που παραθέτετε και άλλες επισημάνσεις θα ειδοποιηθούν και θα μπορούν να δουν την ανάρτησή σας, ακόμη και αν δεν σας ακολουθούν.",
|
||||||
|
"confirmations.private_quote_notify.title": "Κοινοποίηση με τους ακολούθους και τους επισημασμένους χρήστες;",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Μη μου το ξαναθυμίσεις",
|
"confirmations.quiet_post_quote_info.dismiss": "Μη μου το ξαναθυμίσεις",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Το κατάλαβα",
|
"confirmations.quiet_post_quote_info.got_it": "Το κατάλαβα",
|
||||||
"confirmations.quiet_post_quote_info.message": "Όταν παραθέτετε μια ήσυχη δημόσια ανάρτηση, η ανάρτηση σας θα είναι κρυμμένη από τις δημοφιλείς ροές.",
|
"confirmations.quiet_post_quote_info.message": "Όταν παραθέτετε μια ήσυχη δημόσια ανάρτηση, η ανάρτηση σας θα είναι κρυμμένη από τις δημοφιλείς ροές.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Πολιτική Απορρήτου",
|
"privacy_policy.title": "Πολιτική Απορρήτου",
|
||||||
"quote_error.edit": "Δεν μπορούν να προστεθούν παραθέσεις κατά την επεξεργασία μιας ανάρτησης.",
|
"quote_error.edit": "Δεν μπορούν να προστεθούν παραθέσεις κατά την επεξεργασία μιας ανάρτησης.",
|
||||||
"quote_error.poll": "Η παράθεση δεν επιτρέπεται με δημοσκοπήσεις.",
|
"quote_error.poll": "Η παράθεση δεν επιτρέπεται με δημοσκοπήσεις.",
|
||||||
|
"quote_error.private_mentions": "Η παράθεση δεν επιτρέπεται με άμεσες επισημάνσεις.",
|
||||||
"quote_error.quote": "Επιτρέπεται μόνο μία παράθεση τη φορά.",
|
"quote_error.quote": "Επιτρέπεται μόνο μία παράθεση τη φορά.",
|
||||||
"quote_error.unauthorized": "Δεν είστε εξουσιοδοτημένοι να παραθέσετε αυτή την ανάρτηση.",
|
"quote_error.unauthorized": "Δεν είστε εξουσιοδοτημένοι να παραθέσετε αυτή την ανάρτηση.",
|
||||||
"quote_error.upload": "Η παράθεση δεν επιτρέπεται με συνημμένα πολυμέσων.",
|
"quote_error.upload": "Η παράθεση δεν επιτρέπεται με συνημμένα πολυμέσων.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "Μείωση έντασης",
|
"video.volume_down": "Μείωση έντασης",
|
||||||
"video.volume_up": "Αύξηση έντασης",
|
"video.volume_up": "Αύξηση έντασης",
|
||||||
"visibility_modal.button_title": "Ορισμός ορατότητας",
|
"visibility_modal.button_title": "Ορισμός ορατότητας",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Εάν αποθηκεύσετε τις τρέχουσες ρυθμίσεις, η ενσωματωμένη παράθεση θα μετατραπεί σε σύνδεσμο.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Οι παραθέσεις δεν μπορούν να ενσωματωθούν σε ιδιωτικές επισημάνσεις",
|
||||||
"visibility_modal.header": "Ορατότητα και αλληλεπίδραση",
|
"visibility_modal.header": "Ορατότητα και αλληλεπίδραση",
|
||||||
"visibility_modal.helper.direct_quoting": "Ιδιωτικές αναφορές που έχουν συνταχθεί στο Mastodon δεν μπορούν να γίνουν παράθεση από άλλους.",
|
"visibility_modal.helper.direct_quoting": "Ιδιωτικές αναφορές που έχουν συνταχθεί στο Mastodon δεν μπορούν να γίνουν παράθεση από άλλους.",
|
||||||
"visibility_modal.helper.privacy_editing": "Η ορατότητα δεν μπορεί να αλλάξει μετά τη δημοσίευση μιας ανάρτησης.",
|
"visibility_modal.helper.privacy_editing": "Η ορατότητα δεν μπορεί να αλλάξει μετά τη δημοσίευση μιας ανάρτησης.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Enviar de todos modos",
|
"confirmations.missing_alt_text.secondary": "Enviar de todos modos",
|
||||||
"confirmations.missing_alt_text.title": "¿Agregar texto alternativo?",
|
"confirmations.missing_alt_text.title": "¿Agregar texto alternativo?",
|
||||||
"confirmations.mute.confirm": "Silenciar",
|
"confirmations.mute.confirm": "Silenciar",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Volver a editar",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Enviar mensaje",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "No mostrarme este mensaje de nuevo",
|
||||||
|
"confirmations.private_quote_notify.message": "La cuenta a la que estás citando y otras menciones serán notificadas y podrán ver tu mensaje, incluso si no te están siguiendo.",
|
||||||
|
"confirmations.private_quote_notify.title": "¿Compartir con seguidores y usuarios mencionados?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "No recordar de nuevo",
|
"confirmations.quiet_post_quote_info.dismiss": "No recordar de nuevo",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
||||||
"confirmations.quiet_post_quote_info.message": "Al citar un mensaje público pero silencioso, tu mensaje se ocultará de las líneas temporales de tendencias.",
|
"confirmations.quiet_post_quote_info.message": "Al citar un mensaje público pero silencioso, tu mensaje se ocultará de las líneas temporales de tendencias.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Política de privacidad",
|
"privacy_policy.title": "Política de privacidad",
|
||||||
"quote_error.edit": "Las citas no se pueden agregar al editar un mensaje.",
|
"quote_error.edit": "Las citas no se pueden agregar al editar un mensaje.",
|
||||||
"quote_error.poll": "No se permite citar encuestas.",
|
"quote_error.poll": "No se permite citar encuestas.",
|
||||||
|
"quote_error.private_mentions": "No se permite citar con menciones directas.",
|
||||||
"quote_error.quote": "Solo se permite una cita a la vez.",
|
"quote_error.quote": "Solo se permite una cita a la vez.",
|
||||||
"quote_error.unauthorized": "No tenés autorización para citar este mensaje.",
|
"quote_error.unauthorized": "No tenés autorización para citar este mensaje.",
|
||||||
"quote_error.upload": "No se permite citar con archivos multimedia.",
|
"quote_error.upload": "No se permite citar con archivos multimedia.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "Bajar volumen",
|
"video.volume_down": "Bajar volumen",
|
||||||
"video.volume_up": "Subir volumen",
|
"video.volume_up": "Subir volumen",
|
||||||
"visibility_modal.button_title": "Establecer visibilidad",
|
"visibility_modal.button_title": "Establecer visibilidad",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Si guardás la configuración actual, la cita insertada se convertirá en un enlace.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Las citas no pueden ser insertadas en menciones privadas",
|
||||||
"visibility_modal.header": "Visibilidad e interacción",
|
"visibility_modal.header": "Visibilidad e interacción",
|
||||||
"visibility_modal.helper.direct_quoting": "Las menciones privadas redactadas en Mastodon no pueden ser citadas por otras cuentas.",
|
"visibility_modal.helper.direct_quoting": "Las menciones privadas redactadas en Mastodon no pueden ser citadas por otras cuentas.",
|
||||||
"visibility_modal.helper.privacy_editing": "La visibilidad no se puede cambiar después de que se haya enviado un mensaje.",
|
"visibility_modal.helper.privacy_editing": "La visibilidad no se puede cambiar después de que se haya enviado un mensaje.",
|
||||||
|
|||||||
@ -157,6 +157,7 @@
|
|||||||
"bundle_modal_error.close": "Pechar",
|
"bundle_modal_error.close": "Pechar",
|
||||||
"bundle_modal_error.message": "Algo fallou mentras cargaba esta páxina.",
|
"bundle_modal_error.message": "Algo fallou mentras cargaba esta páxina.",
|
||||||
"bundle_modal_error.retry": "Téntao de novo",
|
"bundle_modal_error.retry": "Téntao de novo",
|
||||||
|
"carousel.current": "<sr>Filmina</sr> {current, number} / {max, number}",
|
||||||
"carousel.slide": "Filmina {current, number} de {max, number}",
|
"carousel.slide": "Filmina {current, number} de {max, number}",
|
||||||
"closed_registrations.other_server_instructions": "Cómo Mastodon é descentralizado, podes crear unha conta noutro servidor e interactuar igualmente con este.",
|
"closed_registrations.other_server_instructions": "Cómo Mastodon é descentralizado, podes crear unha conta noutro servidor e interactuar igualmente con este.",
|
||||||
"closed_registrations_modal.description": "Actualmente non é posible crear unha conta en {domain}, pero ten en conta que non precisas unha conta específicamente en {domain} para usar Mastodon.",
|
"closed_registrations_modal.description": "Actualmente non é posible crear unha conta en {domain}, pero ten en conta que non precisas unha conta específicamente en {domain} para usar Mastodon.",
|
||||||
@ -248,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Publicar igualmente",
|
"confirmations.missing_alt_text.secondary": "Publicar igualmente",
|
||||||
"confirmations.missing_alt_text.title": "Engadir texto descritivo?",
|
"confirmations.missing_alt_text.title": "Engadir texto descritivo?",
|
||||||
"confirmations.mute.confirm": "Acalar",
|
"confirmations.mute.confirm": "Acalar",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Volver á edición",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Publicar publicación",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Non me volvas a mostrar esta mensaxe",
|
||||||
|
"confirmations.private_quote_notify.message": "A persoa que estás a citar e outras contas mencionadas serán notificadas e poderán ver a túa publicación, incluso se non te seguen.",
|
||||||
|
"confirmations.private_quote_notify.title": "Compartir coas seguidoras e coas usuarias mencionadas?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Non lembrarmo máis",
|
"confirmations.quiet_post_quote_info.dismiss": "Non lembrarmo máis",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
||||||
"confirmations.quiet_post_quote_info.message": "Ao citar unha publicación pública limitada a túa publicación non aparecerá nas cronoloxías de tendencias.",
|
"confirmations.quiet_post_quote_info.message": "Ao citar unha publicación pública limitada a túa publicación non aparecerá nas cronoloxías de tendencias.",
|
||||||
@ -759,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Política de Privacidade",
|
"privacy_policy.title": "Política de Privacidade",
|
||||||
"quote_error.edit": "Non se poden engadir citas ao editar unha publicación.",
|
"quote_error.edit": "Non se poden engadir citas ao editar unha publicación.",
|
||||||
"quote_error.poll": "Non se permite citar as enquisas.",
|
"quote_error.poll": "Non se permite citar as enquisas.",
|
||||||
|
"quote_error.private_mentions": "As citas non están permitidas nas mencións directas.",
|
||||||
"quote_error.quote": "Só se permite citar unha vez.",
|
"quote_error.quote": "Só se permite citar unha vez.",
|
||||||
"quote_error.unauthorized": "Non tes permiso para citar esta publicación.",
|
"quote_error.unauthorized": "Non tes permiso para citar esta publicación.",
|
||||||
"quote_error.upload": "As citas non están permitidas para anexos multimedia.",
|
"quote_error.upload": "As citas non están permitidas para anexos multimedia.",
|
||||||
@ -1012,6 +1019,8 @@
|
|||||||
"video.volume_down": "Baixar volume",
|
"video.volume_down": "Baixar volume",
|
||||||
"video.volume_up": "Subir volume",
|
"video.volume_up": "Subir volume",
|
||||||
"visibility_modal.button_title": "Establece a visibilidade",
|
"visibility_modal.button_title": "Establece a visibilidade",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Se gardas os axustes actuais a cita incluída vaise converter nunha ligazón.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "As citas non se poden incluír nas mencións privadas",
|
||||||
"visibility_modal.header": "Visibilidade e interaccións",
|
"visibility_modal.header": "Visibilidade e interaccións",
|
||||||
"visibility_modal.helper.direct_quoting": "As mencións privadas creadas con Mastodon non poden ser citadas.",
|
"visibility_modal.helper.direct_quoting": "As mencións privadas creadas con Mastodon non poden ser citadas.",
|
||||||
"visibility_modal.helper.privacy_editing": "Non se pode cambiar a visibilidade unha vez foi publicada.",
|
"visibility_modal.helper.privacy_editing": "Non se pode cambiar a visibilidade unha vez foi publicada.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "לפרסם בכל זאת",
|
"confirmations.missing_alt_text.secondary": "לפרסם בכל זאת",
|
||||||
"confirmations.missing_alt_text.title": "להוסיף מלל חלופי?",
|
"confirmations.missing_alt_text.title": "להוסיף מלל חלופי?",
|
||||||
"confirmations.mute.confirm": "להשתיק",
|
"confirmations.mute.confirm": "להשתיק",
|
||||||
|
"confirmations.private_quote_notify.cancel": "חזרה לעריכה",
|
||||||
|
"confirmations.private_quote_notify.confirm": "פרסום ההודעה",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "אל תראה לי הודעה זו שוב",
|
||||||
|
"confirmations.private_quote_notify.message": "המצוטט ומאוזכרים אחרים יקבלו התראה ויוכלו לקרוא את ההודעה שלך, אפילו אם אינם עוקבים אחריך.",
|
||||||
|
"confirmations.private_quote_notify.title": "לשתף עם עוקבים ומאוזכרים?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "אל תזכיר לי שוב",
|
"confirmations.quiet_post_quote_info.dismiss": "אל תזכיר לי שוב",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "הבנתי",
|
"confirmations.quiet_post_quote_info.got_it": "הבנתי",
|
||||||
"confirmations.quiet_post_quote_info.message": "כשמצטטים הודעה ציבורית שקטה, גם ההודעה המצטטת תוסתר מחלון הנושאים החמים.",
|
"confirmations.quiet_post_quote_info.message": "כשמצטטים הודעה ציבורית שקטה, גם ההודעה המצטטת תוסתר מחלון הנושאים החמים.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "מדיניות פרטיות",
|
"privacy_policy.title": "מדיניות פרטיות",
|
||||||
"quote_error.edit": "לא ניתן להוסיף ציטוטים בשלב עריכת ההודעה.",
|
"quote_error.edit": "לא ניתן להוסיף ציטוטים בשלב עריכת ההודעה.",
|
||||||
"quote_error.poll": "לא ניתן לכלול משאל כאשר מחברים הודעת ציטוט.",
|
"quote_error.poll": "לא ניתן לכלול משאל כאשר מחברים הודעת ציטוט.",
|
||||||
|
"quote_error.private_mentions": "ציטוט אינו אפשרי בהודעות פרטיות.",
|
||||||
"quote_error.quote": "רק ציטוט אחד מותר בכל הודעה.",
|
"quote_error.quote": "רק ציטוט אחד מותר בכל הודעה.",
|
||||||
"quote_error.unauthorized": "אין לך הרשאה לצטט את ההודעה הזו.",
|
"quote_error.unauthorized": "אין לך הרשאה לצטט את ההודעה הזו.",
|
||||||
"quote_error.upload": "ציטוט הכולל מדיה אינו אפשרי.",
|
"quote_error.upload": "ציטוט הכולל מדיה אינו אפשרי.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "הנמכת עוצמת השמע",
|
"video.volume_down": "הנמכת עוצמת השמע",
|
||||||
"video.volume_up": "הגברת עוצמת שמע",
|
"video.volume_up": "הגברת עוצמת שמע",
|
||||||
"visibility_modal.button_title": "בחירת רמת חשיפה",
|
"visibility_modal.button_title": "בחירת רמת חשיפה",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "אם תשמרו את ההעדפות הנוכחיות, הציטוט המוטמע יהפוך לקישור.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "לא ניתן להטמיע ציטוטים בהודעות פרטיות",
|
||||||
"visibility_modal.header": "חשיפה והידוּד (אינטראקציה)",
|
"visibility_modal.header": "חשיפה והידוּד (אינטראקציה)",
|
||||||
"visibility_modal.helper.direct_quoting": "איזכורים פרטיים שנוצרו במסטודון חסומים מציטוט על ידי אחרים.",
|
"visibility_modal.helper.direct_quoting": "איזכורים פרטיים שנוצרו במסטודון חסומים מציטוט על ידי אחרים.",
|
||||||
"visibility_modal.helper.privacy_editing": "רמת החשיפה של ההודעה לא ניתנת לשינוי אחרי הפרסום.",
|
"visibility_modal.helper.privacy_editing": "רמת החשיפה של ההודעה לא ניתנת לשינוי אחרי הפרסום.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Közzététel mindenképpen",
|
"confirmations.missing_alt_text.secondary": "Közzététel mindenképpen",
|
||||||
"confirmations.missing_alt_text.title": "Helyettesítő szöveg hozzáadása?",
|
"confirmations.missing_alt_text.title": "Helyettesítő szöveg hozzáadása?",
|
||||||
"confirmations.mute.confirm": "Némítás",
|
"confirmations.mute.confirm": "Némítás",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Vissza a szerkesztéshez",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Bejegyzés közzététele",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Ne jelenítse meg újra ezt az üzenetet",
|
||||||
|
"confirmations.private_quote_notify.message": "Akit idézel, és a többi megemlített értesítve lesz, és megtekinthetik a bejegyzésed, még akkor is, ha nem követnek.",
|
||||||
|
"confirmations.private_quote_notify.title": "Megosztás a követőkkel és a megemlített felhasználókkal?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Ne emlékeztessen újra",
|
"confirmations.quiet_post_quote_info.dismiss": "Ne emlékeztessen újra",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Rendben",
|
"confirmations.quiet_post_quote_info.got_it": "Rendben",
|
||||||
"confirmations.quiet_post_quote_info.message": "Ha csendes nyilvános bejegyzést idézel, akkor a bejegyzés el lesz rejtve a felkapottak idővonalairól.",
|
"confirmations.quiet_post_quote_info.message": "Ha csendes nyilvános bejegyzést idézel, akkor a bejegyzés el lesz rejtve a felkapottak idővonalairól.",
|
||||||
@ -1013,6 +1018,8 @@
|
|||||||
"video.volume_down": "Hangerő le",
|
"video.volume_down": "Hangerő le",
|
||||||
"video.volume_up": "Hangerő fel",
|
"video.volume_up": "Hangerő fel",
|
||||||
"visibility_modal.button_title": "Láthatóság beállítása",
|
"visibility_modal.button_title": "Láthatóság beállítása",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Ha mented a jelenlegi beállításokat, akkor a beágyazott idézet hivatkozássá lesz alakítva.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Idézetek nem ágyazhatóak be privát említésekbe",
|
||||||
"visibility_modal.header": "Láthatóság és interakció",
|
"visibility_modal.header": "Láthatóság és interakció",
|
||||||
"visibility_modal.helper.direct_quoting": "A Mastodonon készült privát említéseket mások nem idézhetik.",
|
"visibility_modal.helper.direct_quoting": "A Mastodonon készült privát említéseket mások nem idézhetik.",
|
||||||
"visibility_modal.helper.privacy_editing": "A láthatóság nem módosítható a bejegyzés közzététele után.",
|
"visibility_modal.helper.privacy_editing": "A láthatóság nem módosítható a bejegyzés közzététele után.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Birta samt",
|
"confirmations.missing_alt_text.secondary": "Birta samt",
|
||||||
"confirmations.missing_alt_text.title": "Bæta við hjálpartexta?",
|
"confirmations.missing_alt_text.title": "Bæta við hjálpartexta?",
|
||||||
"confirmations.mute.confirm": "Þagga",
|
"confirmations.mute.confirm": "Þagga",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Til baka í breytingar",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Birta færslu",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Ekki birta þessi skilaboð aftur",
|
||||||
|
"confirmations.private_quote_notify.message": "Sá sem vitnað er í og aðrir sem minnst er á verða látin vita og munu geta skoðað færsluna þína, jafnvel þótt viðkomandi fylgist ekki með þér.",
|
||||||
|
"confirmations.private_quote_notify.title": "Deila með fylgjendum og þeim sem minnst er á?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Ekki minna mig aftur á þetta",
|
"confirmations.quiet_post_quote_info.dismiss": "Ekki minna mig aftur á þetta",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Náði því",
|
"confirmations.quiet_post_quote_info.got_it": "Náði því",
|
||||||
"confirmations.quiet_post_quote_info.message": "Þegar þú vitnar í hljóðláta opinbera færslu, verður færslan þín ekki birt á vinsældatímalínum.",
|
"confirmations.quiet_post_quote_info.message": "Þegar þú vitnar í hljóðláta opinbera færslu, verður færslan þín ekki birt á vinsældatímalínum.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Persónuverndarstefna",
|
"privacy_policy.title": "Persónuverndarstefna",
|
||||||
"quote_error.edit": "Ekki er hægt að bæta við tilvitnunum þegar færslum er breytt.",
|
"quote_error.edit": "Ekki er hægt að bæta við tilvitnunum þegar færslum er breytt.",
|
||||||
"quote_error.poll": "Ekki er leyft að vitna í kannanir.",
|
"quote_error.poll": "Ekki er leyft að vitna í kannanir.",
|
||||||
|
"quote_error.private_mentions": "Tilvitnanir eru ekki leyfðar í beinu einkaspjalli.",
|
||||||
"quote_error.quote": "Einungis ein tilvitnun er leyfð í einu.",
|
"quote_error.quote": "Einungis ein tilvitnun er leyfð í einu.",
|
||||||
"quote_error.unauthorized": "Þú hefur ekki heimild til að vitna í þessa færslu.",
|
"quote_error.unauthorized": "Þú hefur ekki heimild til að vitna í þessa færslu.",
|
||||||
"quote_error.upload": "Ekki er leyft að vitna í myndviðhengi.",
|
"quote_error.upload": "Ekki er leyft að vitna í myndviðhengi.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "Lækka hljóðstyrk",
|
"video.volume_down": "Lækka hljóðstyrk",
|
||||||
"video.volume_up": "Hækka hljóðstyrk",
|
"video.volume_up": "Hækka hljóðstyrk",
|
||||||
"visibility_modal.button_title": "Stilla sýnileika",
|
"visibility_modal.button_title": "Stilla sýnileika",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Ef þú vistar þessa stillingu, þá verður ívöfnu tilvitnuninni breytt í tengil.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Ekki er hægt að ívefja tilvitnanir í beinu einkaspjalli",
|
||||||
"visibility_modal.header": "Sýnileiki og gagnvirkni",
|
"visibility_modal.header": "Sýnileiki og gagnvirkni",
|
||||||
"visibility_modal.helper.direct_quoting": "Ekki er hægt að vitna í einkaspjall sem skrifað er á Mastodon.",
|
"visibility_modal.helper.direct_quoting": "Ekki er hægt að vitna í einkaspjall sem skrifað er á Mastodon.",
|
||||||
"visibility_modal.helper.privacy_editing": "Ekki er hægt að breyta sýnileika færslu eftir að hún hefur verið birt.",
|
"visibility_modal.helper.privacy_editing": "Ekki er hægt að breyta sýnileika færslu eftir að hún hefur verið birt.",
|
||||||
|
|||||||
@ -157,6 +157,8 @@
|
|||||||
"bundle_modal_error.close": "Chiudi",
|
"bundle_modal_error.close": "Chiudi",
|
||||||
"bundle_modal_error.message": "Si è verificato un errore durante il caricamento di questa schermata.",
|
"bundle_modal_error.message": "Si è verificato un errore durante il caricamento di questa schermata.",
|
||||||
"bundle_modal_error.retry": "Riprova",
|
"bundle_modal_error.retry": "Riprova",
|
||||||
|
"carousel.current": "<sr>Diapositiva</sr> {current, number} / {max, number}",
|
||||||
|
"carousel.slide": "Diapositiva {current, number} di {max, number}",
|
||||||
"closed_registrations.other_server_instructions": "Poiché Mastodon è decentralizzato, puoi creare un profilo su un altro server, pur continuando a interagire con questo.",
|
"closed_registrations.other_server_instructions": "Poiché Mastodon è decentralizzato, puoi creare un profilo su un altro server, pur continuando a interagire con questo.",
|
||||||
"closed_registrations_modal.description": "Correntemente, è impossibile creare un profilo su {domain}, ma sei pregato di tenere presente che non necessiti di un profilo specificamente su {domain} per utilizzare Mastodon.",
|
"closed_registrations_modal.description": "Correntemente, è impossibile creare un profilo su {domain}, ma sei pregato di tenere presente che non necessiti di un profilo specificamente su {domain} per utilizzare Mastodon.",
|
||||||
"closed_registrations_modal.find_another_server": "Trova un altro server",
|
"closed_registrations_modal.find_another_server": "Trova un altro server",
|
||||||
@ -172,7 +174,9 @@
|
|||||||
"column.domain_blocks": "Domini bloccati",
|
"column.domain_blocks": "Domini bloccati",
|
||||||
"column.edit_list": "Modifica lista",
|
"column.edit_list": "Modifica lista",
|
||||||
"column.favourites": "Preferiti",
|
"column.favourites": "Preferiti",
|
||||||
"column.firehose": "Feed dal vivo",
|
"column.firehose": "Feed in diretta",
|
||||||
|
"column.firehose_local": "Feed in diretta per questo server",
|
||||||
|
"column.firehose_singular": "Feed in diretta",
|
||||||
"column.follow_requests": "Richieste di seguirti",
|
"column.follow_requests": "Richieste di seguirti",
|
||||||
"column.home": "Home",
|
"column.home": "Home",
|
||||||
"column.list_members": "Gestisci i membri della lista",
|
"column.list_members": "Gestisci i membri della lista",
|
||||||
@ -192,6 +196,7 @@
|
|||||||
"community.column_settings.local_only": "Solo Locale",
|
"community.column_settings.local_only": "Solo Locale",
|
||||||
"community.column_settings.media_only": "Solo Media",
|
"community.column_settings.media_only": "Solo Media",
|
||||||
"community.column_settings.remote_only": "Solo Remoto",
|
"community.column_settings.remote_only": "Solo Remoto",
|
||||||
|
"compose.error.blank_post": "Il post non può essere vuoto.",
|
||||||
"compose.language.change": "Cambia la lingua",
|
"compose.language.change": "Cambia la lingua",
|
||||||
"compose.language.search": "Cerca lingue...",
|
"compose.language.search": "Cerca lingue...",
|
||||||
"compose.published.body": "Post pubblicato.",
|
"compose.published.body": "Post pubblicato.",
|
||||||
@ -244,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Pubblica comunque",
|
"confirmations.missing_alt_text.secondary": "Pubblica comunque",
|
||||||
"confirmations.missing_alt_text.title": "Aggiungere testo alternativo?",
|
"confirmations.missing_alt_text.title": "Aggiungere testo alternativo?",
|
||||||
"confirmations.mute.confirm": "Silenzia",
|
"confirmations.mute.confirm": "Silenzia",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Torna a modificare",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Pubblica il post",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Non mostrarmi più questo messaggio",
|
||||||
|
"confirmations.private_quote_notify.message": "La persona che stai citando e le altre persone menzionate riceveranno una notifica e potranno visualizzare il tuo post, anche se non ti stanno seguendo.",
|
||||||
|
"confirmations.private_quote_notify.title": "Condividere con i seguaci e gli utenti menzionati?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Non ricordarmelo più",
|
"confirmations.quiet_post_quote_info.dismiss": "Non ricordarmelo più",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Ho capito",
|
"confirmations.quiet_post_quote_info.got_it": "Ho capito",
|
||||||
"confirmations.quiet_post_quote_info.message": "Quando citi un post pubblico silenzioso, il tuo post verrà nascosto dalle timeline di tendenza.",
|
"confirmations.quiet_post_quote_info.message": "Quando citi un post pubblico silenzioso, il tuo post verrà nascosto dalle timeline di tendenza.",
|
||||||
@ -358,7 +368,9 @@
|
|||||||
"explore.trending_links": "Notizie",
|
"explore.trending_links": "Notizie",
|
||||||
"explore.trending_statuses": "Post",
|
"explore.trending_statuses": "Post",
|
||||||
"explore.trending_tags": "Hashtag",
|
"explore.trending_tags": "Hashtag",
|
||||||
|
"featured_carousel.current": "<sr>Post</sr> {current, number} / {max, number}",
|
||||||
"featured_carousel.header": "{count, plural, one {Post appuntato} other {Post appuntati}}",
|
"featured_carousel.header": "{count, plural, one {Post appuntato} other {Post appuntati}}",
|
||||||
|
"featured_carousel.slide": "Post {current, number} di {max, number}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "La categoria di questo filtro non si applica al contesto in cui hai acceduto a questo post. Se desideri che il post sia filtrato anche in questo contesto, dovrai modificare il filtro.",
|
"filter_modal.added.context_mismatch_explanation": "La categoria di questo filtro non si applica al contesto in cui hai acceduto a questo post. Se desideri che il post sia filtrato anche in questo contesto, dovrai modificare il filtro.",
|
||||||
"filter_modal.added.context_mismatch_title": "Contesto non corrispondente!",
|
"filter_modal.added.context_mismatch_title": "Contesto non corrispondente!",
|
||||||
"filter_modal.added.expired_explanation": "La categoria di questo filtro è scaduta, dovrvai modificarne la data di scadenza per applicarlo.",
|
"filter_modal.added.expired_explanation": "La categoria di questo filtro è scaduta, dovrvai modificarne la data di scadenza per applicarlo.",
|
||||||
@ -401,6 +413,7 @@
|
|||||||
"follow_suggestions.who_to_follow": "Chi seguire",
|
"follow_suggestions.who_to_follow": "Chi seguire",
|
||||||
"followed_tags": "Hashtag seguiti",
|
"followed_tags": "Hashtag seguiti",
|
||||||
"footer.about": "Info",
|
"footer.about": "Info",
|
||||||
|
"footer.about_this_server": "Info",
|
||||||
"footer.directory": "Cartella dei profili",
|
"footer.directory": "Cartella dei profili",
|
||||||
"footer.get_app": "Scarica l'app",
|
"footer.get_app": "Scarica l'app",
|
||||||
"footer.keyboard_shortcuts": "Scorciatoie da tastiera",
|
"footer.keyboard_shortcuts": "Scorciatoie da tastiera",
|
||||||
@ -571,8 +584,8 @@
|
|||||||
"navigation_bar.follows_and_followers": "Seguiti e seguaci",
|
"navigation_bar.follows_and_followers": "Seguiti e seguaci",
|
||||||
"navigation_bar.import_export": "Importa ed esporta",
|
"navigation_bar.import_export": "Importa ed esporta",
|
||||||
"navigation_bar.lists": "Liste",
|
"navigation_bar.lists": "Liste",
|
||||||
"navigation_bar.live_feed_local": "Feed live (locale)",
|
"navigation_bar.live_feed_local": "Feed in diretta (locale)",
|
||||||
"navigation_bar.live_feed_public": "Feed live (pubblico)",
|
"navigation_bar.live_feed_public": "Feed in diretta (pubblico)",
|
||||||
"navigation_bar.logout": "Disconnettiti",
|
"navigation_bar.logout": "Disconnettiti",
|
||||||
"navigation_bar.moderation": "Moderazione",
|
"navigation_bar.moderation": "Moderazione",
|
||||||
"navigation_bar.more": "Altro",
|
"navigation_bar.more": "Altro",
|
||||||
@ -752,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Politica sulla Privacy",
|
"privacy_policy.title": "Politica sulla Privacy",
|
||||||
"quote_error.edit": "Le citazioni non possono essere aggiunte quando si modifica un post.",
|
"quote_error.edit": "Le citazioni non possono essere aggiunte quando si modifica un post.",
|
||||||
"quote_error.poll": "Nei sondaggi non sono consentite le citazioni.",
|
"quote_error.poll": "Nei sondaggi non sono consentite le citazioni.",
|
||||||
|
"quote_error.private_mentions": "Le citazioni non sono consentite con le menzioni dirette.",
|
||||||
"quote_error.quote": "È consentita una sola citazione alla volta.",
|
"quote_error.quote": "È consentita una sola citazione alla volta.",
|
||||||
"quote_error.unauthorized": "Non sei autorizzato a citare questo post.",
|
"quote_error.unauthorized": "Non sei autorizzato a citare questo post.",
|
||||||
"quote_error.upload": "Le citazioni non sono consentite con gli allegati multimediali.",
|
"quote_error.upload": "Le citazioni non sono consentite con gli allegati multimediali.",
|
||||||
@ -905,9 +919,12 @@
|
|||||||
"status.pin": "Fissa in cima sul profilo",
|
"status.pin": "Fissa in cima sul profilo",
|
||||||
"status.quote": "Cita",
|
"status.quote": "Cita",
|
||||||
"status.quote.cancel": "Annulla la citazione",
|
"status.quote.cancel": "Annulla la citazione",
|
||||||
|
"status.quote_error.blocked_account_hint.title": "Questo post è nascosto perché hai bloccato @{name}.",
|
||||||
|
"status.quote_error.blocked_domain_hint.title": "Questo post è nascosto perché hai bloccato @{domain}.",
|
||||||
"status.quote_error.filtered": "Nascosto a causa di uno dei tuoi filtri",
|
"status.quote_error.filtered": "Nascosto a causa di uno dei tuoi filtri",
|
||||||
"status.quote_error.limited_account_hint.action": "Mostra comunque",
|
"status.quote_error.limited_account_hint.action": "Mostra comunque",
|
||||||
"status.quote_error.limited_account_hint.title": "Questo profilo è stato nascosto dai moderatori di {domain}.",
|
"status.quote_error.limited_account_hint.title": "Questo profilo è stato nascosto dai moderatori di {domain}.",
|
||||||
|
"status.quote_error.muted_account_hint.title": "Questo post è nascosto perché hai silenziato @{name}.",
|
||||||
"status.quote_error.not_available": "Post non disponibile",
|
"status.quote_error.not_available": "Post non disponibile",
|
||||||
"status.quote_error.pending_approval": "Post in attesa",
|
"status.quote_error.pending_approval": "Post in attesa",
|
||||||
"status.quote_error.pending_approval_popout.body": "Su Mastodon, puoi controllare se qualcuno può citarti. Questo post è in attesa dell'approvazione dell'autore originale.",
|
"status.quote_error.pending_approval_popout.body": "Su Mastodon, puoi controllare se qualcuno può citarti. Questo post è in attesa dell'approvazione dell'autore originale.",
|
||||||
@ -1002,6 +1019,8 @@
|
|||||||
"video.volume_down": "Abbassa volume",
|
"video.volume_down": "Abbassa volume",
|
||||||
"video.volume_up": "Alza volume",
|
"video.volume_up": "Alza volume",
|
||||||
"visibility_modal.button_title": "Imposta la visibilità",
|
"visibility_modal.button_title": "Imposta la visibilità",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Se si salvano le impostazioni correnti, la citazione incorporata verrà convertita in un collegamento.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Le citazioni non possono essere incorporate in menzioni private",
|
||||||
"visibility_modal.header": "Visibilità e interazione",
|
"visibility_modal.header": "Visibilità e interazione",
|
||||||
"visibility_modal.helper.direct_quoting": "Le menzioni private scritte su Mastodon non possono essere citate da altri.",
|
"visibility_modal.helper.direct_quoting": "Le menzioni private scritte su Mastodon non possono essere citate da altri.",
|
||||||
"visibility_modal.helper.privacy_editing": "La visibilità non può essere modificata dopo la pubblicazione di un post.",
|
"visibility_modal.helper.privacy_editing": "La visibilità non può essere modificata dopo la pubblicazione di un post.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Toch plaatsen",
|
"confirmations.missing_alt_text.secondary": "Toch plaatsen",
|
||||||
"confirmations.missing_alt_text.title": "Alt-tekst toevoegen?",
|
"confirmations.missing_alt_text.title": "Alt-tekst toevoegen?",
|
||||||
"confirmations.mute.confirm": "Negeren",
|
"confirmations.mute.confirm": "Negeren",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Terug naar bewerken",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Bericht plaatsen",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Dit bericht niet meer aan mij tonen",
|
||||||
|
"confirmations.private_quote_notify.message": "De persoon die je citeert en andere vermelde personen krijgen een melding en kunnen jouw bericht bekijken, zelfs als ze je niet volgen.",
|
||||||
|
"confirmations.private_quote_notify.title": "Met volgers en vermelde gebruikers delen?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Herinner me er niet nogmaals aan",
|
"confirmations.quiet_post_quote_info.dismiss": "Herinner me er niet nogmaals aan",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Begrepen",
|
"confirmations.quiet_post_quote_info.got_it": "Begrepen",
|
||||||
"confirmations.quiet_post_quote_info.message": "Wanneer je een minder openbaar bericht citeert, verschijnt jouw bericht niet onder trends.",
|
"confirmations.quiet_post_quote_info.message": "Wanneer je een minder openbaar bericht citeert, verschijnt jouw bericht niet onder trends.",
|
||||||
@ -1013,6 +1018,8 @@
|
|||||||
"video.volume_down": "Volume omlaag",
|
"video.volume_down": "Volume omlaag",
|
||||||
"video.volume_up": "Volume omhoog",
|
"video.volume_up": "Volume omhoog",
|
||||||
"visibility_modal.button_title": "Privacy instellen",
|
"visibility_modal.button_title": "Privacy instellen",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Wanneer je de huidige instellingen opslaat wordt het citaat in een link veranderd.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Privéberichten kunnen geen citaten bevatten",
|
||||||
"visibility_modal.header": "Zichtbaarheid en interactie",
|
"visibility_modal.header": "Zichtbaarheid en interactie",
|
||||||
"visibility_modal.helper.direct_quoting": "Privéberichten afkomstig van Mastodon kunnen niet door anderen worden geciteerd.",
|
"visibility_modal.helper.direct_quoting": "Privéberichten afkomstig van Mastodon kunnen niet door anderen worden geciteerd.",
|
||||||
"visibility_modal.helper.privacy_editing": "De zichtbaarheid kan niet meer worden gewijzigd nadat een bericht is gepubliceerd.",
|
"visibility_modal.helper.privacy_editing": "De zichtbaarheid kan niet meer worden gewijzigd nadat een bericht is gepubliceerd.",
|
||||||
|
|||||||
@ -249,6 +249,8 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Publicar mesmo assim",
|
"confirmations.missing_alt_text.secondary": "Publicar mesmo assim",
|
||||||
"confirmations.missing_alt_text.title": "Adicionar texto alternativo?",
|
"confirmations.missing_alt_text.title": "Adicionar texto alternativo?",
|
||||||
"confirmations.mute.confirm": "Ocultar",
|
"confirmations.mute.confirm": "Ocultar",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Voltar à edição",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Publicar",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Não me relembre novamente",
|
"confirmations.quiet_post_quote_info.dismiss": "Não me relembre novamente",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
"confirmations.quiet_post_quote_info.got_it": "Entendido",
|
||||||
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação não listada, a sua publicação não será exibida nos destaques.",
|
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação não listada, a sua publicação não será exibida nos destaques.",
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
"account.blocking": "Engelleme",
|
"account.blocking": "Engelleme",
|
||||||
"account.cancel_follow_request": "Takip isteğini geri çek",
|
"account.cancel_follow_request": "Takip isteğini geri çek",
|
||||||
"account.copy": "Gönderi bağlantısını kopyala",
|
"account.copy": "Gönderi bağlantısını kopyala",
|
||||||
"account.direct": "@{name} kullanıcısına özel olarak değin",
|
"account.direct": "@{name} kullanıcısından özel olarak bahset",
|
||||||
"account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat",
|
"account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat",
|
||||||
"account.domain_blocking": "Alan adını engelleme",
|
"account.domain_blocking": "Alan adını engelleme",
|
||||||
"account.edit_profile": "Profili düzenle",
|
"account.edit_profile": "Profili düzenle",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "Đăng luôn",
|
"confirmations.missing_alt_text.secondary": "Đăng luôn",
|
||||||
"confirmations.missing_alt_text.title": "Thêm văn bản thay thế?",
|
"confirmations.missing_alt_text.title": "Thêm văn bản thay thế?",
|
||||||
"confirmations.mute.confirm": "Ẩn",
|
"confirmations.mute.confirm": "Ẩn",
|
||||||
|
"confirmations.private_quote_notify.cancel": "Quay lại chỉnh sửa",
|
||||||
|
"confirmations.private_quote_notify.confirm": "Đăng tút",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "Không hiện thông báo này nữa",
|
||||||
|
"confirmations.private_quote_notify.message": "Người mà bạn trích dẫn và những người được bạn nhắc đến khác sẽ được thông báo và có thể xem tút của bạn, ngay cả khi họ không theo dõi bạn.",
|
||||||
|
"confirmations.private_quote_notify.title": "Chia sẻ với người được nhắc đến và người theo dõi?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "Không nhắc lại nữa",
|
"confirmations.quiet_post_quote_info.dismiss": "Không nhắc lại nữa",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "Đã hiểu",
|
"confirmations.quiet_post_quote_info.got_it": "Đã hiểu",
|
||||||
"confirmations.quiet_post_quote_info.message": "Khi trích dẫn một tút hạn chế, tút của bạn sẽ bị ẩn khỏi dòng thời gian thịnh hành.",
|
"confirmations.quiet_post_quote_info.message": "Khi trích dẫn một tút hạn chế, tút của bạn sẽ bị ẩn khỏi dòng thời gian thịnh hành.",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "Chính sách bảo mật",
|
"privacy_policy.title": "Chính sách bảo mật",
|
||||||
"quote_error.edit": "Không thể thêm trích dẫn khi sửa tút.",
|
"quote_error.edit": "Không thể thêm trích dẫn khi sửa tút.",
|
||||||
"quote_error.poll": "Không thể trích dẫn vốt.",
|
"quote_error.poll": "Không thể trích dẫn vốt.",
|
||||||
|
"quote_error.private_mentions": "Không thể trích dẫn với lượt nhắc trực tiếp.",
|
||||||
"quote_error.quote": "Chỉ được trích dẫn một lần.",
|
"quote_error.quote": "Chỉ được trích dẫn một lần.",
|
||||||
"quote_error.unauthorized": "Bạn không được cấp quyền trích dẫn tút này.",
|
"quote_error.unauthorized": "Bạn không được cấp quyền trích dẫn tút này.",
|
||||||
"quote_error.upload": "Không thể trích dẫn với media đính kèm.",
|
"quote_error.upload": "Không thể trích dẫn với media đính kèm.",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "Giảm âm lượng",
|
"video.volume_down": "Giảm âm lượng",
|
||||||
"video.volume_up": "Tăng âm lượng",
|
"video.volume_up": "Tăng âm lượng",
|
||||||
"visibility_modal.button_title": "Thay đổi quyền riêng tư",
|
"visibility_modal.button_title": "Thay đổi quyền riêng tư",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "Nếu bạn lưu cài đặt hiện tại, trích dẫn được nhúng sẽ được chuyển đổi thành liên kết.",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "Không thể nhúng trích dẫn vào Nhắn Riêng",
|
||||||
"visibility_modal.header": "Hiển thị và tương tác",
|
"visibility_modal.header": "Hiển thị và tương tác",
|
||||||
"visibility_modal.helper.direct_quoting": "Nhắn riêng trên Mastodon không thể được người khác trích dẫn.",
|
"visibility_modal.helper.direct_quoting": "Nhắn riêng trên Mastodon không thể được người khác trích dẫn.",
|
||||||
"visibility_modal.helper.privacy_editing": "Không thể thay đổi chế độ hiển thị sau khi một tút đã đăng.",
|
"visibility_modal.helper.privacy_editing": "Không thể thay đổi chế độ hiển thị sau khi một tút đã đăng.",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "就这样发布",
|
"confirmations.missing_alt_text.secondary": "就这样发布",
|
||||||
"confirmations.missing_alt_text.title": "添加替代文本?",
|
"confirmations.missing_alt_text.title": "添加替代文本?",
|
||||||
"confirmations.mute.confirm": "隐藏",
|
"confirmations.mute.confirm": "隐藏",
|
||||||
|
"confirmations.private_quote_notify.cancel": "返回编辑",
|
||||||
|
"confirmations.private_quote_notify.confirm": "发布嘟文",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "不再显示此消息",
|
||||||
|
"confirmations.private_quote_notify.message": "您所引用与提及的用户将收到通知且能够查看你的嘟文,即便这些用户没有关注您。",
|
||||||
|
"confirmations.private_quote_notify.title": "是否和关注者和提及的用户分享此内容?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "不再提醒",
|
"confirmations.quiet_post_quote_info.dismiss": "不再提醒",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "明白了",
|
"confirmations.quiet_post_quote_info.got_it": "明白了",
|
||||||
"confirmations.quiet_post_quote_info.message": "当你引用悄悄公开的嘟文时,你的嘟文会从热门时间线上隐藏。",
|
"confirmations.quiet_post_quote_info.message": "当你引用悄悄公开的嘟文时,你的嘟文会从热门时间线上隐藏。",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "隐私政策",
|
"privacy_policy.title": "隐私政策",
|
||||||
"quote_error.edit": "编辑嘟文时无法添加引用。",
|
"quote_error.edit": "编辑嘟文时无法添加引用。",
|
||||||
"quote_error.poll": "不允许引用投票嘟文。",
|
"quote_error.poll": "不允许引用投票嘟文。",
|
||||||
|
"quote_error.private_mentions": "不允许引用私下提及嘟文。",
|
||||||
"quote_error.quote": "一次只能引用一条嘟文。",
|
"quote_error.quote": "一次只能引用一条嘟文。",
|
||||||
"quote_error.unauthorized": "你没有权限引用此嘟文。",
|
"quote_error.unauthorized": "你没有权限引用此嘟文。",
|
||||||
"quote_error.upload": "不允许引用有媒体附件的嘟文。",
|
"quote_error.upload": "不允许引用有媒体附件的嘟文。",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "音量减小",
|
"video.volume_down": "音量减小",
|
||||||
"video.volume_up": "提高音量",
|
"video.volume_up": "提高音量",
|
||||||
"visibility_modal.button_title": "设置可见性",
|
"visibility_modal.button_title": "设置可见性",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "如果你保存当前设置,引用的嘟文将被转换为链接。",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "引用嘟文无法嵌入到私下提及中",
|
||||||
"visibility_modal.header": "可见性和互动",
|
"visibility_modal.header": "可见性和互动",
|
||||||
"visibility_modal.helper.direct_quoting": "Mastodon上发布的私下提及无法被他人引用。",
|
"visibility_modal.helper.direct_quoting": "Mastodon上发布的私下提及无法被他人引用。",
|
||||||
"visibility_modal.helper.privacy_editing": "嘟文发布后便无法更改可见性。",
|
"visibility_modal.helper.privacy_editing": "嘟文发布后便无法更改可见性。",
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
"account.disable_notifications": "當 @{name} 發文時不要再通知我",
|
"account.disable_notifications": "當 @{name} 發文時不要再通知我",
|
||||||
"account.domain_blocking": "封鎖網域",
|
"account.domain_blocking": "封鎖網域",
|
||||||
"account.edit_profile": "修改個人檔案",
|
"account.edit_profile": "修改個人檔案",
|
||||||
|
"account.edit_profile_short": "編輯",
|
||||||
"account.enable_notifications": "當 @{name} 發文時通知我",
|
"account.enable_notifications": "當 @{name} 發文時通知我",
|
||||||
"account.endorse": "在個人檔案中推薦對方",
|
"account.endorse": "在個人檔案中推薦對方",
|
||||||
"account.familiar_followers_many": "{name1}、{name2} 及{othersCount, plural, other {你認識的 # 人}}已追蹤",
|
"account.familiar_followers_many": "{name1}、{name2} 及{othersCount, plural, other {你認識的 # 人}}已追蹤",
|
||||||
@ -40,12 +41,18 @@
|
|||||||
"account.featured_tags.last_status_never": "暫無文章",
|
"account.featured_tags.last_status_never": "暫無文章",
|
||||||
"account.follow": "關注",
|
"account.follow": "關注",
|
||||||
"account.follow_back": "追蹤對方",
|
"account.follow_back": "追蹤對方",
|
||||||
|
"account.follow_back_short": "追蹤對方",
|
||||||
|
"account.follow_request": "追蹤請求",
|
||||||
|
"account.follow_request_cancel": "取消請求",
|
||||||
|
"account.follow_request_cancel_short": "取消",
|
||||||
|
"account.follow_request_short": "請求",
|
||||||
"account.followers": "追蹤者",
|
"account.followers": "追蹤者",
|
||||||
"account.followers.empty": "尚未有人追蹤這位使用者。",
|
"account.followers.empty": "尚未有人追蹤這位使用者。",
|
||||||
"account.followers_counter": "{count, plural, other {{counter} 個追蹤者}}",
|
"account.followers_counter": "{count, plural, other {{counter} 個追蹤者}}",
|
||||||
"account.followers_you_know_counter": "你認識的 {counter} 人",
|
"account.followers_you_know_counter": "你認識的 {counter} 人",
|
||||||
"account.following": "正在追蹤",
|
"account.following": "正在追蹤",
|
||||||
"account.follows.empty": "這位使用者尚未追蹤任何人。",
|
"account.follows.empty": "這位使用者尚未追蹤任何人。",
|
||||||
|
"account.follows_you": "正追蹤你",
|
||||||
"account.go_to_profile": "前往個人檔案",
|
"account.go_to_profile": "前往個人檔案",
|
||||||
"account.hide_reblogs": "隱藏 @{name} 的轉推",
|
"account.hide_reblogs": "隱藏 @{name} 的轉推",
|
||||||
"account.in_memoriam": "謹此悼念。",
|
"account.in_memoriam": "謹此悼念。",
|
||||||
@ -60,10 +67,13 @@
|
|||||||
"account.mute_notifications_short": "靜音通知",
|
"account.mute_notifications_short": "靜音通知",
|
||||||
"account.mute_short": "靜音",
|
"account.mute_short": "靜音",
|
||||||
"account.muted": "靜音",
|
"account.muted": "靜音",
|
||||||
|
"account.muting": "靜音",
|
||||||
|
"account.mutual": "你們已互相追蹤",
|
||||||
"account.no_bio": "未提供描述。",
|
"account.no_bio": "未提供描述。",
|
||||||
"account.open_original_page": "打開原始頁面",
|
"account.open_original_page": "打開原始頁面",
|
||||||
"account.posts": "帖文",
|
"account.posts": "帖文",
|
||||||
"account.posts_with_replies": "帖文與回覆",
|
"account.posts_with_replies": "帖文與回覆",
|
||||||
|
"account.remove_from_followers": "移除追蹤者{name}",
|
||||||
"account.report": "檢舉 @{name}",
|
"account.report": "檢舉 @{name}",
|
||||||
"account.requested_follow": "{name} 要求追蹤你",
|
"account.requested_follow": "{name} 要求追蹤你",
|
||||||
"account.share": "分享 @{name} 的個人檔案",
|
"account.share": "分享 @{name} 的個人檔案",
|
||||||
@ -130,8 +140,11 @@
|
|||||||
"column.direct": "私人提及",
|
"column.direct": "私人提及",
|
||||||
"column.directory": "瀏覽個人資料",
|
"column.directory": "瀏覽個人資料",
|
||||||
"column.domain_blocks": "封鎖的服務站",
|
"column.domain_blocks": "封鎖的服務站",
|
||||||
|
"column.edit_list": "編輯列表",
|
||||||
"column.favourites": "最愛",
|
"column.favourites": "最愛",
|
||||||
"column.firehose": "即時動態",
|
"column.firehose": "即時動態",
|
||||||
|
"column.firehose_local": "本伺服器的即時動態",
|
||||||
|
"column.firehose_singular": "即時動態",
|
||||||
"column.follow_requests": "追蹤請求",
|
"column.follow_requests": "追蹤請求",
|
||||||
"column.home": "主頁",
|
"column.home": "主頁",
|
||||||
"column.lists": "列表",
|
"column.lists": "列表",
|
||||||
@ -182,15 +195,28 @@
|
|||||||
"confirmations.delete_list.confirm": "刪除",
|
"confirmations.delete_list.confirm": "刪除",
|
||||||
"confirmations.delete_list.message": "你確定要永久刪除這列表嗎?",
|
"confirmations.delete_list.message": "你確定要永久刪除這列表嗎?",
|
||||||
"confirmations.delete_list.title": "刪除列表?",
|
"confirmations.delete_list.title": "刪除列表?",
|
||||||
|
"confirmations.discard_draft.post.title": "要捨棄文章的草稿?",
|
||||||
"confirmations.discard_edit_media.confirm": "捨棄",
|
"confirmations.discard_edit_media.confirm": "捨棄",
|
||||||
"confirmations.discard_edit_media.message": "您在媒體描述或預覽有尚未儲存的變更。確定要捨棄它們嗎?",
|
"confirmations.discard_edit_media.message": "您在媒體描述或預覽有尚未儲存的變更。確定要捨棄它們嗎?",
|
||||||
|
"confirmations.follow_to_list.title": "追蹤使用者?",
|
||||||
"confirmations.logout.confirm": "登出",
|
"confirmations.logout.confirm": "登出",
|
||||||
"confirmations.logout.message": "確定要登出嗎?",
|
"confirmations.logout.message": "確定要登出嗎?",
|
||||||
"confirmations.logout.title": "登出?",
|
"confirmations.logout.title": "登出?",
|
||||||
|
"confirmations.missing_alt_text.confirm": "新增替代文字",
|
||||||
|
"confirmations.missing_alt_text.message": "你的貼文尚未附上替代文字。新增描述有助更多人存取其內容。",
|
||||||
"confirmations.mute.confirm": "靜音",
|
"confirmations.mute.confirm": "靜音",
|
||||||
|
"confirmations.quiet_post_quote_info.dismiss": "不再提醒",
|
||||||
|
"confirmations.quiet_post_quote_info.got_it": "知道了",
|
||||||
"confirmations.redraft.confirm": "刪除並編輯",
|
"confirmations.redraft.confirm": "刪除並編輯",
|
||||||
"confirmations.redraft.message": "你確定要移除並重新起草這篇帖文嗎?你將會失去最愛和轉推,而回覆也會與原始帖文斷開連接。",
|
"confirmations.redraft.message": "你確定要移除並重新起草這篇帖文嗎?你將會失去最愛和轉推,而回覆也會與原始帖文斷開連接。",
|
||||||
|
"confirmations.revoke_quote.message": "此操作無法還原。",
|
||||||
|
"confirmations.revoke_quote.title": "移除貼文?",
|
||||||
|
"confirmations.unblock.confirm": "解除封鎖",
|
||||||
|
"confirmations.unblock.title": "解除封鎖 {name}?",
|
||||||
"confirmations.unfollow.confirm": "取消追蹤",
|
"confirmations.unfollow.confirm": "取消追蹤",
|
||||||
|
"confirmations.unfollow.title": "取消追蹤 {name}?",
|
||||||
|
"confirmations.withdraw_request.confirm": "撤回請求",
|
||||||
|
"confirmations.withdraw_request.title": "撤回追蹤{name}的請求?",
|
||||||
"content_warning.hide": "隱藏嘟文",
|
"content_warning.hide": "隱藏嘟文",
|
||||||
"content_warning.show": "仍要顯示",
|
"content_warning.show": "仍要顯示",
|
||||||
"content_warning.show_more": "顯示更多",
|
"content_warning.show_more": "顯示更多",
|
||||||
@ -432,6 +458,8 @@
|
|||||||
"navigation_bar.follows_and_followers": "追蹤及追蹤者",
|
"navigation_bar.follows_and_followers": "追蹤及追蹤者",
|
||||||
"navigation_bar.import_export": "匯入及匯出",
|
"navigation_bar.import_export": "匯入及匯出",
|
||||||
"navigation_bar.lists": "列表",
|
"navigation_bar.lists": "列表",
|
||||||
|
"navigation_bar.live_feed_local": "即時動態(本地)",
|
||||||
|
"navigation_bar.live_feed_public": "即時動態(公開)",
|
||||||
"navigation_bar.logout": "登出",
|
"navigation_bar.logout": "登出",
|
||||||
"navigation_bar.more": "更多",
|
"navigation_bar.more": "更多",
|
||||||
"navigation_bar.mutes": "靜音名單",
|
"navigation_bar.mutes": "靜音名單",
|
||||||
|
|||||||
@ -249,6 +249,11 @@
|
|||||||
"confirmations.missing_alt_text.secondary": "仍要發嘟",
|
"confirmations.missing_alt_text.secondary": "仍要發嘟",
|
||||||
"confirmations.missing_alt_text.title": "是否新增 ALT 說明文字?",
|
"confirmations.missing_alt_text.title": "是否新增 ALT 說明文字?",
|
||||||
"confirmations.mute.confirm": "靜音",
|
"confirmations.mute.confirm": "靜音",
|
||||||
|
"confirmations.private_quote_notify.cancel": "返回至編輯",
|
||||||
|
"confirmations.private_quote_notify.confirm": "發表嘟文",
|
||||||
|
"confirmations.private_quote_notify.do_not_show_again": "不再顯示此訊息",
|
||||||
|
"confirmations.private_quote_notify.message": "您所引用與提及之使用者將被通知且能檢視您的嘟文,即便他們並無跟隨您。",
|
||||||
|
"confirmations.private_quote_notify.title": "是否和跟隨者與提及使用者分享此內容?",
|
||||||
"confirmations.quiet_post_quote_info.dismiss": "不要再提醒我",
|
"confirmations.quiet_post_quote_info.dismiss": "不要再提醒我",
|
||||||
"confirmations.quiet_post_quote_info.got_it": "了解",
|
"confirmations.quiet_post_quote_info.got_it": "了解",
|
||||||
"confirmations.quiet_post_quote_info.message": "當引用不於公開時間軸顯示之嘟文時,您的嘟文將自熱門時間軸隱藏。",
|
"confirmations.quiet_post_quote_info.message": "當引用不於公開時間軸顯示之嘟文時,您的嘟文將自熱門時間軸隱藏。",
|
||||||
@ -760,6 +765,7 @@
|
|||||||
"privacy_policy.title": "隱私權政策",
|
"privacy_policy.title": "隱私權政策",
|
||||||
"quote_error.edit": "編輯嘟文時無法新增引用嘟文。",
|
"quote_error.edit": "編輯嘟文時無法新增引用嘟文。",
|
||||||
"quote_error.poll": "無法引用投票嘟文。",
|
"quote_error.poll": "無法引用投票嘟文。",
|
||||||
|
"quote_error.private_mentions": "無法引用私訊嘟文。",
|
||||||
"quote_error.quote": "一次僅能引用一則嘟文。",
|
"quote_error.quote": "一次僅能引用一則嘟文。",
|
||||||
"quote_error.unauthorized": "您不被授權允許引用此嘟文。",
|
"quote_error.unauthorized": "您不被授權允許引用此嘟文。",
|
||||||
"quote_error.upload": "無法引用多媒體內容嘟文。",
|
"quote_error.upload": "無法引用多媒體內容嘟文。",
|
||||||
@ -1013,6 +1019,8 @@
|
|||||||
"video.volume_down": "降低音量",
|
"video.volume_down": "降低音量",
|
||||||
"video.volume_up": "提高音量",
|
"video.volume_up": "提高音量",
|
||||||
"visibility_modal.button_title": "設定可見性",
|
"visibility_modal.button_title": "設定可見性",
|
||||||
|
"visibility_modal.direct_quote_warning.text": "若您儲存目前設定,引用嘟文將被轉為連結。",
|
||||||
|
"visibility_modal.direct_quote_warning.title": "引用嘟文無法被內嵌於私訊中",
|
||||||
"visibility_modal.header": "可見性與互動",
|
"visibility_modal.header": "可見性與互動",
|
||||||
"visibility_modal.helper.direct_quoting": "Mastodon 上發佈之私訊嘟文無法被其他使用者引用。",
|
"visibility_modal.helper.direct_quoting": "Mastodon 上發佈之私訊嘟文無法被其他使用者引用。",
|
||||||
"visibility_modal.helper.privacy_editing": "嘟文發布後無法變更可見性。",
|
"visibility_modal.helper.privacy_editing": "嘟文發布後無法變更可見性。",
|
||||||
|
|||||||
1
app/javascript/material-icons/400-24px/audio.svg
Normal file
1
app/javascript/material-icons/400-24px/audio.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="currentColor"><path d="M280-240v-480h80v480h-80ZM440-80v-800h80v800h-80ZM120-400v-160h80v160h-80Zm480 160v-480h80v480h-80Zm160-160v-160h80v160h-80Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 254 B |
@ -775,16 +775,43 @@
|
|||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__preview {
|
&__preview,
|
||||||
|
&__visualizer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border-radius: 6px;
|
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__preview {
|
||||||
|
border-radius: 6px;
|
||||||
inset-inline-start: 0;
|
inset-inline-start: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__visualizer {
|
||||||
|
padding: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.audio-player__visualizer {
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
inset-inline-start: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
opacity: 0.75;
|
||||||
|
color: var(--player-foreground-color);
|
||||||
|
filter: var(--overlay-icon-shadow);
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&__thumbnail {
|
&__thumbnail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -2991,6 +3018,7 @@ a.account__display-name {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
min-height: 100dvh;
|
min-height: 100dvh;
|
||||||
|
padding-inline: 10px;
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
|
|
||||||
&__pane {
|
&__pane {
|
||||||
@ -3330,6 +3358,7 @@ a.account__display-name {
|
|||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
min-height: 100dvh;
|
min-height: 100dvh;
|
||||||
gap: 0;
|
gap: 0;
|
||||||
|
padding-inline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.columns-area__panels__pane--navigational {
|
.columns-area__panels__pane--navigational {
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class ActivityPub::Dereferencer
|
|||||||
|
|
||||||
req = Request.new(:get, uri)
|
req = Request.new(:get, uri)
|
||||||
|
|
||||||
req.add_headers('Accept' => 'application/activity+json, application/ld+json')
|
req.add_headers('Accept' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/activity+json')
|
||||||
req.add_headers(headers) if headers
|
req.add_headers(headers) if headers
|
||||||
req.on_behalf_of(@signature_actor) if @signature_actor
|
req.on_behalf_of(@signature_actor) if @signature_actor
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
class FetchResourceService < BaseService
|
class FetchResourceService < BaseService
|
||||||
include JsonLdHelper
|
include JsonLdHelper
|
||||||
|
|
||||||
ACCEPT_HEADER = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", text/html;q=0.1'
|
ACCEPT_HEADER = 'application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/activity+json, text/html;q=0.1'
|
||||||
ACTIVITY_STREAM_LINK_TYPES = ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].freeze
|
ACTIVITY_STREAM_LINK_TYPES = ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].freeze
|
||||||
|
|
||||||
attr_reader :response_code
|
attr_reader :response_code
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
%link{ rel: 'alternate', type: 'application/rss+xml', href: rss_url }/
|
%link{ rel: 'alternate', type: 'application/rss+xml', href: rss_url }/
|
||||||
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
||||||
|
%link{ rel: 'alternate', type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
||||||
|
|
||||||
- @account.fields.select(&:verifiable?).each do |field|
|
- @account.fields.select(&:verifiable?).each do |field|
|
||||||
%link{ rel: 'me', type: 'text/html', href: field.value }/
|
%link{ rel: 'me', type: 'text/html', href: field.value }/
|
||||||
|
|||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
%ul.hint
|
%ul.hint
|
||||||
%li.warning-hint= t('migrations.warning.followers')
|
%li.warning-hint= t('migrations.warning.followers')
|
||||||
%li.warning-hint= t('migrations.warning.redirect')
|
|
||||||
%li.warning-hint= t('migrations.warning.other_data')
|
%li.warning-hint= t('migrations.warning.other_data')
|
||||||
|
%li.warning-hint= t('migrations.warning.redirect')
|
||||||
%li.warning-hint= t('migrations.warning.backreference_required')
|
%li.warning-hint= t('migrations.warning.backreference_required')
|
||||||
%li.warning-hint= t('migrations.warning.cooldown')
|
%li.warning-hint= t('migrations.warning.cooldown')
|
||||||
%li.warning-hint= t('migrations.warning.disabled_account')
|
%li.warning-hint= t('migrations.warning.disabled_account')
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: short_account_status_url(@account, @status), format: 'json') }/
|
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: short_account_status_url(@account, @status), format: 'json') }/
|
||||||
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@status) }/
|
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@status) }/
|
||||||
|
%link{ rel: 'alternate', type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', href: ActivityPub::TagManager.instance.uri_for(@status) }/
|
||||||
|
|
||||||
= opengraph 'og:site_name', site_title
|
= opengraph 'og:site_name', site_title
|
||||||
= opengraph 'og:type', 'article'
|
= opengraph 'og:type', 'article'
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
- content_for :header_tags do
|
- content_for :header_tags do
|
||||||
%link{ rel: :alternate, type: 'application/rss+xml', href: tag_url(@tag) }/
|
%link{ rel: :alternate, type: 'application/rss+xml', href: tag_url(@tag) }/
|
||||||
%link{ rel: :alternate, type: 'application/activity+json', href: tag_url(@tag) }/
|
%link{ rel: :alternate, type: 'application/activity+json', href: tag_url(@tag) }/
|
||||||
|
%link{ rel: :alternate, type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', href: tag_url(@tag) }/
|
||||||
%meta{ name: 'robots', content: 'noindex' }/
|
%meta{ name: 'robots', content: 'noindex' }/
|
||||||
= render partial: 'shared/og'
|
= render partial: 'shared/og'
|
||||||
|
|
||||||
|
|||||||
@ -586,6 +586,7 @@ ca:
|
|||||||
created_msg: S'ha creat la nota de moderació d'instància.
|
created_msg: S'ha creat la nota de moderació d'instància.
|
||||||
description_html: Mireu i deixeu notes per als altres moderadors i per a un mateix
|
description_html: Mireu i deixeu notes per als altres moderadors i per a un mateix
|
||||||
destroyed_msg: S'ha esborrat la nota de moderació d'instància.
|
destroyed_msg: S'ha esborrat la nota de moderació d'instància.
|
||||||
|
placeholder: Informació sobre aquesta instància, accions preses o qualsevol altra cosa que us pugui ajudar a moderar-la en el futur.
|
||||||
title: Notes de moderació
|
title: Notes de moderació
|
||||||
private_comment: Comentari privat
|
private_comment: Comentari privat
|
||||||
public_comment: Comentari públic
|
public_comment: Comentari públic
|
||||||
@ -895,6 +896,7 @@ ca:
|
|||||||
no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
|
no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
|
||||||
open: Obre la publicació
|
open: Obre la publicació
|
||||||
original_status: Publicació original
|
original_status: Publicació original
|
||||||
|
quotes: Cites
|
||||||
reblogs: Impulsos
|
reblogs: Impulsos
|
||||||
replied_to_html: En resposta a %{acct_link}
|
replied_to_html: En resposta a %{acct_link}
|
||||||
status_changed: Publicació canviada
|
status_changed: Publicació canviada
|
||||||
@ -902,6 +904,7 @@ ca:
|
|||||||
title: Publicacions del compte - @%{name}
|
title: Publicacions del compte - @%{name}
|
||||||
trending: Tendència
|
trending: Tendència
|
||||||
view_publicly: Vegeu en públic
|
view_publicly: Vegeu en públic
|
||||||
|
view_quoted_post: Veure la publicació citada
|
||||||
visibility: Visibilitat
|
visibility: Visibilitat
|
||||||
with_media: Amb contingut multimèdia
|
with_media: Amb contingut multimèdia
|
||||||
strikes:
|
strikes:
|
||||||
@ -1577,6 +1580,13 @@ ca:
|
|||||||
expires_at: Caduca
|
expires_at: Caduca
|
||||||
uses: Usos
|
uses: Usos
|
||||||
title: Convidar persones
|
title: Convidar persones
|
||||||
|
link_preview:
|
||||||
|
author_html: Per %{name}
|
||||||
|
potentially_sensitive_content:
|
||||||
|
action: Feu clic per a mostrar
|
||||||
|
confirm_visit: Esteu segur que voleu obrir aquest enllaç?
|
||||||
|
hide_button: Amaga
|
||||||
|
label: Contingut potencialment sensible
|
||||||
lists:
|
lists:
|
||||||
errors:
|
errors:
|
||||||
limit: Has assolit la quantitat màxima de llistes
|
limit: Has assolit la quantitat màxima de llistes
|
||||||
@ -1885,6 +1895,9 @@ ca:
|
|||||||
other: "%{count} vídeos"
|
other: "%{count} vídeos"
|
||||||
boosted_from_html: Impulsat des de %{acct_link}
|
boosted_from_html: Impulsat des de %{acct_link}
|
||||||
content_warning: 'Avís de contingut: %{warning}'
|
content_warning: 'Avís de contingut: %{warning}'
|
||||||
|
content_warnings:
|
||||||
|
hide: Amaga la publicació
|
||||||
|
show: Mostra'n més
|
||||||
default_language: El mateix que a la llengua de la interfície
|
default_language: El mateix que a la llengua de la interfície
|
||||||
disallowed_hashtags:
|
disallowed_hashtags:
|
||||||
one: 'conté una etiqueta no permesa: %{tags}'
|
one: 'conté una etiqueta no permesa: %{tags}'
|
||||||
@ -1899,10 +1912,15 @@ ca:
|
|||||||
limit: Ja has fixat el màxim nombre de tuts
|
limit: Ja has fixat el màxim nombre de tuts
|
||||||
ownership: No es pot fixar el tut d'algú altre
|
ownership: No es pot fixar el tut d'algú altre
|
||||||
reblog: No es pot fixar un impuls
|
reblog: No es pot fixar un impuls
|
||||||
|
quote_error:
|
||||||
|
not_available: Publicació no disponible
|
||||||
|
pending_approval: Publicació pendent
|
||||||
|
revoked: Publicació eliminada per l'autor
|
||||||
quote_policies:
|
quote_policies:
|
||||||
followers: Només seguidors
|
followers: Només seguidors
|
||||||
nobody: Només jo
|
nobody: Només jo
|
||||||
public: Qualsevol
|
public: Qualsevol
|
||||||
|
quote_post_author: S'ha citat una publicació de @%{acct}
|
||||||
title: '%{name}: "%{quote}"'
|
title: '%{name}: "%{quote}"'
|
||||||
visibilities:
|
visibilities:
|
||||||
direct: Menció privada
|
direct: Menció privada
|
||||||
|
|||||||
@ -2015,6 +2015,7 @@ cs:
|
|||||||
errors:
|
errors:
|
||||||
in_reply_not_found: Příspěvek, na který se pokoušíte odpovědět, neexistuje.
|
in_reply_not_found: Příspěvek, na který se pokoušíte odpovědět, neexistuje.
|
||||||
quoted_status_not_found: Zdá se, že příspěvek, který se pokoušíte citovat neexistuje.
|
quoted_status_not_found: Zdá se, že příspěvek, který se pokoušíte citovat neexistuje.
|
||||||
|
quoted_user_not_mentioned: Nelze citovat nezmíněného uživatele v soukromé zmínce.
|
||||||
over_character_limit: byl překročen limit %{max} znaků
|
over_character_limit: byl překročen limit %{max} znaků
|
||||||
pin_errors:
|
pin_errors:
|
||||||
direct: Příspěvky viditelné pouze zmíněným uživatelům nelze připnout
|
direct: Příspěvky viditelné pouze zmíněným uživatelům nelze připnout
|
||||||
|
|||||||
@ -9,6 +9,7 @@ ca:
|
|||||||
Si us plau, verifica la carpeta de la brossa si no l'has rebut.
|
Si us plau, verifica la carpeta de la brossa si no l'has rebut.
|
||||||
failure:
|
failure:
|
||||||
already_authenticated: Ja t'has registrat.
|
already_authenticated: Ja t'has registrat.
|
||||||
|
closed_registrations: El vostre intent de registre s'ha blocat per una política de xarxa. Si creieu que és un error, contacteu %{email}.
|
||||||
inactive: El teu compte encara no s'ha activat.
|
inactive: El teu compte encara no s'ha activat.
|
||||||
invalid: "%{authentication_keys} o contrasenya no són vàlids."
|
invalid: "%{authentication_keys} o contrasenya no són vàlids."
|
||||||
last_attempt: Tens un intent més abans no es bloqui el teu compte.
|
last_attempt: Tens un intent més abans no es bloqui el teu compte.
|
||||||
|
|||||||
@ -1672,7 +1672,7 @@ en:
|
|||||||
disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
|
disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation.
|
||||||
followers: This action will move all followers from the current account to the new account
|
followers: This action will move all followers from the current account to the new account
|
||||||
only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
|
only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>.
|
||||||
other_data: No other data will be moved automatically
|
other_data: No other data will be moved automatically (including your posts and the list of accounts you follow)
|
||||||
redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
|
redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches
|
||||||
moderation:
|
moderation:
|
||||||
title: Moderation
|
title: Moderation
|
||||||
|
|||||||
@ -1929,6 +1929,7 @@ fo:
|
|||||||
errors:
|
errors:
|
||||||
in_reply_not_found: Posturin, sum tú roynir at svara, sýnist ikki at finnast.
|
in_reply_not_found: Posturin, sum tú roynir at svara, sýnist ikki at finnast.
|
||||||
quoted_status_not_found: Posturin, sum tú roynir at sitera, sýnist ikki at finnast.
|
quoted_status_not_found: Posturin, sum tú roynir at sitera, sýnist ikki at finnast.
|
||||||
|
quoted_user_not_mentioned: Kann ikki sitera ein brúkara, sum ikki er nevndur, í einum posti, sum er ein privat umrøða.
|
||||||
over_character_limit: mesta tal av teknum, %{max}, rokkið
|
over_character_limit: mesta tal av teknum, %{max}, rokkið
|
||||||
pin_errors:
|
pin_errors:
|
||||||
direct: Postar, sum einans eru sjónligir hjá nevndum brúkarum, kunnu ikki festast
|
direct: Postar, sum einans eru sjónligir hjá nevndum brúkarum, kunnu ikki festast
|
||||||
|
|||||||
@ -2060,6 +2060,7 @@ ga:
|
|||||||
errors:
|
errors:
|
||||||
in_reply_not_found: Is cosúil nach ann don phostáil a bhfuil tú ag iarraidh freagra a thabhairt air.
|
in_reply_not_found: Is cosúil nach ann don phostáil a bhfuil tú ag iarraidh freagra a thabhairt air.
|
||||||
quoted_status_not_found: Is cosúil nach bhfuil an post atá tú ag iarraidh a lua ann.
|
quoted_status_not_found: Is cosúil nach bhfuil an post atá tú ag iarraidh a lua ann.
|
||||||
|
quoted_user_not_mentioned: Ní féidir úsáideoir nach luaitear a lua i bpost Lua Príobháideach.
|
||||||
over_character_limit: teorainn carachtar %{max} sáraithe
|
over_character_limit: teorainn carachtar %{max} sáraithe
|
||||||
pin_errors:
|
pin_errors:
|
||||||
direct: Ní féidir postálacha nach bhfuil le feiceáil ach ag úsáideoirí luaite a phinnáil
|
direct: Ní féidir postálacha nach bhfuil le feiceáil ach ag úsáideoirí luaite a phinnáil
|
||||||
|
|||||||
@ -1929,6 +1929,7 @@ gl:
|
|||||||
errors:
|
errors:
|
||||||
in_reply_not_found: A publicación á que tentas responder semella que non existe.
|
in_reply_not_found: A publicación á que tentas responder semella que non existe.
|
||||||
quoted_status_not_found: Parece que a publicación que intentas citar non existe.
|
quoted_status_not_found: Parece que a publicación que intentas citar non existe.
|
||||||
|
quoted_user_not_mentioned: Non se pode citar a unha usuaria non mencionada nunha Mención Privada.
|
||||||
over_character_limit: Excedeu o límite de caracteres %{max}
|
over_character_limit: Excedeu o límite de caracteres %{max}
|
||||||
pin_errors:
|
pin_errors:
|
||||||
direct: As publicacións que só son visibles para as usuarias mencionadas non se poden fixar
|
direct: As publicacións que só son visibles para as usuarias mencionadas non se poden fixar
|
||||||
|
|||||||
@ -855,6 +855,11 @@ it:
|
|||||||
authenticated: Solo utenti autenticati
|
authenticated: Solo utenti autenticati
|
||||||
disabled: Richiedi un ruolo utente specifico
|
disabled: Richiedi un ruolo utente specifico
|
||||||
public: Tutti
|
public: Tutti
|
||||||
|
landing_page:
|
||||||
|
values:
|
||||||
|
about: Info
|
||||||
|
local_feed: Feed locale
|
||||||
|
trends: Tendenze
|
||||||
registrations:
|
registrations:
|
||||||
moderation_recommandation: Assicurati di avere un team di moderazione adeguato e reattivo prima di aprire le registrazioni a tutti!
|
moderation_recommandation: Assicurati di avere un team di moderazione adeguato e reattivo prima di aprire le registrazioni a tutti!
|
||||||
preamble: Controlla chi può creare un account sul tuo server.
|
preamble: Controlla chi può creare un account sul tuo server.
|
||||||
@ -1924,6 +1929,7 @@ it:
|
|||||||
errors:
|
errors:
|
||||||
in_reply_not_found: Il post a cui stai tentando di rispondere non sembra esistere.
|
in_reply_not_found: Il post a cui stai tentando di rispondere non sembra esistere.
|
||||||
quoted_status_not_found: Il post che stai cercando di citare non sembra esistere.
|
quoted_status_not_found: Il post che stai cercando di citare non sembra esistere.
|
||||||
|
quoted_user_not_mentioned: Non è possibile citare un utente non menzionato in un post di menzione privata.
|
||||||
over_character_limit: Limite caratteri superato di %{max}
|
over_character_limit: Limite caratteri superato di %{max}
|
||||||
pin_errors:
|
pin_errors:
|
||||||
direct: I messaggi visibili solo agli utenti citati non possono essere fissati in cima
|
direct: I messaggi visibili solo agli utenti citati non possono essere fissati in cima
|
||||||
|
|||||||
@ -60,7 +60,6 @@ an:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Aquí son belunas d''as etiquetas que mas has utilizau recientment:'
|
name: 'Aquí son belunas d''as etiquetas que mas has utilizau recientment:'
|
||||||
filters:
|
filters:
|
||||||
action: Triar qué acción realizar quan una publicación coincide con o filtro
|
|
||||||
actions:
|
actions:
|
||||||
hide: Amagar completament lo conteniu filtrau, comportando-se como si no existise
|
hide: Amagar completament lo conteniu filtrau, comportando-se como si no existise
|
||||||
warn: Amagar lo conteniu filtrau dezaga d'una alvertencia mencionando lo titol d'o filtro
|
warn: Amagar lo conteniu filtrau dezaga d'una alvertencia mencionando lo titol d'o filtro
|
||||||
|
|||||||
@ -73,7 +73,6 @@ ar:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'فيما يلي بعض الوسوم التي استخدمتها مؤخراً:'
|
name: 'فيما يلي بعض الوسوم التي استخدمتها مؤخراً:'
|
||||||
filters:
|
filters:
|
||||||
action: اختر الإجراء الذي سينفذ عند تطابق المشاركة فلتر التصفية
|
|
||||||
actions:
|
actions:
|
||||||
blur: إخفاء الوسائط وراء تحذير، دون إخفاء النص نفسه
|
blur: إخفاء الوسائط وراء تحذير، دون إخفاء النص نفسه
|
||||||
hide: إخفاء المحتويات التي تم تصفيتها، والتصرف كما لو أنها غير موجودة
|
hide: إخفاء المحتويات التي تم تصفيتها، والتصرف كما لو أنها غير موجودة
|
||||||
|
|||||||
@ -79,7 +79,6 @@ be:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Вось некаторыя з хэштэгаў, якімі вы нядаўна карысталіся:'
|
name: 'Вось некаторыя з хэштэгаў, якімі вы нядаўна карысталіся:'
|
||||||
filters:
|
filters:
|
||||||
action: Абярыце, што зрабіць, калі допіс падпадае пад умовы фільтру
|
|
||||||
actions:
|
actions:
|
||||||
blur: Схавайце медыя за знакам папярэджання, не хаваючы пры гэтым тэкст
|
blur: Схавайце медыя за знакам папярэджання, не хаваючы пры гэтым тэкст
|
||||||
hide: Поўнасцю схаваць адфільтраванае змесціва, дзейнічаць, нібы яго не існуе
|
hide: Поўнасцю схаваць адфільтраванае змесціва, дзейнічаць, нібы яго не існуе
|
||||||
|
|||||||
@ -74,7 +74,6 @@ bg:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Ето няколко хаштага, които последно сте използвали:'
|
name: 'Ето няколко хаштага, които последно сте използвали:'
|
||||||
filters:
|
filters:
|
||||||
action: Изберете кое действие да се извърши, прецеждайки съвпаденията на публикацията
|
|
||||||
actions:
|
actions:
|
||||||
blur: Скриване на мултимедия зад предупреждение, но без скриване на самия текст
|
blur: Скриване на мултимедия зад предупреждение, но без скриване на самия текст
|
||||||
hide: Напълно скриване на филтрираното съдържание, сякаш не съществува
|
hide: Напълно скриване на филтрираното съдържание, сякаш не съществува
|
||||||
|
|||||||
@ -76,7 +76,7 @@ ca:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Aquí estan algunes de les etiquetes que més has usat recentment:'
|
name: 'Aquí estan algunes de les etiquetes que més has usat recentment:'
|
||||||
filters:
|
filters:
|
||||||
action: Tria quina acció cal executar quan un apunt coincideixi amb el filtre
|
action: Trieu quina acció executar quan una publicació coincideixi amb el filtre
|
||||||
actions:
|
actions:
|
||||||
blur: Amaga el contingut multimèdia rere un avís, sense amagar el text en si
|
blur: Amaga el contingut multimèdia rere un avís, sense amagar el text en si
|
||||||
hide: Ocultar completament el contingut filtrat, comportant-se com si no existís
|
hide: Ocultar completament el contingut filtrat, comportant-se com si no existís
|
||||||
|
|||||||
@ -79,7 +79,7 @@ cs:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Zde jsou některé z hashtagů, které jste nedávno použili:'
|
name: 'Zde jsou některé z hashtagů, které jste nedávno použili:'
|
||||||
filters:
|
filters:
|
||||||
action: Vyberte, jakou akci provést, když příspěvek odpovídá filtru
|
action: Vyberte, která akce má být provedena, když příspěvek odpovídá filtru
|
||||||
actions:
|
actions:
|
||||||
blur: Skrýt média za varováním, bez skrytí samotného textu
|
blur: Skrýt média za varováním, bez skrytí samotného textu
|
||||||
hide: Úplně schovat filtrovaný obsah tak, jako by neexistoval
|
hide: Úplně schovat filtrovaný obsah tak, jako by neexistoval
|
||||||
|
|||||||
@ -79,7 +79,6 @@ cy:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Dyma rai o’r hashnodau a ddefnyddioch chi''n ddiweddar:'
|
name: 'Dyma rai o’r hashnodau a ddefnyddioch chi''n ddiweddar:'
|
||||||
filters:
|
filters:
|
||||||
action: Dewiswch pa weithred i'w chyflawni pan fydd postiad yn cyfateb i'r hidlydd
|
|
||||||
actions:
|
actions:
|
||||||
blur: Cuddio cyfryngau tu ôl i rybudd, heb guddio'r testun ei hun
|
blur: Cuddio cyfryngau tu ôl i rybudd, heb guddio'r testun ei hun
|
||||||
hide: Cuddiwch y cynnwys wedi'i hidlo'n llwyr, gan ymddwyn fel pe na bai'n bodoli
|
hide: Cuddiwch y cynnwys wedi'i hidlo'n llwyr, gan ymddwyn fel pe na bai'n bodoli
|
||||||
|
|||||||
@ -79,7 +79,7 @@ de:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Hier sind ein paar Hashtags, die du in letzter Zeit am häufigsten verwendet hast:'
|
name: 'Hier sind ein paar Hashtags, die du in letzter Zeit am häufigsten verwendet hast:'
|
||||||
filters:
|
filters:
|
||||||
action: Gib an, welche Aktion ausgeführt werden soll, wenn ein Beitrag dem Filter entspricht
|
action: Auswählen, welche Aktion ausgeführt werden soll, wenn ein Beitrag dem Filter entspricht
|
||||||
actions:
|
actions:
|
||||||
blur: Medien mit einer Warnung ausblenden, ohne den Text selbst auszublenden
|
blur: Medien mit einer Warnung ausblenden, ohne den Text selbst auszublenden
|
||||||
hide: Den gefilterten Beitrag vollständig ausblenden, als hätte er nie existiert
|
hide: Den gefilterten Beitrag vollständig ausblenden, als hätte er nie existiert
|
||||||
|
|||||||
@ -74,7 +74,6 @@ en-GB:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Here are some of the hashtags you used the most recently:'
|
name: 'Here are some of the hashtags you used the most recently:'
|
||||||
filters:
|
filters:
|
||||||
action: Chose which action to perform when a post matches the filter
|
|
||||||
actions:
|
actions:
|
||||||
blur: Hide media behind a warning, without hiding the text itself
|
blur: Hide media behind a warning, without hiding the text itself
|
||||||
hide: Completely hide the filtered content, behaving as if it did not exist
|
hide: Completely hide the filtered content, behaving as if it did not exist
|
||||||
|
|||||||
@ -76,7 +76,6 @@ eo:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Jen kelkaj el la kradvortoj, kiujn vi uzis lastatempe:'
|
name: 'Jen kelkaj el la kradvortoj, kiujn vi uzis lastatempe:'
|
||||||
filters:
|
filters:
|
||||||
action: Elekti ago kiam mesaĝo kongruas la filtrilon
|
|
||||||
actions:
|
actions:
|
||||||
blur: Kaŝi amaskomunikilaron malantaŭ averto, sen kaŝi la tekston mem
|
blur: Kaŝi amaskomunikilaron malantaŭ averto, sen kaŝi la tekston mem
|
||||||
hide: Tute kaŝigi la filtritajn enhavojn, kvazau ĝi ne ekzistis
|
hide: Tute kaŝigi la filtritajn enhavojn, kvazau ĝi ne ekzistis
|
||||||
|
|||||||
@ -79,7 +79,6 @@ es-MX:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Aquí están algunas de las etiquetas que más has usado recientemente:'
|
name: 'Aquí están algunas de las etiquetas que más has usado recientemente:'
|
||||||
filters:
|
filters:
|
||||||
action: Elegir qué acción realizar cuando una publicación coincide con el filtro
|
|
||||||
actions:
|
actions:
|
||||||
blur: Ocultar contenido multimedia detrás de una advertencia, sin ocultar el propio texto
|
blur: Ocultar contenido multimedia detrás de una advertencia, sin ocultar el propio texto
|
||||||
hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera
|
hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera
|
||||||
|
|||||||
@ -79,7 +79,6 @@ es:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Aquí están algunas de las etiquetas que más has utilizado recientemente:'
|
name: 'Aquí están algunas de las etiquetas que más has utilizado recientemente:'
|
||||||
filters:
|
filters:
|
||||||
action: Elegir qué acción realizar cuando una publicación coincide con el filtro
|
|
||||||
actions:
|
actions:
|
||||||
blur: Ocultar contenido multimedia detrás de una advertencia, sin ocultar el texto en sí
|
blur: Ocultar contenido multimedia detrás de una advertencia, sin ocultar el texto en sí
|
||||||
hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera
|
hide: Ocultar completamente el contenido filtrado, comportándose como si no existiera
|
||||||
|
|||||||
@ -76,7 +76,6 @@ et:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Siin on mõned nendest siltidest, mida oled viimati kasutanud:'
|
name: 'Siin on mõned nendest siltidest, mida oled viimati kasutanud:'
|
||||||
filters:
|
filters:
|
||||||
action: Tegevuse valik, kui postitus vastab filtrile
|
|
||||||
actions:
|
actions:
|
||||||
blur: Peida meediumifailid hoiatusega, kuid jäta tekst peitmata
|
blur: Peida meediumifailid hoiatusega, kuid jäta tekst peitmata
|
||||||
hide: Filtreeritud sisu täielik peitmine, nagu seda polekski üldse olemas
|
hide: Filtreeritud sisu täielik peitmine, nagu seda polekski üldse olemas
|
||||||
|
|||||||
@ -74,7 +74,6 @@ eu:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Hemen dituzu azkenaldian gehien erabili dituzun traoletako batzuk:'
|
name: 'Hemen dituzu azkenaldian gehien erabili dituzun traoletako batzuk:'
|
||||||
filters:
|
filters:
|
||||||
action: Aukeratu ze ekintza burutu behar den bidalketa bat iragazkiarekin bat datorrenean
|
|
||||||
actions:
|
actions:
|
||||||
blur: Ezkutatu edukia ohar baten atzean, testua bera ezkutatu gabe
|
blur: Ezkutatu edukia ohar baten atzean, testua bera ezkutatu gabe
|
||||||
hide: Ezkutatu erabat iragazitako edukia, existituko ez balitz bezala
|
hide: Ezkutatu erabat iragazitako edukia, existituko ez balitz bezala
|
||||||
|
|||||||
@ -76,7 +76,6 @@ fa:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'اینها برخی از برچسبهایی هستند که به تازگی استفاده کردهاید:'
|
name: 'اینها برخی از برچسبهایی هستند که به تازگی استفاده کردهاید:'
|
||||||
filters:
|
filters:
|
||||||
action: گزینش کنشی که هنگام تطابق فرستهای با پالایه انجام شود
|
|
||||||
actions:
|
actions:
|
||||||
blur: نهفتن رسانه پشت هشدار بدون نهفتن خود متن
|
blur: نهفتن رسانه پشت هشدار بدون نهفتن خود متن
|
||||||
hide: نهفتن کامل محتوای پالوده، گویی وجود ندارد
|
hide: نهفتن کامل محتوای پالوده، گویی وجود ندارد
|
||||||
|
|||||||
@ -79,7 +79,6 @@ fi:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Tässä muutamia hiljattain käyttämiäsi aihetunnisteita:'
|
name: 'Tässä muutamia hiljattain käyttämiäsi aihetunnisteita:'
|
||||||
filters:
|
filters:
|
||||||
action: Valitse, mikä toiminto suoritetaan, kun julkaisu vastaa suodatinta
|
|
||||||
actions:
|
actions:
|
||||||
blur: Piilota media varoituksen taakse piilottamatta itse tekstiä
|
blur: Piilota media varoituksen taakse piilottamatta itse tekstiä
|
||||||
hide: Piilota suodatettu sisältö kokonaan, ikään kuin sitä ei olisi olemassa
|
hide: Piilota suodatettu sisältö kokonaan, ikään kuin sitä ei olisi olemassa
|
||||||
|
|||||||
@ -79,7 +79,6 @@ fo:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Her eru nakrir tvíkrossar, ið tú hevur brúkt í seinastuni:'
|
name: 'Her eru nakrir tvíkrossar, ið tú hevur brúkt í seinastuni:'
|
||||||
filters:
|
filters:
|
||||||
action: Vel, hvat skal henda, tá eitt uppslag svarar til filtrið
|
|
||||||
actions:
|
actions:
|
||||||
blur: Fjal miðlar aftanfyri eina ávaring, uttan at fjala sjálvan tekstin
|
blur: Fjal miðlar aftanfyri eina ávaring, uttan at fjala sjálvan tekstin
|
||||||
hide: Fjal filtreraða innihaldið fullkomiliga, ber seg at sum at tað ikki fanst
|
hide: Fjal filtreraða innihaldið fullkomiliga, ber seg at sum at tað ikki fanst
|
||||||
|
|||||||
@ -74,7 +74,6 @@ fr-CA:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Voici quelques hashtags que vous avez utilisés récemment :'
|
name: 'Voici quelques hashtags que vous avez utilisés récemment :'
|
||||||
filters:
|
filters:
|
||||||
action: Choisir l'action à effectuer quand un message correspond au filtre
|
|
||||||
actions:
|
actions:
|
||||||
blur: Cacher les médias derrière un avertissement, sans cacher le texte
|
blur: Cacher les médias derrière un avertissement, sans cacher le texte
|
||||||
hide: Cacher complètement le contenu filtré, faire comme s'il n'existait pas
|
hide: Cacher complètement le contenu filtré, faire comme s'il n'existait pas
|
||||||
|
|||||||
@ -74,7 +74,6 @@ fr:
|
|||||||
featured_tag:
|
featured_tag:
|
||||||
name: 'Voici quelques hashtags que vous avez utilisés récemment :'
|
name: 'Voici quelques hashtags que vous avez utilisés récemment :'
|
||||||
filters:
|
filters:
|
||||||
action: Choisir l'action à effectuer quand un message correspond au filtre
|
|
||||||
actions:
|
actions:
|
||||||
blur: Cacher les médias derrière un avertissement, sans cacher le texte
|
blur: Cacher les médias derrière un avertissement, sans cacher le texte
|
||||||
hide: Cacher complètement le contenu filtré, faire comme s'il n'existait pas
|
hide: Cacher complètement le contenu filtré, faire comme s'il n'existait pas
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user