Merge git://github.com/tootsuite/mastodon into tootsuite-master

This commit is contained in:
Ondřej Hruška 2017-07-25 21:36:22 +02:00
commit 7e5691804d
139 changed files with 1196 additions and 758 deletions

View File

@ -4,3 +4,4 @@ ffmpeg
libxdamage1 libxdamage1
libxfixes3 libxfixes3
libicu-dev libicu-dev
libidn11-dev

View File

@ -2,7 +2,7 @@
"name": "Mastodon", "name": "Mastodon",
"description": "A GNU Social-compatible microblogging server", "description": "A GNU Social-compatible microblogging server",
"repository": "https://github.com/tootsuite/mastodon", "repository": "https://github.com/tootsuite/mastodon",
"logo": "https://github.com/tootsuite/mastodon/raw/master/app/assets/images/logo.png", "logo": "https://github.com/tootsuite/mastodon/raw/master/app/javascript/images/logo.svg",
"env": { "env": {
"HEROKU": { "HEROKU": {
"description": "Leave this as true", "description": "Leave this as true",

View File

@ -20,9 +20,7 @@ class Api::V1::FavouritesController < Api::BaseController
def cached_favourites def cached_favourites
cache_collection( cache_collection(
Status.where( Status.reorder(nil).joins(:favourites).merge(results),
id: results.map(&:status_id)
),
Status Status
) )
end end

View File

@ -6,8 +6,8 @@ class Api::Web::PushSubscriptionsController < Api::BaseController
before_action :require_user! before_action :require_user!
def create def create
params.require(:data).require(:endpoint) params.require(:subscription).require(:endpoint)
params.require(:data).require(:keys).require([:auth, :p256dh]) params.require(:subscription).require(:keys).require([:auth, :p256dh])
active_session = current_session active_session = current_session
@ -16,10 +16,23 @@ class Api::Web::PushSubscriptionsController < Api::BaseController
active_session.update!(web_push_subscription: nil) active_session.update!(web_push_subscription: nil)
end end
# Mobile devices do not support regular notifications, so we enable push notifications by default
alerts_enabled = active_session.detection.device.mobile? || active_session.detection.device.tablet?
data = {
alerts: {
follow: alerts_enabled,
favourite: alerts_enabled,
reblog: alerts_enabled,
mention: alerts_enabled,
},
}
web_subscription = ::Web::PushSubscription.create!( web_subscription = ::Web::PushSubscription.create!(
endpoint: params[:data][:endpoint], endpoint: params[:subscription][:endpoint],
key_p256dh: params[:data][:keys][:p256dh], key_p256dh: params[:subscription][:keys][:p256dh],
key_auth: params[:data][:keys][:auth] key_auth: params[:subscription][:keys][:auth],
data: data
) )
active_session.update!(web_push_subscription: web_subscription) active_session.update!(web_push_subscription: web_subscription)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" height="1000" width="1000"><path d="M500 0a500 500 0 0 0-353.553 146.447 500 500 0 1 0 707.106 707.106A500 500 0 0 0 500 0zm-.059 280.05h107.12c-19.071 13.424-26.187 51.016-27.12 73.843V562.05c0 44.32-35.68 80-80 80s-80-35.68-80-80v-202c0-44.32 35.68-80 80-80zm-.441 52c-15.464 0-28 12.537-28 28 0 15.465 12.536 28 28 28s28-12.535 28-28c0-15.463-12.536-28-28-28zm-279.059 7.9c44.32 0 80 35.68 80 80v206.157c.933 22.827 8.049 60.42 27.12 73.842H220.44c-44.32 0-80-35.68-80-80v-200c0-44.32 35.68-80 80-80zm559.12 0c44.32 0 80 35.68 80 80v200c0 44.32-35.68 80-80 80H672.44c19.071-13.424 26.187-51.016 27.12-73.843V419.95c0-44.32 35.68-80 80-80zM220 392c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zm560 0c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zm-280.5 40.05c-15.464 0-28 12.537-28 28 0 15.465 12.536 28 28 28s28-12.535 28-28c0-15.463-12.536-28-28-28zM220 491.95c-15.464 0-28 12.535-28 28 0 15.463 12.536 28 28 28s28-12.537 28-28c0-15.465-12.536-28-28-28zm560 0c-15.464 0-28 12.535-28 28 0 15.463 12.536 28 28 28s28-12.537 28-28c0-15.465-12.536-28-28-28zM499.5 532c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zM220 591.95c-15.464 0-28 12.535-28 28 0 15.463 12.536 28 28 28s28-12.537 28-28c0-15.465-12.536-28-28-28zm560 0c-15.464 0-28 12.535-28 28 0 15.463 12.536 28 28 28s28-12.537 28-28c0-15.465-12.536-28-28-28z" fill="#fff"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="61.076954mm" height="65.47831mm" viewBox="0 0 216.4144 232.00976"><path d="M211.80734 139.0875c-3.18125 16.36625-28.4925 34.2775-57.5625 37.74875-15.15875 1.80875-30.08375 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.39125 27.9425 21.11625.7225 39.91875-5.20625 39.91875-5.20625l.8675 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234 213.82 1.40609 165.31125.20859 116.09125c-.365-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67234 3.45375 78.20359.2425 107.86484 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.975 14.7525 32.975 65.0825 0 0 .41375 37.13375-4.59875 62.915" fill="#3088d4"/><path d="M177.50984 80.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025 0-17.4175 7.5075-17.4175 22.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375 0-15.74 6.32875-15.74 18.7975v59.15H38.90484V80.077c0-12.455 3.17125-22.3525 9.54125-29.675 6.56875-7.3225 15.17125-11.07625 25.85-11.07625 12.355 0 21.71125 4.74875 27.8975 14.2475l6.01375 10.08125 6.015-10.08125c6.185-9.49875 15.54125-14.2475 27.8975-14.2475 10.6775 0 19.28 3.75375 25.85 11.07625 6.36875 7.3225 9.54 17.22 9.54 29.675" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="61.077141mm" height="65.47831mm" viewBox="0 0 216.41507 232.00976"><path d="M211.80683 139.0875c-3.1825 16.36625-28.4925 34.2775-57.5625 37.74875-15.16 1.80875-30.0825 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.3925 27.9425 21.115.7225 39.91625-5.20625 39.91625-5.20625l.86875 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23183 213.82 1.40558 165.31125.20808 116.09125c-.36375-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67058 3.45375 78.20308.2425 107.86433 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.97625 14.7525 32.97625 65.0825 0 0 .4125 37.13375-4.6 62.915" fill="#3088d4"/><path d="M65.68743 96.45938c0 9.01375-7.3075 16.32125-16.3225 16.32125-9.01375 0-16.32-7.3075-16.32-16.32125 0-9.01375 7.30625-16.3225 16.32-16.3225 9.015 0 16.3225 7.30875 16.3225 16.3225M124.52893 96.45938c0 9.01375-7.30875 16.32125-16.3225 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.3225 7.30875 16.3225 16.3225M183.36933 96.45938c0 9.01375-7.3075 16.32125-16.32125 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.32125 7.30875 16.32125 16.3225" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import detectPassiveEvents from 'detect-passive-events';
import scrollTop from '../scroll'; import scrollTop from '../scroll';
export default class Column extends React.PureComponent { export default class Column extends React.PureComponent {
@ -30,16 +31,19 @@ export default class Column extends React.PureComponent {
this.node = c; this.node = c;
} }
componentDidMount () {
this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents ? { passive: true } : false);
}
componentWillUnmount () {
this.node.removeEventListener('wheel', this.handleWheel);
}
render () { render () {
const { children } = this.props; const { children } = this.props;
return ( return (
<div <div role='region' className='column' ref={this.setRef}>
role='region'
className='column'
ref={this.setRef}
onWheel={this.handleWheel}
>
{children} {children}
</div> </div>
); );

View File

@ -3,6 +3,7 @@ import { FormattedMessage } from 'react-intl';
const LoadingIndicator = () => ( const LoadingIndicator = () => (
<div className='loading-indicator'> <div className='loading-indicator'>
<div className='loading-indicator__figure' />
<FormattedMessage id='loading_indicator.label' defaultMessage='Loading...' /> <FormattedMessage id='loading_indicator.label' defaultMessage='Loading...' />
</div> </div>
); );

View File

@ -15,6 +15,7 @@ const messages = defineMessages({
mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' }, mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
block: { id: 'account.block', defaultMessage: 'Block @{name}' }, block: { id: 'account.block', defaultMessage: 'Block @{name}' },
reply: { id: 'status.reply', defaultMessage: 'Reply' }, reply: { id: 'status.reply', defaultMessage: 'Reply' },
share: { id: 'status.share', defaultMessage: 'Share' },
replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' }, replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' },
reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },
@ -60,6 +61,13 @@ export default class StatusActionBar extends ImmutablePureComponent {
this.props.onReply(this.props.status, this.context.router.history); this.props.onReply(this.props.status, this.context.router.history);
} }
handleShareClick = () => {
navigator.share({
text: this.props.status.get('search_index'),
url: this.props.status.get('url'),
});
}
handleFavouriteClick = () => { handleFavouriteClick = () => {
this.props.onFavourite(this.props.status); this.props.onFavourite(this.props.status);
} }
@ -139,11 +147,16 @@ export default class StatusActionBar extends ImmutablePureComponent {
replyTitle = intl.formatMessage(messages.replyAll); replyTitle = intl.formatMessage(messages.replyAll);
} }
const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && (
<IconButton className='status__action-bar-button' title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShareClick} />
);
return ( return (
<div className='status__action-bar'> <div className='status__action-bar'>
<IconButton className='status__action-bar-button' disabled={anonymousAccess} title={replyTitle} icon={replyIcon} onClick={this.handleReplyClick} /> <IconButton className='status__action-bar-button' disabled={anonymousAccess} title={replyTitle} icon={replyIcon} onClick={this.handleReplyClick} />
<IconButton className='status__action-bar-button' disabled={anonymousAccess || reblogDisabled} active={status.get('reblogged')} title={reblogDisabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} onClick={this.handleReblogClick} /> <IconButton className='status__action-bar-button' disabled={anonymousAccess || reblogDisabled} active={status.get('reblogged')} title={reblogDisabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} onClick={this.handleReblogClick} />
<IconButton className='status__action-bar-button star-icon' disabled={anonymousAccess} animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /> <IconButton className='status__action-bar-button star-icon' disabled={anonymousAccess} animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />
{shareButton}
<div className='status__action-bar-dropdown'> <div className='status__action-bar-dropdown'>
<DropdownMenu disabled={anonymousAccess} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel='More' /> <DropdownMenu disabled={anonymousAccess} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel='More' />

View File

@ -31,16 +31,18 @@ export default class StatusList extends ImmutablePureComponent {
intersectionObserverWrapper = new IntersectionObserverWrapper(); intersectionObserverWrapper = new IntersectionObserverWrapper();
handleScroll = debounce(() => { handleScroll = debounce(() => {
const { scrollTop, scrollHeight, clientHeight } = this.node; if (this.node) {
const offset = scrollHeight - scrollTop - clientHeight; const { scrollTop, scrollHeight, clientHeight } = this.node;
this._oldScrollPosition = scrollHeight - scrollTop; const offset = scrollHeight - scrollTop - clientHeight;
this._oldScrollPosition = scrollHeight - scrollTop;
if (250 > offset && this.props.onScrollToBottom && !this.props.isLoading) { if (250 > offset && this.props.onScrollToBottom && !this.props.isLoading) {
this.props.onScrollToBottom(); this.props.onScrollToBottom();
} else if (scrollTop < 100 && this.props.onScrollToTop) { } else if (scrollTop < 100 && this.props.onScrollToTop) {
this.props.onScrollToTop(); this.props.onScrollToTop();
} else if (this.props.onScroll) { } else if (this.props.onScroll) {
this.props.onScroll(); this.props.onScroll();
}
} }
}, 200, { }, 200, {
trailing: true, trailing: true,

View File

@ -16,7 +16,6 @@ const messages = defineMessages({
follow: { id: 'account.follow', defaultMessage: 'Follow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' },
report: { id: 'account.report', defaultMessage: 'Report @{name}' }, report: { id: 'account.report', defaultMessage: 'Report @{name}' },
media: { id: 'account.media', defaultMessage: 'Media' }, media: { id: 'account.media', defaultMessage: 'Media' },
disclaimer: { id: 'account.disclaimer', defaultMessage: 'This user is from another instance. This number may be larger.' },
blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' }, blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' },
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
}); });
@ -68,7 +67,19 @@ export default class ActionBar extends React.PureComponent {
if (account.get('acct') !== account.get('username')) { if (account.get('acct') !== account.get('username')) {
const domain = account.get('acct').split('@')[1]; const domain = account.get('acct').split('@')[1];
extraInfo = <abbr title={intl.formatMessage(messages.disclaimer)}>*</abbr>;
extraInfo = (
<div className='account__disclaimer'>
<FormattedMessage
id='account.disclaimer_full'
defaultMessage="Information below may reflect the user's profile incompletely."
/>
{' '}
<a target='_blank' rel='noopener' href={account.get('url')}>
<FormattedMessage id='account.view_full_profile' defaultMessage='View full profile' />
</a>
</div>
);
menu.push(null); menu.push(null);
@ -80,26 +91,30 @@ export default class ActionBar extends React.PureComponent {
} }
return ( return (
<div className='account__action-bar'> <div>
<div className='account__action-bar-dropdown'> {extraInfo}
<DropdownMenu items={menu} icon='bars' size={24} direction='right' />
</div>
<div className='account__action-bar-links'> <div className='account__action-bar'>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}`}> <div className='account__action-bar-dropdown'>
<span><FormattedMessage id='account.posts' defaultMessage='Posts' /></span> <DropdownMenu items={menu} icon='bars' size={24} direction='right' />
<strong><FormattedNumber value={account.get('statuses_count')} /> {extraInfo}</strong> </div>
</Link>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`}> <div className='account__action-bar-links'>
<span><FormattedMessage id='account.follows' defaultMessage='Follows' /></span> <Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}`}>
<strong><FormattedNumber value={account.get('following_count')} /> {extraInfo}</strong> <span><FormattedMessage id='account.posts' defaultMessage='Posts' /></span>
</Link> <strong><FormattedNumber value={account.get('statuses_count')} /></strong>
</Link>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`}> <Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`}>
<span><FormattedMessage id='account.followers' defaultMessage='Followers' /></span> <span><FormattedMessage id='account.follows' defaultMessage='Follows' /></span>
<strong><FormattedNumber value={account.get('followers_count')} /> {extraInfo}</strong> <strong><FormattedNumber value={account.get('following_count')} /></strong>
</Link> </Link>
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`}>
<span><FormattedMessage id='account.followers' defaultMessage='Followers' /></span>
<strong><FormattedNumber value={account.get('followers_count')} /></strong>
</Link>
</div>
</div> </div>
</div> </div>
); );

View File

@ -16,13 +16,14 @@ import SensitiveButtonContainer from '../containers/sensitive_button_container';
import EmojiPickerDropdown from './emoji_picker_dropdown'; import EmojiPickerDropdown from './emoji_picker_dropdown';
import UploadFormContainer from '../containers/upload_form_container'; import UploadFormContainer from '../containers/upload_form_container';
import WarningContainer from '../containers/warning_container'; import WarningContainer from '../containers/warning_container';
import { isMobile } from '../../../is_mobile';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { length } from 'stringz'; import { length } from 'stringz';
import { isMobile } from '../../../is_mobile'; import { isMobile } from '../../../is_mobile';
const messages = defineMessages({ const messages = defineMessages({
placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' }, placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },
spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Content warning' }, spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },
publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, publish: { id: 'compose_form.publish', defaultMessage: 'Toot' },
publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' }, publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}!' },
}); });

View File

@ -52,14 +52,8 @@ class Bundle extends React.Component {
load = (props) => { load = (props) => {
const { fetchComponent, onFetch, onFetchSuccess, onFetchFail, renderDelay } = props || this.props; const { fetchComponent, onFetch, onFetchSuccess, onFetchFail, renderDelay } = props || this.props;
this.setState({ mod: undefined });
onFetch(); onFetch();
if (renderDelay !== 0) {
this.timestamp = new Date();
this.timeout = setTimeout(() => this.setState({ forceRender: true }), renderDelay);
}
if (Bundle.cache[fetchComponent.name]) { if (Bundle.cache[fetchComponent.name]) {
const mod = Bundle.cache[fetchComponent.name]; const mod = Bundle.cache[fetchComponent.name];
@ -68,6 +62,13 @@ class Bundle extends React.Component {
return Promise.resolve(); return Promise.resolve();
} }
this.setState({ mod: undefined });
if (renderDelay !== 0) {
this.timestamp = new Date();
this.timeout = setTimeout(() => this.setState({ forceRender: true }), renderDelay);
}
return fetchComponent() return fetchComponent()
.then((mod) => { .then((mod) => {
Bundle.cache[fetchComponent.name] = mod; Bundle.cache[fetchComponent.name] = mod;

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { injectIntl } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
@ -21,6 +22,7 @@ const componentMap = {
'FAVOURITES': FavouritedStatuses, 'FAVOURITES': FavouritedStatuses,
}; };
@injectIntl
export default class ColumnsArea extends ImmutablePureComponent { export default class ColumnsArea extends ImmutablePureComponent {
static contextTypes = { static contextTypes = {
@ -28,6 +30,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
}; };
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired,
columns: ImmutablePropTypes.list.isRequired, columns: ImmutablePropTypes.list.isRequired,
singleColumn: PropTypes.bool, singleColumn: PropTypes.bool,
children: PropTypes.node, children: PropTypes.node,
@ -64,8 +67,8 @@ export default class ColumnsArea extends ImmutablePureComponent {
renderView = (link, index) => { renderView = (link, index) => {
const columnIndex = getIndex(this.context.router.history.location.pathname); const columnIndex = getIndex(this.context.router.history.location.pathname);
const title = link.props.children[1] && React.cloneElement(link.props.children[1]); const title = this.props.intl.formatMessage({ id: link.props['data-preview-title-id'] });
const icon = (link.props.children[0] || link.props.children).props.className.split(' ')[2].split('-')[1]; const icon = link.props['data-preview-icon'];
const view = (index === columnIndex) ? const view = (index === columnIndex) ?
React.cloneElement(this.props.children) : React.cloneElement(this.props.children) :

View File

@ -3,14 +3,14 @@ import NavLink from 'react-router-dom/NavLink';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
export const links = [ export const links = [
<NavLink className='tabs-bar__link primary' activeClassName='active' to='/statuses/new'><i className='fa fa-fw fa-pencil' /><FormattedMessage id='tabs_bar.compose' defaultMessage='Compose' /></NavLink>, <NavLink className='tabs-bar__link primary' activeClassName='active' to='/statuses/new' data-preview-title-id='tabs_bar.compose' data-preview-icon='pencil' ><i className='fa fa-fw fa-pencil' /><FormattedMessage id='tabs_bar.compose' defaultMessage='Compose' /></NavLink>,
<NavLink className='tabs-bar__link primary' activeClassName='active' to='/timelines/home'><i className='fa fa-fw fa-home' /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink>, <NavLink className='tabs-bar__link primary' activeClassName='active' to='/timelines/home' data-preview-title-id='column.home' data-preview-icon='home' ><i className='fa fa-fw fa-home' /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink>,
<NavLink className='tabs-bar__link primary' activeClassName='active' to='/notifications'><i className='fa fa-fw fa-bell' /><FormattedMessage id='tabs_bar.notifications' defaultMessage='Notifications' /></NavLink>, <NavLink className='tabs-bar__link primary' activeClassName='active' to='/notifications' data-preview-title-id='column.notifications' data-preview-icon='bell' ><i className='fa fa-fw fa-bell' /><FormattedMessage id='tabs_bar.notifications' defaultMessage='Notifications' /></NavLink>,
<NavLink className='tabs-bar__link secondary' activeClassName='active' to='/timelines/public/local'><i className='fa fa-fw fa-users' /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink>, <NavLink className='tabs-bar__link secondary' activeClassName='active' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><i className='fa fa-fw fa-users' /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink>,
<NavLink className='tabs-bar__link secondary' activeClassName='active' exact to='/timelines/public'><i className='fa fa-fw fa-globe' /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink>, <NavLink className='tabs-bar__link secondary' activeClassName='active' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><i className='fa fa-fw fa-globe' /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink>,
<NavLink className='tabs-bar__link primary' activeClassName='active' style={{ flexGrow: '0', flexBasis: '30px' }} to='/getting-started'><i className='fa fa-fw fa-asterisk' /></NavLink>, <NavLink className='tabs-bar__link primary' activeClassName='active' style={{ flexGrow: '0', flexBasis: '30px' }} to='/getting-started' data-preview-title-id='tabs_bar.federated_timeline' data-preview-icon='asterisk' ><i className='fa fa-fw fa-asterisk' /></NavLink>,
]; ];
export function getIndex (path) { export function getIndex (path) {

View File

@ -1,7 +1,7 @@
{ {
"account.block": "حظر @{name}", "account.block": "حظر @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "هذا المستخدم من مثيل خادم آخر. قد يكون هذا الرقم أكبر.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "تعديل الملف الشخصي", "account.edit_profile": "تعديل الملف الشخصي",
"account.follow": "تابِع", "account.follow": "تابِع",
"account.followers": "المتابعون", "account.followers": "المتابعون",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "إلغاء المتابعة", "account.unfollow": "إلغاء المتابعة",
"account.unmute": "إلغاء الكتم عن @{name}", "account.unmute": "إلغاء الكتم عن @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة", "boost_modal.combo": "يمكنك ضغط {combo} لتخطّي هذه في المرّة القادمة",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Блокирай", "account.block": "Блокирай",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Редактирай профила си", "account.edit_profile": "Редактирай профила си",
"account.follow": "Последвай", "account.follow": "Последвай",
"account.followers": "Последователи", "account.followers": "Последователи",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Не следвай", "account.unfollow": "Не следвай",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloquejar @{name}", "account.block": "Bloquejar @{name}",
"account.block_domain": "Amagar tot de {domain}", "account.block_domain": "Amagar tot de {domain}",
"account.disclaimer": "Aquest usuari és d'un altra instància. Aquest número podria ser més gran.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidors", "account.followers": "Seguidors",
@ -17,6 +17,7 @@
"account.unblock_domain": "Mostra {domain}", "account.unblock_domain": "Mostra {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Treure silenci de @{name}", "account.unmute": "Treure silenci de @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop", "boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "@{name} blocken", "account.block": "@{name} blocken",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Dieser Benutzer ist von einer anderen Instanz. Diese Zahl könnte größer sein.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Profil bearbeiten", "account.edit_profile": "Profil bearbeiten",
"account.follow": "Folgen", "account.follow": "Folgen",
"account.followers": "Folgende", "account.followers": "Folgende",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Entfolgen", "account.unfollow": "Entfolgen",
"account.unmute": "@{name} nicht mehr stummschalten", "account.unmute": "@{name} nicht mehr stummschalten",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Du kannst {combo} drücken, um dies beim nächsten Mal zu überspringen", "boost_modal.combo": "Du kannst {combo} drücken, um dies beim nächsten Mal zu überspringen",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -358,10 +358,6 @@
"defaultMessage": "Media", "defaultMessage": "Media",
"id": "account.media" "id": "account.media"
}, },
{
"defaultMessage": "This user is from another instance. This number may be larger.",
"id": "account.disclaimer"
},
{ {
"defaultMessage": "Hide everything from {domain}", "defaultMessage": "Hide everything from {domain}",
"id": "account.block_domain" "id": "account.block_domain"
@ -370,6 +366,14 @@
"defaultMessage": "Unhide {domain}", "defaultMessage": "Unhide {domain}",
"id": "account.unblock_domain" "id": "account.unblock_domain"
}, },
{
"defaultMessage": "Information below may reflect the user's profile incompletely.",
"id": "account.disclaimer_full"
},
{
"defaultMessage": "View full profile",
"id": "account.view_full_profile"
},
{ {
"defaultMessage": "Posts", "defaultMessage": "Posts",
"id": "account.posts" "id": "account.posts"
@ -452,7 +456,7 @@
"id": "compose_form.placeholder" "id": "compose_form.placeholder"
}, },
{ {
"defaultMessage": "Content warning", "defaultMessage": "Write your warning here",
"id": "compose_form.spoiler_placeholder" "id": "compose_form.spoiler_placeholder"
}, },
{ {

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
"account.follow": "Follow", "account.follow": "Follow",
"account.followers": "Followers", "account.followers": "Followers",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Unfollow", "account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -45,7 +46,7 @@
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Mark media as sensitive", "compose_form.sensitive": "Mark media as sensitive",
"compose_form.spoiler": "Hide text behind warning", "compose_form.spoiler": "Hide text behind warning",
"compose_form.spoiler_placeholder": "Content warning", "compose_form.spoiler_placeholder": "Write your warning here",
"confirmation_modal.cancel": "Cancel", "confirmation_modal.cancel": "Cancel",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Block",
"confirmations.block.message": "Are you sure you want to block {name}?", "confirmations.block.message": "Are you sure you want to block {name}?",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloki @{name}", "account.block": "Bloki @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Redakti la profilon", "account.edit_profile": "Redakti la profilon",
"account.follow": "Sekvi", "account.follow": "Sekvi",
"account.followers": "Sekvantoj", "account.followers": "Sekvantoj",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Malsekvi", "account.unfollow": "Malsekvi",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloquear", "account.block": "Bloquear",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidores", "account.followers": "Seguidores",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Dejar de seguir", "account.unfollow": "Dejar de seguir",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "مسدودسازی @{name}", "account.block": "مسدودسازی @{name}",
"account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}", "account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}",
"account.disclaimer": "این کاربر عضو سرور متفاوتی است. شاید عدد واقعی بیشتر از این باشد.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "ویرایش نمایه", "account.edit_profile": "ویرایش نمایه",
"account.follow": "پی بگیرید", "account.follow": "پی بگیرید",
"account.followers": "پیگیران", "account.followers": "پیگیران",
@ -17,6 +17,7 @@
"account.unblock_domain": "رفع پنهان‌سازی از {domain}", "account.unblock_domain": "رفع پنهان‌سازی از {domain}",
"account.unfollow": "پایان پیگیری", "account.unfollow": "پایان پیگیری",
"account.unmute": "باصدا کردن @{name}", "account.unmute": "باصدا کردن @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Estä @{name}", "account.block": "Estä @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Muokkaa", "account.edit_profile": "Muokkaa",
"account.follow": "Seuraa", "account.follow": "Seuraa",
"account.followers": "Seuraajia", "account.followers": "Seuraajia",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Lopeta seuraaminen", "account.unfollow": "Lopeta seuraaminen",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloquer", "account.block": "Bloquer",
"account.block_domain": "Tout masquer de {domain}", "account.block_domain": "Tout masquer de {domain}",
"account.disclaimer": "Ce compte est situé sur une autre instance. Les nombres peuvent être plus grands.", "account.disclaimer_full": "Les données ci-dessous peuvent ne pas refléter ce profil dans sa totalité.",
"account.edit_profile": "Modifier le profil", "account.edit_profile": "Modifier le profil",
"account.follow": "Suivre", "account.follow": "Suivre",
"account.followers": "Abonné⋅e⋅s", "account.followers": "Abonné⋅e⋅s",
@ -17,6 +17,7 @@
"account.unblock_domain": "Ne plus masquer {domain}", "account.unblock_domain": "Ne plus masquer {domain}",
"account.unfollow": "Ne plus suivre", "account.unfollow": "Ne plus suivre",
"account.unmute": "Ne plus masquer", "account.unmute": "Ne plus masquer",
"account.view_full_profile": "Afficher le profil complet",
"boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois",
"bundle_column_error.body": "Une erreur s'est produite lors du chargement de ce composant.", "bundle_column_error.body": "Une erreur s'est produite lors du chargement de ce composant.",
"bundle_column_error.retry": "Réessayer", "bundle_column_error.retry": "Réessayer",
@ -41,11 +42,11 @@
"compose_form.lock_disclaimer.lock": "verrouillé", "compose_form.lock_disclaimer.lock": "verrouillé",
"compose_form.placeholder": "Quavez-vous en tête?", "compose_form.placeholder": "Quavez-vous en tête?",
"compose_form.privacy_disclaimer": "Votre statut privé va être transmis aux personnes mentionnées sur {domains}. Avez-vous confiance en {domainsCount, plural, one {ce serveur} other {ces serveurs}} pour ne pas divulguer votre statut? Les statuts privés ne fonctionnent que sur les instances de Mastodon. Si {domains} {domainsCount, plural, one {nest pas une instance de Mastodon} other {ne sont pas des instances de Mastodon}}, il ny aura aucune indication que votre statut est privé, et il pourrait être partagé ou rendu visible dune autre manière à dautres personnes imprévues.", "compose_form.privacy_disclaimer": "Votre statut privé va être transmis aux personnes mentionnées sur {domains}. Avez-vous confiance en {domainsCount, plural, one {ce serveur} other {ces serveurs}} pour ne pas divulguer votre statut? Les statuts privés ne fonctionnent que sur les instances de Mastodon. Si {domains} {domainsCount, plural, one {nest pas une instance de Mastodon} other {ne sont pas des instances de Mastodon}}, il ny aura aucune indication que votre statut est privé, et il pourrait être partagé ou rendu visible dune autre manière à dautres personnes imprévues.",
"compose_form.publish": "Pouet ", "compose_form.publish": "Pouet ",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Marquer le média comme délicat", "compose_form.sensitive": "Marquer le média comme sensible",
"compose_form.spoiler": "Masquer le texte derrière un avertissement", "compose_form.spoiler": "Masquer le texte derrière un avertissement",
"compose_form.spoiler_placeholder": "Avertissement", "compose_form.spoiler_placeholder": "Écrivez ici votre avertissement",
"confirmation_modal.cancel": "Annuler", "confirmation_modal.cancel": "Annuler",
"confirmations.block.confirm": "Bloquer", "confirmations.block.confirm": "Bloquer",
"confirmations.block.message": "Confirmez vous le blocage de {name}?", "confirmations.block.message": "Confirmez vous le blocage de {name}?",
@ -68,13 +69,13 @@
"emoji_button.symbols": "Symboles", "emoji_button.symbols": "Symboles",
"emoji_button.travel": "Lieux et voyages", "emoji_button.travel": "Lieux et voyages",
"empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir!", "empty_column.community": "Le fil public local est vide. Écrivez-donc quelque chose pour le remplir!",
"empty_column.hashtag": "Il ny a encore aucun contenu relatif à ce hashtag", "empty_column.hashtag": "Il ny a encore aucun contenu associé à ce hashtag",
"empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à dautres utilisateur⋅ice⋅s.", "empty_column.home": "Vous ne suivez encore personne. Visitez {public} ou bien utilisez la recherche pour vous connecter à dautres utilisateur⋅ice⋅s.",
"empty_column.home.inactivity": "Votre accueil est vide. Si vous ne vous êtes pas connecté⋅e depuis un moment, il se remplira automatiquement très bientôt.", "empty_column.home.inactivity": "Votre accueil est vide. Si vous ne vous êtes pas connecté⋅e depuis un moment, il se remplira automatiquement très bientôt.",
"empty_column.home.public_timeline": "le fil public", "empty_column.home.public_timeline": "le fil public",
"empty_column.notifications": "Vous navez pas encore de notification. Interagissez avec dautres utilisateur⋅ice⋅s pour débuter la conversation.", "empty_column.notifications": "Vous navez pas encore de notification. Interagissez avec dautres utilisateur⋅ice⋅s pour débuter la conversation.",
"empty_column.public": "Il ny a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s dautres instances pour remplir le fil public.", "empty_column.public": "Il ny a rien ici! Écrivez quelque chose publiquement, ou bien suivez manuellement des utilisateur⋅ice⋅s dautres instances pour remplir le fil public.",
"follow_request.authorize": "Autoriser", "follow_request.authorize": "Accepter",
"follow_request.reject": "Rejeter", "follow_request.reject": "Rejeter",
"getting_started.appsshort": "Applications", "getting_started.appsshort": "Applications",
"getting_started.faq": "FAQ", "getting_started.faq": "FAQ",
@ -126,8 +127,8 @@
"onboarding.page_one.welcome": "Bienvenue sur Mastodon!", "onboarding.page_one.welcome": "Bienvenue sur Mastodon!",
"onboarding.page_six.admin": "Ladministrateur⋅trice de votre instance est {admin}", "onboarding.page_six.admin": "Ladministrateur⋅trice de votre instance est {admin}",
"onboarding.page_six.almost_done": "Nous y sommes presque…", "onboarding.page_six.almost_done": "Nous y sommes presque…",
"onboarding.page_six.appetoot": "Bon Appetoot!", "onboarding.page_six.appetoot": "Bon Appétoot!",
"onboarding.page_six.apps_available": "De nombreuses {apps} sont disponibles pour iOS, Android et autres. Et maintenant… Bon Appetoot!", "onboarding.page_six.apps_available": "De nombreuses {apps} sont disponibles pour iOS, Android et autres. Et maintenant… Bon Appétoot!",
"onboarding.page_six.github": "Mastodon est un logiciel libre, gratuit et open-source. Vous pouvez rapporter des bogues, suggérer des fonctionnalités, ou contribuer à son développement sur {github}.", "onboarding.page_six.github": "Mastodon est un logiciel libre, gratuit et open-source. Vous pouvez rapporter des bogues, suggérer des fonctionnalités, ou contribuer à son développement sur {github}.",
"onboarding.page_six.guidelines": "règles de la communauté", "onboarding.page_six.guidelines": "règles de la communauté",
"onboarding.page_six.read_guidelines": "Sil vous plaît, noubliez pas de lire les {guidelines}!", "onboarding.page_six.read_guidelines": "Sil vous plaît, noubliez pas de lire les {guidelines}!",
@ -151,7 +152,7 @@
"report.target": "Signalement", "report.target": "Signalement",
"search.placeholder": "Rechercher", "search.placeholder": "Rechercher",
"search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}",
"standalone.public_title": "Coup d'oeil", "standalone.public_title": "Coup d'œil",
"status.cannot_reblog": "Cette publication ne peut être boostée", "status.cannot_reblog": "Cette publication ne peut être boostée",
"status.delete": "Effacer", "status.delete": "Effacer",
"status.favourite": "Ajouter aux favoris", "status.favourite": "Ajouter aux favoris",
@ -165,8 +166,8 @@
"status.reply": "Répondre", "status.reply": "Répondre",
"status.replyAll": "Répondre au fil", "status.replyAll": "Répondre au fil",
"status.report": "Signaler @{name}", "status.report": "Signaler @{name}",
"status.sensitive_toggle": "Cliquer pour dévoiler", "status.sensitive_toggle": "Cliquer pour afficher",
"status.sensitive_warning": "Contenu délicat", "status.sensitive_warning": "Contenu sensible",
"status.show_less": "Replier", "status.show_less": "Replier",
"status.show_more": "Déplier", "status.show_more": "Déplier",
"status.unmute_conversation": "Ne plus masquer la conversation", "status.unmute_conversation": "Ne plus masquer la conversation",
@ -180,7 +181,7 @@
"upload_form.undo": "Annuler", "upload_form.undo": "Annuler",
"upload_progress.label": "Envoi en cours…", "upload_progress.label": "Envoi en cours…",
"video_player.expand": "Agrandir la vidéo", "video_player.expand": "Agrandir la vidéo",
"video_player.toggle_sound": "Mettre/Couper le son", "video_player.toggle_sound": "Activer/Désactiver le son",
"video_player.toggle_visible": "Afficher/Cacher la vidéo", "video_player.toggle_visible": "Afficher/Cacher la vidéo",
"video_player.video_error": "Erreur lors de la lecture de la vidéo" "video_player.video_error": "Erreur lors de la lecture de la vidéo"
} }

View File

@ -1,7 +1,7 @@
{ {
"account.block": "חסימת @{name}", "account.block": "חסימת @{name}",
"account.block_domain": "להסתיר הכל מהקהילה {domain}", "account.block_domain": "להסתיר הכל מהקהילה {domain}",
"account.disclaimer": "משתמש זה מגיע מקהילה אחרת. המספר הזה עשוי להיות גדול יותר.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "עריכת פרופיל", "account.edit_profile": "עריכת פרופיל",
"account.follow": "מעקב", "account.follow": "מעקב",
"account.followers": "עוקבים", "account.followers": "עוקבים",
@ -17,6 +17,7 @@
"account.unblock_domain": "הסר חסימה מקהילת {domain}", "account.unblock_domain": "הסר חסימה מקהילת {domain}",
"account.unfollow": "הפסקת מעקב", "account.unfollow": "הפסקת מעקב",
"account.unmute": "הפסקת השתקת @{name}", "account.unmute": "הפסקת השתקת @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokiraj @{name}", "account.block": "Blokiraj @{name}",
"account.block_domain": "Sakrij sve sa {domain}", "account.block_domain": "Sakrij sve sa {domain}",
"account.disclaimer": "Ovaj korisnik je sa druge instance. Ovaj broj bi mogao biti veći.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Uredi profil", "account.edit_profile": "Uredi profil",
"account.follow": "Slijedi", "account.follow": "Slijedi",
"account.followers": "Sljedbenici", "account.followers": "Sljedbenici",
@ -17,6 +17,7 @@
"account.unblock_domain": "Otkrij {domain}", "account.unblock_domain": "Otkrij {domain}",
"account.unfollow": "Prestani slijediti", "account.unfollow": "Prestani slijediti",
"account.unmute": "Poništi utišavanje @{name}", "account.unmute": "Poništi utišavanje @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokkolás", "account.block": "Blokkolás",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Profil szerkesztése", "account.edit_profile": "Profil szerkesztése",
"account.follow": "Követés", "account.follow": "Követés",
"account.followers": "Követők", "account.followers": "Követők",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Követés abbahagyása", "account.unfollow": "Követés abbahagyása",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokir @{name}", "account.block": "Blokir @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Pengguna ini berasal dari server lain. Angka berikut mungkin lebih besar.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Ubah profil", "account.edit_profile": "Ubah profil",
"account.follow": "Ikuti", "account.follow": "Ikuti",
"account.followers": "Pengikut", "account.followers": "Pengikut",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Berhenti mengikuti", "account.unfollow": "Berhenti mengikuti",
"account.unmute": "Berhenti membisukan @{name}", "account.unmute": "Berhenti membisukan @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokusar @{name}", "account.block": "Blokusar @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Ca uzero esas de altra instaluro. Ca nombro forsan esas plu granda.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Modifikar profilo", "account.edit_profile": "Modifikar profilo",
"account.follow": "Sequar", "account.follow": "Sequar",
"account.followers": "Sequanti", "account.followers": "Sequanti",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Ne plus sequar", "account.unfollow": "Ne plus sequar",
"account.unmute": "Ne plus celar @{name}", "account.unmute": "Ne plus celar @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blocca @{name}", "account.block": "Blocca @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Questo utente si trova su un altro server. Questo numero potrebbe essere maggiore.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Modifica profilo", "account.edit_profile": "Modifica profilo",
"account.follow": "Segui", "account.follow": "Segui",
"account.followers": "Seguaci", "account.followers": "Seguaci",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Non seguire", "account.unfollow": "Non seguire",
"account.unmute": "Non silenziare @{name}", "account.unmute": "Non silenziare @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "ブロック", "account.block": "ブロック",
"account.block_domain": "{domain}全体を非表示", "account.block_domain": "{domain}全体を非表示",
"account.disclaimer": "このユーザーは他のインスタンスに所属しているため、数字が正確で無い場合があります。", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "プロフィールを編集", "account.edit_profile": "プロフィールを編集",
"account.follow": "フォロー", "account.follow": "フォロー",
"account.followers": "フォロワー", "account.followers": "フォロワー",
@ -17,6 +17,7 @@
"account.unblock_domain": "{domain}を表示", "account.unblock_domain": "{domain}を表示",
"account.unfollow": "フォロー解除", "account.unfollow": "フォロー解除",
"account.unmute": "ミュート解除", "account.unmute": "ミュート解除",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "次からは{combo}を押せば、これをスキップできます。", "boost_modal.combo": "次からは{combo}を押せば、これをスキップできます。",
"bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。",
"bundle_column_error.retry": "再試行", "bundle_column_error.retry": "再試行",
@ -45,7 +46,7 @@
"compose_form.publish_loud": "{publish}", "compose_form.publish_loud": "{publish}",
"compose_form.sensitive": "メディアを閲覧注意としてマークする", "compose_form.sensitive": "メディアを閲覧注意としてマークする",
"compose_form.spoiler": "テキストを隠す", "compose_form.spoiler": "テキストを隠す",
"compose_form.spoiler_placeholder": "警告", "compose_form.spoiler_placeholder": "ここに警告を書いてください",
"confirmation_modal.cancel": "キャンセル", "confirmation_modal.cancel": "キャンセル",
"confirmations.block.confirm": "ブロック", "confirmations.block.confirm": "ブロック",
"confirmations.block.message": "本当に{name}をブロックしますか?", "confirmations.block.message": "本当に{name}をブロックしますか?",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "차단", "account.block": "차단",
"account.block_domain": "{domain} 전체를 숨김", "account.block_domain": "{domain} 전체를 숨김",
"account.disclaimer": "이 사용자는 다른 인스턴스에 소속되어 있으므로, 수치가 정확하지 않을 수도 있습니다.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "프로필 편집", "account.edit_profile": "프로필 편집",
"account.follow": "팔로우", "account.follow": "팔로우",
"account.followers": "팔로워", "account.followers": "팔로워",
@ -17,6 +17,7 @@
"account.unblock_domain": "{domain} 숨김 해제", "account.unblock_domain": "{domain} 숨김 해제",
"account.unfollow": "팔로우 해제", "account.unfollow": "팔로우 해제",
"account.unmute": "뮤트 해제", "account.unmute": "뮤트 해제",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "다음부터 {combo}를 누르면 이 과정을 건너뛸 수 있습니다.", "boost_modal.combo": "다음부터 {combo}를 누르면 이 과정을 건너뛸 수 있습니다.",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokkeer @{name}", "account.block": "Blokkeer @{name}",
"account.block_domain": "Negeer alles van {domain}", "account.block_domain": "Negeer alles van {domain}",
"account.disclaimer": "Deze gebruiker zit op een andere server. Dit getal kan hoger zijn.", "account.disclaimer_full": "De informatie hieronder kan mogelijk een incompleet beeld geven van dit gebruikersprofiel.",
"account.edit_profile": "Profiel bewerken", "account.edit_profile": "Profiel bewerken",
"account.follow": "Volgen", "account.follow": "Volgen",
"account.followers": "Volgers", "account.followers": "Volgers",
@ -17,13 +17,14 @@
"account.unblock_domain": "{domain} niet meer negeren", "account.unblock_domain": "{domain} niet meer negeren",
"account.unfollow": "Ontvolgen", "account.unfollow": "Ontvolgen",
"account.unmute": "@{name} niet meer negeren", "account.unmute": "@{name} niet meer negeren",
"account.view_full_profile": "Volledig profiel tonen",
"boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Opnieuw proberen",
"bundle_column_error.title": "Network error", "bundle_column_error.title": "Netwerkfout",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Sluiten",
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Tijdens het laden van dit onderdeel is er iets fout gegaan.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Opnieuw proberen",
"column.blocks": "Geblokkeerde gebruikers", "column.blocks": "Geblokkeerde gebruikers",
"column.community": "Lokale tijdlijn", "column.community": "Lokale tijdlijn",
"column.favourites": "Favorieten", "column.favourites": "Favorieten",
@ -43,20 +44,20 @@
"compose_form.privacy_disclaimer": "Jouw privétoot wordt afgeleverd aan de vermelde gebruikers op {domains}. Vertrouw jij {domainsCount, plural, one {die server} other {die servers}}? Het privé plaatsen van toots werkt alleen op Mastodon-servers. Wanneer {domains} {domainsCount, plural, one {geen Mastodon-server is} other {geen Mastodon-servers zijn}}, dan wordt er niet aangegeven dat de toot privé is, waardoor het kan worden geboost of op een andere manier zichtbaar wordt gemaakt voor mensen waarvoor het niet was bedoeld.", "compose_form.privacy_disclaimer": "Jouw privétoot wordt afgeleverd aan de vermelde gebruikers op {domains}. Vertrouw jij {domainsCount, plural, one {die server} other {die servers}}? Het privé plaatsen van toots werkt alleen op Mastodon-servers. Wanneer {domains} {domainsCount, plural, one {geen Mastodon-server is} other {geen Mastodon-servers zijn}}, dan wordt er niet aangegeven dat de toot privé is, waardoor het kan worden geboost of op een andere manier zichtbaar wordt gemaakt voor mensen waarvoor het niet was bedoeld.",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Media als gevoelig markeren", "compose_form.sensitive": "Media als gevoelig markeren (nsfw)",
"compose_form.spoiler": "Tekst achter waarschuwing verbergen", "compose_form.spoiler": "Tekst achter waarschuwing verbergen",
"compose_form.spoiler_placeholder": "Waarschuwingstekst", "compose_form.spoiler_placeholder": "Waarschuwingstekst",
"confirmation_modal.cancel": "Annuleren", "confirmation_modal.cancel": "Annuleren",
"confirmations.block.confirm": "Blokkeren", "confirmations.block.confirm": "Blokkeren",
"confirmations.block.message": "Weet je zeker dat je {name} wilt blokkeren?", "confirmations.block.message": "Weet je het zeker dat je {name} wilt blokkeren?",
"confirmations.delete.confirm": "Verwijderen", "confirmations.delete.confirm": "Verwijderen",
"confirmations.delete.message": "Weet je zeker dat je deze toot wilt verwijderen?", "confirmations.delete.message": "Weet je het zeker dat je deze toot wilt verwijderen?",
"confirmations.domain_block.confirm": "Negeer alles van deze server", "confirmations.domain_block.confirm": "Negeer alles van deze server",
"confirmations.domain_block.message": "Weet je het echt, echt zeker dat je alles van {domain} wil negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en gewenst.", "confirmations.domain_block.message": "Weet je het echt, echt zeker dat je alles van {domain} wil negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en gewenst.",
"confirmations.mute.confirm": "Negeren", "confirmations.mute.confirm": "Negeren",
"confirmations.mute.message": "Weet je zeker dat je {name} wilt negeren?", "confirmations.mute.message": "Weet je het zeker dat je {name} wilt negeren?",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Ontvolgen",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.message": "Weet je het zeker dat je {name} wilt ontvolgen?",
"emoji_button.activity": "Activiteiten", "emoji_button.activity": "Activiteiten",
"emoji_button.flags": "Vlaggen", "emoji_button.flags": "Vlaggen",
"emoji_button.food": "Eten en drinken", "emoji_button.food": "Eten en drinken",
@ -67,7 +68,7 @@
"emoji_button.search": "Zoeken...", "emoji_button.search": "Zoeken...",
"emoji_button.symbols": "Symbolen", "emoji_button.symbols": "Symbolen",
"emoji_button.travel": "Reizen en plekken", "emoji_button.travel": "Reizen en plekken",
"empty_column.community": "De lokale tijdlijn is leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!",
"empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.",
"empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.", "empty_column.home": "Jij volgt nog niemand. Bezoek {public} of gebruik het zoekvenster om andere mensen te ontmoeten.",
"empty_column.home.inactivity": "Deze tijdlijn is leeg. Wanneer je een tijdje inactief bent geweest wordt deze snel opnieuw aangemaakt.", "empty_column.home.inactivity": "Deze tijdlijn is leeg. Wanneer je een tijdje inactief bent geweest wordt deze snel opnieuw aangemaakt.",
@ -106,13 +107,13 @@
"notification.mention": "{name} vermeldde jou", "notification.mention": "{name} vermeldde jou",
"notification.reblog": "{name} boostte jouw toot", "notification.reblog": "{name} boostte jouw toot",
"notifications.clear": "Meldingen verwijderen", "notifications.clear": "Meldingen verwijderen",
"notifications.clear_confirmation": "Weet je zeker dat je al jouw meldingen wilt verwijderen?", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?",
"notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.alert": "Desktopmeldingen",
"notifications.column_settings.favourite": "Favorieten:", "notifications.column_settings.favourite": "Favorieten:",
"notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.follow": "Nieuwe volgers:",
"notifications.column_settings.mention": "Vermeldingen:", "notifications.column_settings.mention": "Vermeldingen:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Pushmeldingen",
"notifications.column_settings.push_meta": "This device", "notifications.column_settings.push_meta": "Dit apparaat",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.show": "In kolom tonen",
"notifications.column_settings.sound": "Geluid afspelen", "notifications.column_settings.sound": "Geluid afspelen",
@ -146,12 +147,12 @@
"privacy.unlisted.long": "Niet op openbare tijdlijnen tonen", "privacy.unlisted.long": "Niet op openbare tijdlijnen tonen",
"privacy.unlisted.short": "Minder openbaar", "privacy.unlisted.short": "Minder openbaar",
"reply_indicator.cancel": "Annuleren", "reply_indicator.cancel": "Annuleren",
"report.heading": "Rapporteren",
"report.placeholder": "Extra opmerkingen", "report.placeholder": "Extra opmerkingen",
"report.submit": "Verzenden", "report.submit": "Verzenden",
"report.target": "Rapporteren van", "report.target": "Rapporteren van",
"search.placeholder": "Zoeken", "search.placeholder": "Zoeken",
"search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}",
"standalone.public_title": "A look inside...",
"status.cannot_reblog": "Deze toot kan niet geboost worden", "status.cannot_reblog": "Deze toot kan niet geboost worden",
"status.delete": "Verwijderen", "status.delete": "Verwijderen",
"status.favourite": "Favoriet", "status.favourite": "Favoriet",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokkér @{name}", "account.block": "Blokkér @{name}",
"account.block_domain": "Skjul alt fra {domain}", "account.block_domain": "Skjul alt fra {domain}",
"account.disclaimer": "Denne brukeren er fra en annen instans. Dette tallet kan være høyere.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Rediger profil", "account.edit_profile": "Rediger profil",
"account.follow": "Følg", "account.follow": "Følg",
"account.followers": "Følgere", "account.followers": "Følgere",
@ -17,6 +17,7 @@
"account.unblock_domain": "Vis {domain}", "account.unblock_domain": "Vis {domain}",
"account.unfollow": "Avfølg", "account.unfollow": "Avfølg",
"account.unmute": "Avdemp @{name}", "account.unmute": "Avdemp @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blocar @{name}", "account.block": "Blocar @{name}",
"account.block_domain": "Tot amagar del domeni {domain}", "account.block_domain": "Tot amagar del domeni {domain}",
"account.disclaimer": "Aqueste compte es sus una autra instància. Los nombres pòdon èsser mai grandes.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Modificar lo perfil", "account.edit_profile": "Modificar lo perfil",
"account.follow": "Sègre", "account.follow": "Sègre",
"account.followers": "Seguidors", "account.followers": "Seguidors",
@ -17,19 +17,20 @@
"account.unblock_domain": "Desblocar {domain}", "account.unblock_domain": "Desblocar {domain}",
"account.unfollow": "Quitar de sègre", "account.unfollow": "Quitar de sègre",
"account.unmute": "Quitar de rescondre @{name}", "account.unmute": "Quitar de rescondre @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Quicòm a fach meuca pendent lo cargament daqueste compausant.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Tornar ensejar",
"bundle_column_error.title": "Network error", "bundle_column_error.title": "Error de ret",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Tampar",
"bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.message": "Quicòm a fach meuca pendent lo cargament daqueste compausant.",
"bundle_modal_error.retry": "Try again", "bundle_modal_error.retry": "Tornar ensejar",
"column.blocks": "Personas blocadas", "column.blocks": "Personas blocadas",
"column.community": "Flux dactualitat public local", "column.community": "Flux public local",
"column.favourites": "Favorits", "column.favourites": "Favorits",
"column.follow_requests": "Demandas dabonament", "column.follow_requests": "Demandas dabonament",
"column.home": "Acuèlh", "column.home": "Acuèlh",
"column.mutes": "Personas mesas en silenci", "column.mutes": "Personas en silenci",
"column.notifications": "Notificacions", "column.notifications": "Notificacions",
"column.public": "Flux public global", "column.public": "Flux public global",
"column_back_button.label": "Tornar", "column_back_button.label": "Tornar",
@ -55,8 +56,8 @@
"confirmations.domain_block.message": "Sètz segur segur de voler blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.", "confirmations.domain_block.message": "Sètz segur segur de voler blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.",
"confirmations.mute.confirm": "Metre en silenci", "confirmations.mute.confirm": "Metre en silenci",
"confirmations.mute.message": "Sètz segur de voler metre en silenci {name} ?", "confirmations.mute.message": "Sètz segur de voler metre en silenci {name} ?",
"confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.confirm": "Quitar de sègre",
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.message": "Volètz vertadièrament quitar de sègre {name} ?",
"emoji_button.activity": "Activitat", "emoji_button.activity": "Activitat",
"emoji_button.flags": "Drapèus", "emoji_button.flags": "Drapèus",
"emoji_button.food": "Beure e manjar", "emoji_button.food": "Beure e manjar",
@ -69,7 +70,7 @@
"emoji_button.travel": "Viatges & lòcs", "emoji_button.travel": "Viatges & lòcs",
"empty_column.community": "Lo flux public local es void. Escribètz quicòm per lo garnir !", "empty_column.community": "Lo flux public local es void. Escribètz quicòm per lo garnir !",
"empty_column.hashtag": "I a pas encara de contengut ligat a aqueste hashtag", "empty_column.hashtag": "I a pas encara de contengut ligat a aqueste hashtag",
"empty_column.home": "Pel moment segètz pas segun. Visitatz {public} o utilizatz la recèrca per vos connectar a dautras personas.", "empty_column.home": "Pel moment segètz pas degun. Visitatz {public} o utilizatz la recèrca per vos connectar a dautras personas.",
"empty_column.home.inactivity": "Vòstra pagina dacuèlh es voida. Se sètz estat inactiu per un moment, serà tornada generar per vos dins una estona.", "empty_column.home.inactivity": "Vòstra pagina dacuèlh es voida. Se sètz estat inactiu per un moment, serà tornada generar per vos dins una estona.",
"empty_column.home.public_timeline": "lo flux public", "empty_column.home.public_timeline": "lo flux public",
"empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualquun per començar una conversacion.", "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualquun per començar una conversacion.",
@ -111,8 +112,8 @@
"notifications.column_settings.favourite": "Favorits :", "notifications.column_settings.favourite": "Favorits :",
"notifications.column_settings.follow": "Nòus seguidors :", "notifications.column_settings.follow": "Nòus seguidors :",
"notifications.column_settings.mention": "Mencions :", "notifications.column_settings.mention": "Mencions :",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Notificacions",
"notifications.column_settings.push_meta": "This device", "notifications.column_settings.push_meta": "Aqueste periferic",
"notifications.column_settings.reblog": "Partatges :", "notifications.column_settings.reblog": "Partatges :",
"notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.show": "Mostrar dins la colomna",
"notifications.column_settings.sound": "Emetre un son", "notifications.column_settings.sound": "Emetre un son",
@ -125,7 +126,7 @@
"onboarding.page_one.handle": "Sètz sus {domain}, doncas vòstre identificant complet es {handle}", "onboarding.page_one.handle": "Sètz sus {domain}, doncas vòstre identificant complet es {handle}",
"onboarding.page_one.welcome": "Benvengut a Mastodon !", "onboarding.page_one.welcome": "Benvengut a Mastodon !",
"onboarding.page_six.admin": "Vòstre administrator dinstància es {admin}.", "onboarding.page_six.admin": "Vòstre administrator dinstància es {admin}.",
"onboarding.page_six.almost_done": "Gaireben acabat...", "onboarding.page_six.almost_done": "Gaireben acabat",
"onboarding.page_six.appetoot": "Bon Appetoot!", "onboarding.page_six.appetoot": "Bon Appetoot!",
"onboarding.page_six.apps_available": "I a daplicacions per mobil per iOS, Android e mai.", "onboarding.page_six.apps_available": "I a daplicacions per mobil per iOS, Android e mai.",
"onboarding.page_six.github": "Mastodon es un logicial liure e open-source. Podètz senhalar de bugs, demandar de foncionalitats e contribuir al còdi sus {github}.", "onboarding.page_six.github": "Mastodon es un logicial liure e open-source. Podètz senhalar de bugs, demandar de foncionalitats e contribuir al còdi sus {github}.",
@ -151,14 +152,14 @@
"report.target": "Senhalar {target}", "report.target": "Senhalar {target}",
"search.placeholder": "Recercar", "search.placeholder": "Recercar",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"standalone.public_title": "A look inside...", "standalone.public_title": "Una ulhada dedins…",
"status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat", "status.cannot_reblog": "Aqueste estatut pòt pas èsser partejat",
"status.delete": "Escafar", "status.delete": "Escafar",
"status.favourite": "Apondre als favorits", "status.favourite": "Apondre als favorits",
"status.load_more": "Cargar mai", "status.load_more": "Cargar mai",
"status.media_hidden": "Mèdia rescondut", "status.media_hidden": "Mèdia rescondut",
"status.mention": "Mencionar", "status.mention": "Mencionar",
"status.mute_conversation": "Mute conversation", "status.mute_conversation": "Rescondre la conversacion",
"status.open": "Desplegar aqueste estatut", "status.open": "Desplegar aqueste estatut",
"status.reblog": "Partejar", "status.reblog": "Partejar",
"status.reblogged_by": "{name} a partejat :", "status.reblogged_by": "{name} a partejat :",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Blokuj @{name}", "account.block": "Blokuj @{name}",
"account.block_domain": "Blokuj wszystko z {domain}", "account.block_domain": "Blokuj wszystko z {domain}",
"account.disclaimer": "Ten użytkownik pochodzi z innej instancji. Ta liczba może być większa.", "account.disclaimer_full": "Poniższe informacje mogą nie odwzorowywać bezbłędnie profilu użytkownika.",
"account.edit_profile": "Edytuj profil", "account.edit_profile": "Edytuj profil",
"account.follow": "Śledź", "account.follow": "Śledź",
"account.followers": "Śledzący", "account.followers": "Śledzący",
@ -17,6 +17,7 @@
"account.unblock_domain": "Odblokuj domenę {domain}", "account.unblock_domain": "Odblokuj domenę {domain}",
"account.unfollow": "Przestań śledzić", "account.unfollow": "Przestań śledzić",
"account.unmute": "Cofnij wyciszenie @{name}", "account.unmute": "Cofnij wyciszenie @{name}",
"account.view_full_profile": "Wyświetl pełny profil",
"boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem",
"bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.",
"bundle_column_error.retry": "Spróbuj ponownie", "bundle_column_error.retry": "Spróbuj ponownie",
@ -45,7 +46,7 @@
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Oznacz treści jako wrażliwe", "compose_form.sensitive": "Oznacz treści jako wrażliwe",
"compose_form.spoiler": "Ukryj tekst za ostrzeżeniem", "compose_form.spoiler": "Ukryj tekst za ostrzeżeniem",
"compose_form.spoiler_placeholder": "Ostrzeżenie o zawartości", "compose_form.spoiler_placeholder": "Wprowadź swoje ostrzeżenie o zawartości",
"confirmation_modal.cancel": "Anuluj", "confirmation_modal.cancel": "Anuluj",
"confirmations.block.confirm": "Zablokuj", "confirmations.block.confirm": "Zablokuj",
"confirmations.block.message": "Czy na pewno chcesz zablokować {name}?", "confirmations.block.message": "Czy na pewno chcesz zablokować {name}?",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloquear @{name}", "account.block": "Bloquear @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Essa conta está localizado em outra instância. Os nomes podem ser maiores.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidores", "account.followers": "Seguidores",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}", "account.unmute": "Não silenciar @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Bloquear @{name}", "account.block": "Bloquear @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Essa conta está localizado em outra instância. Os nomes podem ser maiores.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Editar perfil", "account.edit_profile": "Editar perfil",
"account.follow": "Seguir", "account.follow": "Seguir",
"account.followers": "Seguidores", "account.followers": "Seguidores",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Deixar de seguir", "account.unfollow": "Deixar de seguir",
"account.unmute": "Não silenciar @{name}", "account.unmute": "Não silenciar @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Блокировать", "account.block": "Блокировать",
"account.block_domain": "Блокировать все с {domain}", "account.block_domain": "Блокировать все с {domain}",
"account.disclaimer": "Это пользователь с другого узла. Число может быть больше.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Изменить профиль", "account.edit_profile": "Изменить профиль",
"account.follow": "Подписаться", "account.follow": "Подписаться",
"account.followers": "Подписаны", "account.followers": "Подписаны",
@ -17,6 +17,7 @@
"account.unblock_domain": "Разблокировать {domain}", "account.unblock_domain": "Разблокировать {domain}",
"account.unfollow": "Отписаться", "account.unfollow": "Отписаться",
"account.unmute": "Снять глушение", "account.unmute": "Снять глушение",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз", "boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",
@ -45,7 +46,7 @@
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive": "Отметить как чувствительный контент", "compose_form.sensitive": "Отметить как чувствительный контент",
"compose_form.spoiler": "Скрыть текст за предупреждением", "compose_form.spoiler": "Скрыть текст за предупреждением",
"compose_form.spoiler_placeholder": "Предупреждение о скрытом тексте", "compose_form.spoiler_placeholder": "Напишите свое предупреждение здесь",
"confirmation_modal.cancel": "Отмена", "confirmation_modal.cancel": "Отмена",
"confirmations.block.confirm": "Заблокировать", "confirmations.block.confirm": "Заблокировать",
"confirmations.block.message": "Вы уверены, что хотите заблокировать {name}?", "confirmations.block.message": "Вы уверены, что хотите заблокировать {name}?",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Block @{name}", "account.block": "Block @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "This user is from another instance. This number may be larger.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Edit profile", "account.edit_profile": "Edit profile",
"account.follow": "Follow", "account.follow": "Follow",
"account.followers": "Followers", "account.followers": "Followers",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Unfollow", "account.unfollow": "Unfollow",
"account.unmute": "Unmute @{name}", "account.unmute": "Unmute @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "You can press {combo} to skip this next time",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Engelle @{name}", "account.block": "Engelle @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "Bu kullanıcının hesabı farklı sunucuda bulunduğu için bu sayı daha fazla olabilir.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Profili düzenle", "account.edit_profile": "Profili düzenle",
"account.follow": "Takip et", "account.follow": "Takip et",
"account.followers": "Takipçiler", "account.followers": "Takipçiler",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "Takipten vazgeç", "account.unfollow": "Takipten vazgeç",
"account.unmute": "Sesi aç @{name}", "account.unmute": "Sesi aç @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz", "boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "Заблокувати", "account.block": "Заблокувати",
"account.block_domain": "Заглушити {domain}", "account.block_domain": "Заглушити {domain}",
"account.disclaimer": "Це користувач з іншої інстанції. Число може бути більше.", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "Налаштування профілю", "account.edit_profile": "Налаштування профілю",
"account.follow": "Підписатися", "account.follow": "Підписатися",
"account.followers": "Підписники", "account.followers": "Підписники",
@ -17,6 +17,7 @@
"account.unblock_domain": "Розблокувати {domain}", "account.unblock_domain": "Розблокувати {domain}",
"account.unfollow": "Відписатися", "account.unfollow": "Відписатися",
"account.unmute": "Зняти глушення", "account.unmute": "Зняти глушення",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "屏蔽 @{name}", "account.block": "屏蔽 @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "由于这个账户处于另一个服务器实例上,实际数字会比这个更多。", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "修改个人资料", "account.edit_profile": "修改个人资料",
"account.follow": "关注", "account.follow": "关注",
"account.followers": "关注者", "account.followers": "关注者",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "取消关注", "account.unfollow": "取消关注",
"account.unmute": "取消 @{name} 的静音", "account.unmute": "取消 @{name} 的静音",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "如你想在下次路过时显示,请按{combo}", "boost_modal.combo": "如你想在下次路过时显示,请按{combo}",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "封鎖 @{name}", "account.block": "封鎖 @{name}",
"account.block_domain": "Hide everything from {domain}", "account.block_domain": "Hide everything from {domain}",
"account.disclaimer": "由於這個用戶在另一個服務站,實際數字會比這個更多。", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "修改個人資料", "account.edit_profile": "修改個人資料",
"account.follow": "關注", "account.follow": "關注",
"account.followers": "關注的人", "account.followers": "關注的人",
@ -17,6 +17,7 @@
"account.unblock_domain": "Unhide {domain}", "account.unblock_domain": "Unhide {domain}",
"account.unfollow": "取消關注", "account.unfollow": "取消關注",
"account.unmute": "取消 @{name} 的靜音", "account.unmute": "取消 @{name} 的靜音",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "如你想在下次路過這顯示,請按{combo}", "boost_modal.combo": "如你想在下次路過這顯示,請按{combo}",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -1,7 +1,7 @@
{ {
"account.block": "封鎖 @{name}", "account.block": "封鎖 @{name}",
"account.block_domain": "隱藏來自 {domain} 的一切", "account.block_domain": "隱藏來自 {domain} 的一切",
"account.disclaimer": "這使用者來自其他副本,實際數字可能更大。", "account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
"account.edit_profile": "編輯用戶資訊", "account.edit_profile": "編輯用戶資訊",
"account.follow": "關注", "account.follow": "關注",
"account.followers": "專注者", "account.followers": "專注者",
@ -17,6 +17,7 @@
"account.unblock_domain": "不再隱藏 {domain}", "account.unblock_domain": "不再隱藏 {domain}",
"account.unfollow": "取消關注", "account.unfollow": "取消關注",
"account.unmute": "不再消音 @{name}", "account.unmute": "不再消音 @{name}",
"account.view_full_profile": "View full profile",
"boost_modal.combo": "下次你可以按 {combo} 來跳過", "boost_modal.combo": "下次你可以按 {combo} 來跳過",
"bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.body": "Something went wrong while loading this component.",
"bundle_column_error.retry": "Try again", "bundle_column_error.retry": "Try again",

View File

@ -37,7 +37,7 @@ const unsubscribe = ({ registration, subscription }) =>
const sendSubscriptionToBackend = (subscription) => const sendSubscriptionToBackend = (subscription) =>
axios.post('/api/web/push_subscriptions', { axios.post('/api/web/push_subscriptions', {
data: subscription, subscription,
}).then(response => response.data); }).then(response => response.data);
// Last one checks for payload support: https://web-push-book.gauntface.com/chapter-06/01-non-standards-browsers/#no-payload // Last one checks for payload support: https://web-push-book.gauntface.com/chapter-06/01-non-standards-browsers/#no-payload

View File

@ -120,18 +120,55 @@
} }
.information-board { .information-board {
margin: 20px 0; background: darken($ui-base-color, 4%);
display: flex; padding: 40px 0;
justify-content: space-between;
border-top: 1px solid lighten($ui-base-color, 10%); .panel {
border-bottom: 1px solid lighten($ui-base-color, 10%); position: absolute;
padding-right: 14px; width: 280px;
box-sizing: border-box;
background: darken($ui-base-color, 8%);
padding: 20px;
padding-top: 10px;
border-radius: 4px 4px 0 0;
right: 0;
bottom: -40px;
.panel-header {
font-family: 'mastodon-font-display', sans-serif;
font-size: 14px;
line-height: 24px;
font-weight: 500;
color: $ui-base-lighter-color;
padding-bottom: 5px;
margin-bottom: 15px;
border-bottom: 1px solid lighten($ui-base-color, 4%);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
span {
font-weight: 400;
color: lighten($ui-base-color, 34%);
}
}
}
.container {
position: relative;
padding-right: 280px + 15px;
}
.information-board-sections {
display: flex;
justify-content: space-between;
}
.section { .section {
flex: 1 0 0; flex: 1 0 0;
padding: 14px;
text-align: right;
font: 16px/28px 'mastodon-font-sans-serif', sans-serif; font: 16px/28px 'mastodon-font-sans-serif', sans-serif;
text-align: right;
padding: 0 15px;
span, span,
strong { strong {
@ -143,7 +180,6 @@
&:last-child { &:last-child {
color: $ui-secondary-color; color: $ui-secondary-color;
font-size: 14px;
} }
} }
@ -201,100 +237,6 @@
} }
} }
.contact-email {
text-align: center;
margin: 40px 0;
strong {
display: block;
color: $primary-text-color;
word-break: break-word;
}
}
.sidebar-layout {
display: flex;
.main {
flex: 1 1 auto;
padding: 14px 0;
.panel {
padding-right: 14px;
}
}
.sidebar {
border-left: 1px solid lighten($ui-base-color, 10%);
width: 200px;
flex: 0 0 auto;
}
.panel {
.panel-header {
background: lighten($ui-base-color, 10%);
padding: 7px 14px;
text-transform: uppercase;
font-size: 12px;
font-weight: 500;
}
.panel-body {
padding: 14px;
}
.panel-list {
ul {
list-style: none;
margin: 0;
li {
margin: 0;
font-family: inherit;
font-size: 13px;
line-height: 18px;
a {
display: block;
padding: 7px 14px;
color: rgba($primary-text-color, 0.7);
text-decoration: none;
transition: all 200ms linear;
i.fa {
margin-right: 5px;
}
&:hover {
color: $primary-text-color;
background-color: darken($ui-base-color, 5%);
transition: all 100ms linear;
}
&.selected {
color: $primary-text-color;
background-color: $ui-highlight-color;
&:hover {
background-color: lighten($ui-highlight-color, 5%);
}
}
}
}
}
}
}
@media screen and (max-width: 625px) {
flex-direction: column;
.sidebar {
border: 1px solid lighten($ui-base-color, 10%);
width: auto;
}
}
}
.features-list__row { .features-list__row {
display: flex; display: flex;
padding: 10px 0; padding: 10px 0;
@ -320,7 +262,7 @@
.text { .text {
font-size: 16px; font-size: 16px;
line-height: 30px; line-height: 30px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
h6 { h6 {
font-weight: 500; font-weight: 500;
@ -336,6 +278,15 @@
background: linear-gradient(150deg, lighten($ui-base-color, 8%), $ui-base-color); background: linear-gradient(150deg, lighten($ui-base-color, 8%), $ui-base-color);
position: relative; position: relative;
&.compact {
background: $ui-base-color;
padding-bottom: 15px;
.hero .heading {
padding-bottom: 30px;
}
}
.mascot-container { .mascot-container {
max-width: 800px; max-width: 800px;
margin: 0 auto; margin: 0 auto;
@ -388,10 +339,9 @@
position: absolute; position: absolute;
transition: all 0.1s linear; transition: all 0.1s linear;
animation-name: floating; animation-name: floating;
animation-duration: 1.7s;
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-direction: alternate; animation-direction: alternate;
animation-timing-function: linear; animation-timing-function: ease-in-out;
z-index: 2; z-index: 2;
} }
@ -400,7 +350,8 @@
height: 170px; height: 170px;
right: -120px; right: -120px;
bottom: 0; bottom: 0;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447.1875 234.375" height="170" width="324"><path fill="#{hex-color(lighten($ui-base-color, 26%))}" d="M21.69 233.366c-6.45-1.268-13.347-5.63-16.704-10.564-10.705-15.734-1.513-37.724 18.632-44.57l4.8-1.632.173-17.753c.146-14.77.515-19.063 2.2-25.55 6.736-25.944 24.46-46.032 47.766-54.137 11.913-4.143 19.558-5.366 34.178-5.47l13.828-.096V71.12c0-4.755 2.853-17.457 5.238-23.327 8.588-21.137 26.735-35.957 52.153-42.593 23.248-6.07 50.153-6.415 71.863-.923 11.14 2.82 25.686 9.957 33.857 16.615 19.335 15.756 31.82 41.05 35.183 71.275.59 5.305.672 5.435 3.11 4.926 11.833-2.474 30.4-3.132 40.065-1.42 24.388 4.32 40.568 19.076 47.214 43.058 2.16 7.8 3.953 23.894 3.59 32.237l-.24 5.498 5.156 1.317c6.392 1.633 14.55 7.098 18.003 12.062 1.435 2.062 3.305 6.597 4.156 10.078 1.428 5.84 1.43 6.8.04 12.44-1.807 7.318-5.672 13.252-10.872 16.694-8.508 5.63 3.756 5.33-211.916 5.216-108.56-.056-199.22-.464-201.47-.906z"/></svg>'); animation-duration: 3s;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 447.1875 234.375" height="170" width="324"><path fill="#{hex-color($ui-base-lighter-color)}" d="M21.69 233.366c-6.45-1.268-13.347-5.63-16.704-10.564-10.705-15.734-1.513-37.724 18.632-44.57l4.8-1.632.173-17.753c.146-14.77.515-19.063 2.2-25.55 6.736-25.944 24.46-46.032 47.766-54.137 11.913-4.143 19.558-5.366 34.178-5.47l13.828-.096V71.12c0-4.755 2.853-17.457 5.238-23.327 8.588-21.137 26.735-35.957 52.153-42.593 23.248-6.07 50.153-6.415 71.863-.923 11.14 2.82 25.686 9.957 33.857 16.615 19.335 15.756 31.82 41.05 35.183 71.275.59 5.305.672 5.435 3.11 4.926 11.833-2.474 30.4-3.132 40.065-1.42 24.388 4.32 40.568 19.076 47.214 43.058 2.16 7.8 3.953 23.894 3.59 32.237l-.24 5.498 5.156 1.317c6.392 1.633 14.55 7.098 18.003 12.062 1.435 2.062 3.305 6.597 4.156 10.078 1.428 5.84 1.43 6.8.04 12.44-1.807 7.318-5.672 13.252-10.872 16.694-8.508 5.63 3.756 5.33-211.916 5.216-108.56-.056-199.22-.464-201.47-.906z"/></svg>');
} }
.float-2 { .float-2 {
@ -408,8 +359,9 @@
height: 100px; height: 100px;
right: 210px; right: 210px;
bottom: 0; bottom: 0;
animation-duration: 3.5s;
animation-delay: 0.2s; animation-delay: 0.2s;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 536.25 222.1875" height="100" width="241"><path fill="#{hex-color(lighten($ui-base-color, 26%))}" d="M42.626 221.23c-14.104-1.174-26.442-5.133-32.825-10.534-4.194-3.548-7.684-10.66-8.868-18.075-1.934-12.102.633-22.265 7.528-29.81 7.61-8.328 19.998-12.76 39.855-14.257l8.47-.638-2.08-6.223c-4.826-14.422-6.357-24.813-6.37-43.255-.012-14.923.28-18.513 2.1-25.724 2.283-9.048 8.483-23.034 13.345-30.1 14.76-21.45 43.505-38.425 70.535-41.65 30.628-3.655 64.47 12.073 89.668 41.673l5.955 6.995 2.765-4.174c1.52-2.296 5.74-6.93 9.376-10.295 18.382-17.02 43.436-20.676 73.352-10.705 12.158 4.052 21.315 9.53 29.64 17.733 12.752 12.562 18.16 25.718 18.19 44.26l.02 10.98 2.312-3.01c15.64-20.365 42.29-20.485 62.438-.28 3.644 3.653 7.558 8.593 8.697 10.976 4.895 10.24 5.932 25.688 2.486 37.046-.76 2.507-1.388 4.816-1.393 5.13-.006.316 6.845.87 15.224 1.234 53.06 2.297 76.356 12.98 81.817 37.526 3.554 15.973-3.71 28.604-19.566 34.02-4.554 1.555-17.922 1.655-234.517 1.757-126.327.06-233.497-.21-238.154-.597z"/></svg>'); background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 536.25 222.1875" height="100" width="241"><path fill="#{hex-color($ui-base-lighter-color)}" d="M42.626 221.23c-14.104-1.174-26.442-5.133-32.825-10.534-4.194-3.548-7.684-10.66-8.868-18.075-1.934-12.102.633-22.265 7.528-29.81 7.61-8.328 19.998-12.76 39.855-14.257l8.47-.638-2.08-6.223c-4.826-14.422-6.357-24.813-6.37-43.255-.012-14.923.28-18.513 2.1-25.724 2.283-9.048 8.483-23.034 13.345-30.1 14.76-21.45 43.505-38.425 70.535-41.65 30.628-3.655 64.47 12.073 89.668 41.673l5.955 6.995 2.765-4.174c1.52-2.296 5.74-6.93 9.376-10.295 18.382-17.02 43.436-20.676 73.352-10.705 12.158 4.052 21.315 9.53 29.64 17.733 12.752 12.562 18.16 25.718 18.19 44.26l.02 10.98 2.312-3.01c15.64-20.365 42.29-20.485 62.438-.28 3.644 3.653 7.558 8.593 8.697 10.976 4.895 10.24 5.932 25.688 2.486 37.046-.76 2.507-1.388 4.816-1.393 5.13-.006.316 6.845.87 15.224 1.234 53.06 2.297 76.356 12.98 81.817 37.526 3.554 15.973-3.71 28.604-19.566 34.02-4.554 1.555-17.922 1.655-234.517 1.757-126.327.06-233.497-.21-238.154-.597z"/></svg>');
} }
.float-3 { .float-3 {
@ -417,8 +369,9 @@
height: 140px; height: 140px;
right: 110px; right: 110px;
top: -30px; top: -30px;
animation-delay: 0.1s; animation-duration: 4s;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 388.125 202.5" height="140" width="267"><path fill="#{hex-color(lighten($ui-base-color, 26%))}" d="M181.37 201.458c-17.184-1.81-36.762-8.944-49.523-18.05l-5.774-4.12-8.074 2.63c-11.468 3.738-21.382 4.962-35.815 4.422-14.79-.554-24.577-2.845-36.716-8.594-15.483-7.332-28.498-19.98-35.985-34.968C2.44 128.675-.94 108.435.9 91.356c3.362-31.234 18.197-53.698 43.63-66.074 12.803-6.23 22.384-8.55 37.655-9.122 14.433-.54 24.347.684 35.814 4.42l8.073 2.633 5.635-4.01c24.81-17.656 60.007-23.332 92.914-14.985 10.11 2.565 25.498 9.62 33.102 15.178l5.068 3.704 7.632-2.564c10.89-3.66 21.086-4.916 35.516-4.376 45.816 1.716 76.422 30.03 81.285 75.196 1.84 17.08-1.54 37.32-8.585 51.422-7.487 14.99-20.502 27.636-35.984 34.968-12.14 5.75-21.926 8.04-36.716 8.593-14.43.54-24.626-.716-35.516-4.376l-7.632-2.564-5.068 3.704c-12.844 9.387-32.714 16.488-51.545 18.42-10.607 1.09-13.916 1.08-24.81-.066z"/></svg>'); animation-delay: 0.5s;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 388.125 202.5" height="140" width="267"><path fill="#{hex-color($ui-base-lighter-color)}" d="M181.37 201.458c-17.184-1.81-36.762-8.944-49.523-18.05l-5.774-4.12-8.074 2.63c-11.468 3.738-21.382 4.962-35.815 4.422-14.79-.554-24.577-2.845-36.716-8.594-15.483-7.332-28.498-19.98-35.985-34.968C2.44 128.675-.94 108.435.9 91.356c3.362-31.234 18.197-53.698 43.63-66.074 12.803-6.23 22.384-8.55 37.655-9.122 14.433-.54 24.347.684 35.814 4.42l8.073 2.633 5.635-4.01c24.81-17.656 60.007-23.332 92.914-14.985 10.11 2.565 25.498 9.62 33.102 15.178l5.068 3.704 7.632-2.564c10.89-3.66 21.086-4.916 35.516-4.376 45.816 1.716 76.422 30.03 81.285 75.196 1.84 17.08-1.54 37.32-8.585 51.422-7.487 14.99-20.502 27.636-35.984 34.968-12.14 5.75-21.926 8.04-36.716 8.593-14.43.54-24.626-.716-35.516-4.376l-7.632-2.564-5.068 3.704c-12.844 9.387-32.714 16.488-51.545 18.42-10.607 1.09-13.916 1.08-24.81-.066z"/></svg>');
} }
} }
@ -500,13 +453,15 @@
.brand { .brand {
a { a {
padding-left: 0; padding-left: 0;
padding-right: 0;
color: $white; color: $white;
} }
img { img {
width: 32px;
height: 32px; height: 32px;
margin-right: 10px; position: relative;
top: 4px;
left: -10px;
} }
} }
} }
@ -530,6 +485,42 @@
padding: 50px 0; padding: 50px 0;
} }
.extended-description {
padding: 50px 0;
ul,
ol {
list-style: inherit;
margin-left: 20px;
&[type='a'] {
list-style-type: lower-alpha;
}
&[type='i'] {
list-style-type: lower-roman;
}
}
li > ol,
li > ul {
margin-top: 20px;
}
p,
li {
font: 16px/28px 'mastodon-font-sans-serif', sans-serif;
font-weight: 400;
margin-bottom: 12px;
color: $ui-base-lighter-color;
a {
color: $ui-highlight-color;
text-decoration: underline;
}
}
}
h3 { h3 {
font-family: 'mastodon-font-display', sans-serif; font-family: 'mastodon-font-display', sans-serif;
font-size: 16px; font-size: 16px;
@ -542,7 +533,7 @@
p { p {
font-size: 16px; font-size: 16px;
line-height: 30px; line-height: 30px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
.features { .features {
@ -584,6 +575,11 @@
line-height: inherit; line-height: inherit;
font-weight: inherit; font-weight: inherit;
color: $primary-text-color; color: $primary-text-color;
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
a { a {
color: $ui-secondary-color; color: $ui-secondary-color;
@ -629,14 +625,14 @@
display: block; display: block;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
} }
.footer-links { .footer-links {
padding-bottom: 50px; padding-bottom: 50px;
text-align: right; text-align: right;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
p { p {
font-size: 14px; font-size: 14px;
@ -653,6 +649,29 @@
padding: 0 20px; padding: 0 20px;
} }
.information-board {
padding-bottom: 20px;
}
.information-board .container {
padding-right: 20px;
.panel {
position: static;
margin-top: 30px;
width: 100%;
border-radius: 4px;
.panel-header {
text-align: center;
}
}
}
.information-board .section {
text-align: center;
}
.header-wrapper .mascot { .header-wrapper .mascot {
left: 20px; left: 20px;
} }
@ -700,10 +719,25 @@
text-align: center; text-align: center;
} }
.nav {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.links a {
padding: 12px 8px;
}
.heading h1 { .heading h1 {
padding: 30px 0; padding: 30px 0;
} }
.links .brand img {
left: 0;
top: 0;
}
.hero { .hero {
.simple_form, .simple_form,
.closed-registrations-message { .closed-registrations-message {

File diff suppressed because one or more lines are too long

View File

@ -107,7 +107,7 @@
.icon-button { .icon-button {
display: inline-block; display: inline-block;
padding: 0; padding: 0;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
border: none; border: none;
background: transparent; background: transparent;
cursor: pointer; cursor: pointer;
@ -145,7 +145,7 @@
&:hover, &:hover,
&:active, &:active,
&:focus { &:focus {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
&.active { &.active {
@ -185,7 +185,7 @@
&:hover, &:hover,
&:active, &:active,
&:focus { &:focus {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
transition: color 200ms ease-out; transition: color 200ms ease-out;
} }
@ -807,7 +807,7 @@
margin-left: auto; margin-left: auto;
padding-left: 18px; padding-left: 18px;
width: 120px; width: 120px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
font-size: 14px; font-size: 14px;
text-align: right; text-align: right;
white-space: nowrap; white-space: nowrap;
@ -816,7 +816,7 @@
} }
.status__display-name { .status__display-name {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
.status__info .status__display-name { .status__info .status__display-name {
@ -865,13 +865,13 @@
.status__prepend { .status__prepend {
margin: -10px 0 10px; margin: -10px 0 10px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
padding: 8px 0 2px; padding: 8px 0 2px;
font-size: 14px; font-size: 14px;
position: relative; position: relative;
.status__display-name strong { .status__display-name strong {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
} }
@ -963,7 +963,7 @@
.detailed-status__meta { .detailed-status__meta {
margin-top: 15px; margin-top: 15px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
font-size: 14px; font-size: 14px;
line-height: 18px; line-height: 18px;
} }
@ -1096,6 +1096,28 @@
} }
} }
.account__disclaimer {
padding: 10px;
border-top: 1px solid lighten($ui-base-color, 8%);
color: $ui-base-lighter-color;
strong {
font-weight: 500;
}
a {
font-weight: 500;
color: inherit;
text-decoration: underline;
&:hover,
&:focus,
&:active {
text-decoration: none;
}
}
}
.account__header__content { .account__header__content {
color: $ui-primary-color; color: $ui-primary-color;
font-size: 14px; font-size: 14px;
@ -1238,7 +1260,7 @@
} }
abbr { abbr {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
} }
@ -1332,11 +1354,11 @@
.muted { .muted {
.status__content p, .status__content p,
.status__content a { .status__content a {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
.status__display-name strong { .status__display-name strong {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
.status__avatar, .emojione { .status__avatar, .emojione {
@ -1344,7 +1366,7 @@
} }
a.status__content__spoiler-link { a.status__content__spoiler-link {
background: lighten($ui-base-color, 26%); background: $ui-base-lighter-color;
color: lighten($ui-base-color, 4%); color: lighten($ui-base-color, 4%);
&:hover { &:hover {
@ -1560,7 +1582,7 @@
.static-content { .static-content {
padding: 10px; padding: 10px;
padding-top: 20px; padding-top: 20px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
h1 { h1 {
font-size: 16px; font-size: 16px;
@ -2041,7 +2063,7 @@
.column-subheading { .column-subheading {
background: $ui-base-color; background: $ui-base-color;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
padding: 8px 20px; padding: 8px 20px;
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 500;
@ -2161,7 +2183,7 @@
.getting-started__wrapper { .getting-started__wrapper {
position: relative; position: relative;
flex: 0 0 auto; overflow-y: auto;
} }
.getting-started__footer { .getting-started__footer {
@ -2180,7 +2202,7 @@
} }
a { a {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
} }
} }
@ -2244,7 +2266,7 @@ button.icon-button.active i.fa-retweet {
font-size: 14px; font-size: 14px;
border: 1px solid lighten($ui-base-color, 8%); border: 1px solid lighten($ui-base-color, 8%);
border-radius: 4px; border-radius: 4px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
margin-top: 14px; margin-top: 14px;
text-decoration: none; text-decoration: none;
overflow: hidden; overflow: hidden;
@ -2339,7 +2361,7 @@ button.icon-button.active i.fa-retweet {
.load-more { .load-more {
display: block; display: block;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
background-color: transparent; background-color: transparent;
border: 0; border: 0;
font-size: inherit; font-size: inherit;
@ -2529,11 +2551,72 @@ button.icon-button.active i.fa-retweet {
} }
.loading-indicator { .loading-indicator {
color: $ui-secondary-color; color: lighten($ui-base-color, 26%);
font-size: 16px; font-size: 12px;
font-weight: 500; font-weight: 400;
padding-top: 120px; text-transform: uppercase;
text-align: center; overflow: visible;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
span {
display: block;
float: left;
margin-left: 50%;
transform: translateX(-50%);
margin: 82px 0 0 50%;
white-space: nowrap;
animation: loader-label 1.15s infinite cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
}
.loading-indicator__figure {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 0;
height: 0;
box-sizing: border-box;
border: 0 solid lighten($ui-base-color, 26%);
border-radius: 50%;
animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
@keyframes loader-figure {
0% {
width: 0;
height: 0;
background-color: lighten($ui-base-color, 26%);
}
29% {
background-color: lighten($ui-base-color, 26%);
}
30% {
width: 42px;
height: 42px;
background-color: transparent;
border-width: 21px;
opacity: 1;
}
100% {
width: 42px;
height: 42px;
border-width: 0;
opacity: 0;
background-color: transparent;
}
}
@keyframes loader-label {
0% { opacity: 0.25; }
30% { opacity: 1; }
100% { opacity: 0.25; }
} }
.video-error-cover { .video-error-cover {
@ -2987,13 +3070,13 @@ button.icon-button.active i.fa-retweet {
color: $ui-secondary-color; color: $ui-secondary-color;
font-size: 18px; font-size: 18px;
font-weight: 500; font-weight: 500;
border: 2px dashed lighten($ui-base-color, 26%); border: 2px dashed $ui-base-lighter-color;
border-radius: 4px; border-radius: 4px;
} }
.upload-progress { .upload-progress {
padding: 10px; padding: 10px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
@ -3018,7 +3101,7 @@ button.icon-button.active i.fa-retweet {
width: 100%; width: 100%;
height: 6px; height: 6px;
border-radius: 6px; border-radius: 6px;
background: lighten($ui-base-color, 26%); background: $ui-base-lighter-color;
position: relative; position: relative;
margin-top: 5px; margin-top: 5px;
} }
@ -3303,7 +3386,7 @@ button.icon-button.active i.fa-retweet {
} }
.search-results__header { .search-results__header {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
background: lighten($ui-base-color, 2%); background: lighten($ui-base-color, 2%);
border-bottom: 1px solid darken($ui-base-color, 4%); border-bottom: 1px solid darken($ui-base-color, 4%);
padding: 15px 10px; padding: 15px 10px;
@ -3399,6 +3482,10 @@ button.icon-button.active i.fa-retweet {
} }
} }
.media-modal__content {
background: $base-overlay-background;
}
.media-modal__close { .media-modal__close {
position: absolute; position: absolute;
right: 4px; right: 4px;
@ -3897,7 +3984,7 @@ button.icon-button.active i.fa-retweet {
.attachment-list__icon { .attachment-list__icon {
flex: 0 0 auto; flex: 0 0 auto;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
padding: 8px 18px; padding: 8px 18px;
cursor: default; cursor: default;
border-right: 1px solid lighten($ui-base-color, 8%); border-right: 1px solid lighten($ui-base-color, 8%);
@ -3927,7 +4014,7 @@ button.icon-button.active i.fa-retweet {
a { a {
text-decoration: none; text-decoration: none;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
font-weight: 500; font-weight: 500;
&:hover { &:hover {
@ -4124,7 +4211,7 @@ button.icon-button.active i.fa-retweet {
} }
.account-section-headline { .account-section-headline {
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
background: lighten($ui-base-color, 2%); background: lighten($ui-base-color, 2%);
border-bottom: 1px solid lighten($ui-base-color, 4%); border-bottom: 1px solid lighten($ui-base-color, 4%);
padding: 15px 10px; padding: 15px 10px;
@ -4160,10 +4247,24 @@ button.icon-button.active i.fa-retweet {
noscript { noscript {
text-align: center; text-align: center;
div { img {
font-size: 20px; width: 200px;
margin: 20px 0; opacity: 0.5;
animation: flicker 4s infinite;
} }
div {
font-size: 14px;
margin: 30px auto;
color: $ui-secondary-color;
max-width: 400px;
}
}
@keyframes flicker {
0% { opacity: 1; }
30% { opacity: 0.75; }
100% { opacity: 1; }
} }
@media screen and (max-width: 1024px) and (max-height: 400px) { @media screen and (max-width: 1024px) and (max-height: 400px) {

View File

@ -23,8 +23,7 @@
align-items: center; align-items: center;
img { img {
width: 32px; height: 42px;
height: 32px;
margin-right: 10px; margin-right: 10px;
} }

View File

@ -32,7 +32,7 @@ code {
line-height: 18px; line-height: 18px;
margin-top: 15px; margin-top: 15px;
margin-bottom: 0; margin-bottom: 0;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
a { a {
color: $ui-primary-color; color: $ui-primary-color;
@ -308,7 +308,7 @@ code {
padding: 7px 4px; padding: 7px 4px;
padding-bottom: 9px; padding-bottom: 9px;
font-size: 16px; font-size: 16px;
color: lighten($ui-base-color, 26%); color: $ui-base-lighter-color;
font-family: inherit; font-family: inherit;
pointer-events: none; pointer-events: none;
cursor: default; cursor: default;

View File

@ -36,6 +36,18 @@
} }
} }
&.with-header {
.entry {
&:first-child {
&,
.detailed-status.light,
.status.light {
border-radius: 0;
}
}
}
}
.status.light { .status.light {
padding: 14px 14px 14px (48px + 14px * 2); padding: 14px 14px 14px (48px + 14px * 2);
position: relative; position: relative;
@ -247,7 +259,9 @@
border: medium none; border: medium none;
display: block; display: block;
flex: 1 1 auto; flex: 1 1 auto;
width: 100%;
height: 100%; height: 100%;
overflow: hidden;
margin-right: 2px; margin-right: 2px;
&:last-child { &:last-child {

View File

@ -22,10 +22,11 @@ $valid-value-color: $success-green !default;
$error-value-color: $error-red !default; $error-value-color: $error-red !default;
// Tell UI to use selected colors // Tell UI to use selected colors
$ui-base-color: $classic-base-color !default; // Darkest $ui-base-color: $classic-base-color !default; // Darkest
$ui-primary-color: $classic-primary-color !default; // Lighter $ui-base-lighter-color: lighten($ui-base-color, 26%) !default; // Lighter darkest
$ui-secondary-color: $classic-secondary-color !default; // Lightest $ui-primary-color: $classic-primary-color !default; // Lighter
$ui-highlight-color: $classic-highlight-color !default; // Vibrant $ui-secondary-color: $classic-secondary-color !default; // Lightest
$ui-highlight-color: $classic-highlight-color !default; // Vibrant
// Avatar border size (8% default, 100% for rounded avatars) // Avatar border size (8% default, 100% for rounded avatars)
$ui-avatar-border-size: 8%; $ui-avatar-border-size: 8%;

View File

@ -12,7 +12,7 @@
# #
class DomainBlock < ApplicationRecord class DomainBlock < ApplicationRecord
enum severity: [:silence, :suspend] enum severity: [:silence, :suspend, :noop]
attr_accessor :retroactive attr_accessor :retroactive

View File

@ -53,6 +53,7 @@ class User < ApplicationRecord
scope :admins, -> { where(admin: true) } scope :admins, -> { where(admin: true) }
scope :confirmed, -> { where.not(confirmed_at: nil) } scope :confirmed, -> { where.not(confirmed_at: nil) }
scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) } scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) }
scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended: false }) }
scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) }
scope :with_recent_ip_address, ->(value) { where(arel_table[:current_sign_in_ip].eq(value).or(arel_table[:last_sign_in_ip].eq(value))) } scope :with_recent_ip_address, ->(value) { where(arel_table[:current_sign_in_ip].eq(value).or(arel_table[:last_sign_in_ip].eq(value))) }

View File

@ -11,16 +11,16 @@ class BlockDomainService < BaseService
private private
def process_domain_block def process_domain_block
clear_media! if domain_block.reject_media?
if domain_block.silence? if domain_block.silence?
silence_accounts! silence_accounts!
else elsif domain_block.suspend?
suspend_accounts! suspend_accounts!
end end
end end
def silence_accounts! def silence_accounts!
blocked_domain_accounts.in_batches.update_all(silenced: true) blocked_domain_accounts.in_batches.update_all(silenced: true)
clear_media! if domain_block.reject_media?
end end
def clear_media! def clear_media!

View File

@ -10,7 +10,7 @@ class UnblockDomainService < BaseService
end end
def process_retroactive_updates def process_retroactive_updates
blocked_accounts.in_batches.update_all(update_options) blocked_accounts.in_batches.update_all(update_options) unless domain_block.noop?
end end
def blocked_accounts def blocked_accounts

View File

@ -1,5 +1,8 @@
.panel .panel
.panel-header= t 'about.contact' .panel-header
= succeed ':' do
= t 'about.contact'
%span{ title: contact.site_contact_email.presence }= contact.site_contact_email.presence
.panel-body .panel-body
- if contact.contact_account - if contact.contact_account
.owner .owner
@ -8,8 +11,9 @@
= link_to TagManager.instance.url_for(contact.contact_account) do = link_to TagManager.instance.url_for(contact.contact_account) do
%span.display_name.emojify= display_name(contact.contact_account) %span.display_name.emojify= display_name(contact.contact_account)
%span.username @#{contact.contact_account.acct} %span.username @#{contact.contact_account.acct}
- else
- unless contact.site_contact_email.blank? .owner
.contact-email .avatar= image_tag full_asset_url('avatars/original/missing.png', skip_pipeline: true)
= t 'about.business_email' .name
%strong= contact.site_contact_email %span.display_name= t 'about.contact_missing'
%span.username= t 'about.contact_unavailable'

View File

@ -1,12 +0,0 @@
.panel
.panel-header= t 'about.links'
.panel-list
%ul
- if user_signed_in?
%li= link_to t('about.get_started'), root_path
- else
- if instance.open_registrations
%li= link_to t('about.get_started'), new_user_registration_path
%li= link_to t('auth.login'), new_user_session_path
%li= link_to t('about.terms'), terms_path
%li= link_to t('about.source_code'), 'https://github.com/chronister/mastodon'

View File

@ -1,9 +0,0 @@
.panel
.panel-header= t 'about.version'
.panel-body
- if @instance_presenter.commit_hash == ""
%strong= version.version_number
- else
%strong= version.version_number
%strong= "#{@instance_presenter.commit_hash}"

View File

@ -1,16 +1,44 @@
- content_for :page_title do - content_for :page_title do
= site_hostname = site_hostname
.wrapper.thicc - content_for :header_tags do
.sidebar-layout = javascript_pack_tag 'public', integrity: true, crossorigin: 'anonymous'
.main
.panel
%h2= site_hostname
- unless @instance_presenter.site_description.blank? %meta{ property: 'og:site_name', content: site_title }/
%p!= @instance_presenter.site_description %meta{ property: 'og:url', content: about_url }/
%meta{ property: 'og:type', content: 'website' }/
%meta{ property: 'og:title', content: site_hostname }/
%meta{ property: 'og:description', content: strip_tags(@instance_presenter.site_description.presence || t('about.about_mastodon_html')) }/
%meta{ property: 'og:image', content: asset_pack_path('mastodon_small.jpg', protocol: :request) }/
%meta{ property: 'og:image:width', content: '400' }/
%meta{ property: 'og:image:height', content: '400' }/
%meta{ property: 'twitter:card', content: 'summary' }/
.information-board .landing-page
.header-wrapper.compact
.header
.container.links
.brand
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
%ul.nav
%li
- if user_signed_in?
= link_to t('settings.back'), root_url, class: 'webapp-btn'
- else
= link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
%li= link_to t('about.about_this'), about_more_path
%li= link_to t('about.other_instances'), 'https://joinmastodon.org/'
.container.hero
.heading
%h3= t('about.description_headline', domain: site_hostname)
%p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
.information-board
.container
.information-board-sections
.section .section
%span= t 'about.user_count_before' %span= t 'about.user_count_before'
%strong= number_with_delimiter @instance_presenter.user_count %strong= number_with_delimiter @instance_presenter.user_count
@ -23,11 +51,14 @@
%span= t 'about.domain_count_before' %span= t 'about.domain_count_before'
%strong= number_with_delimiter @instance_presenter.domain_count %strong= number_with_delimiter @instance_presenter.domain_count
%span= t 'about.domain_count_after' %span= t 'about.domain_count_after'
- unless @instance_presenter.site_extended_description.blank?
.panel!= @instance_presenter.site_extended_description
.sidebar
= render 'contact', contact: @instance_presenter = render 'contact', contact: @instance_presenter
= render 'links', instance: @instance_presenter
= render 'version', version: @instance_presenter .extended-description
.container
= @instance_presenter.site_extended_description.html_safe.presence || t('about.extended_description_html')
.footer-links
.container
%p
= link_to t('about.source_code'), 'https://github.com/tootsuite/mastodon'
= " (#{@instance_presenter.version_number})"

View File

@ -24,8 +24,7 @@
.container.links .container.links
.brand .brand
= link_to root_url do = link_to root_url do
= image_tag asset_pack_path('logo.svg'), alt: '', role: 'presentation' = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
Mastodon
%ul.nav %ul.nav
%li %li

View File

@ -1,8 +1,23 @@
- content_for :page_title do - content_for :page_title do
= t('terms.title', instance: site_hostname) = t('terms.title', instance: site_hostname)
.wrapper .landing-page
- if @instance_presenter.site_terms.present? .header-wrapper.compact
= raw @instance_presenter.site_terms .header
- else .container.links
= t('terms.body_html') .brand
= link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
%ul.nav
%li
- if user_signed_in?
= link_to t('settings.back'), root_url, class: 'webapp-btn'
- else
= link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
%li= link_to t('about.about_this'), about_more_path
%li= link_to t('about.other_instances'), 'https://joinmastodon.org/'
.extended-description
.container
= @instance_presenter.site_terms.html_safe.presence || t('terms.body_html')

View File

@ -23,9 +23,9 @@
.accounts-grid .accounts-grid
= render 'nothing_here' = render 'nothing_here'
- else - else
.activity-stream .activity-stream.with-header
= render partial: 'stream_entries/status', collection: @statuses, as: :status = render partial: 'stream_entries/status', collection: @statuses, as: :status
.pagination - if @statuses.size == 20
- if @statuses.size == 20 .pagination
= link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), short_account_url(@account, max_id: @statuses.last.id), class: 'next', rel: 'next' = link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), short_account_url(@account, max_id: @statuses.last.id), class: 'next', rel: 'next'

View File

@ -3,13 +3,18 @@
= simple_form_for @domain_block, url: admin_domain_block_path(@domain_block), method: :delete do |f| = simple_form_for @domain_block, url: admin_domain_block_path(@domain_block), method: :delete do |f|
= f.input :retroactive, - if (@domain_block.noop?)
as: :boolean, = f.input :retroactive,
wrapper: :with_label, as: :hidden,
label: t(".retroactive.#{@domain_block.severity}"), input_html: { :value => "0" }
hint: t(:affected_accounts, - else
scope: [:admin, :domain_blocks, :show], = f.input :retroactive,
count: @domain_block.accounts_count) as: :boolean,
wrapper: :with_label,
label: t(".retroactive.#{@domain_block.severity}"),
hint: t(:affected_accounts,
scope: [:admin, :domain_blocks, :show],
count: @domain_block.accounts_count)
.actions .actions
= f.button :button, t('.undo'), type: :submit = f.button :button, t('.undo'), type: :submit

View File

@ -7,6 +7,7 @@
.app-holder#mastodon{ data: { props: Oj.dump(default_props) } } .app-holder#mastodon{ data: { props: Oj.dump(default_props) } }
%noscript %noscript
= image_tag asset_pack_path('logo.png') = image_tag asset_pack_path('logo.svg'), alt: 'Mastodon'
%div %div
= t('errors.noscript') = t('errors.noscript')

View File

@ -6,7 +6,7 @@
.sidebar-wrapper .sidebar-wrapper
.sidebar .sidebar
= link_to root_path do = link_to root_path do
= image_tag asset_pack_path('logo.png'), class: 'logo' = image_tag asset_pack_path('logo.svg'), class: 'logo', alt: 'Mastodon'
= render_navigation = render_navigation
.content-wrapper .content-wrapper

View File

@ -6,8 +6,7 @@
.logo-container .logo-container
%h1 %h1
= link_to root_path do = link_to root_path do
= image_tag asset_pack_path('logo.svg') = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
Mastodon
.form-container .form-container
= render 'flashes' = render 'flashes'

View File

@ -2,7 +2,7 @@ object false
node(:name) { Setting.site_title } node(:name) { Setting.site_title }
node(:short_name) { Setting.site_title } node(:short_name) { Setting.site_title }
node(:description) { strip_tags(Setting.site_description.presence || I18n.t('about.about_mastodon')) } node(:description) { strip_tags(Setting.site_description.presence || I18n.t('about.about_mastodon_html')) }
node(:icons) { [{ src: '/android-chrome-192x192.png', sizes: '192x192', type: 'image/png' }] } node(:icons) { [{ src: '/android-chrome-192x192.png', sizes: '192x192', type: 'image/png' }] }
node(:theme_color) { '#282c37' } node(:theme_color) { '#282c37' }
node(:background_color) { '#d9e1e8' } node(:background_color) { '#d9e1e8' }

View File

@ -8,7 +8,7 @@ end
node(:links) do node(:links) do
[ [
{ rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: account_url(@account) }, { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: short_account_url(@account) },
{ rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }, { rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom') },
{ rel: 'self', type: 'application/activity+json', href: account_url(@account) }, { rel: 'self', type: 'application/activity+json', href: account_url(@account) },
{ rel: 'salmon', href: api_salmon_url(@account.id) }, { rel: 'salmon', href: api_salmon_url(@account.id) },

View File

@ -3,7 +3,7 @@ Nokogiri::XML::Builder.new do |xml|
xml.Subject @canonical_account_uri xml.Subject @canonical_account_uri
xml.Alias short_account_url(@account) xml.Alias short_account_url(@account)
xml.Alias account_url(@account) xml.Alias account_url(@account)
xml.Link(rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: TagManager.instance.url_for(@account)) xml.Link(rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: short_account_url(@account))
xml.Link(rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom')) xml.Link(rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(@account, format: 'atom'))
xml.Link(rel: 'self', type: 'application/activity+json', href: account_url(@account)) xml.Link(rel: 'self', type: 'application/activity+json', href: account_url(@account))
xml.Link(rel: 'salmon', href: api_salmon_url(@account.id)) xml.Link(rel: 'salmon', href: api_salmon_url(@account.id))

View File

@ -0,0 +1,13 @@
# frozen_string_literal: true
require 'sidekiq-scheduler'
class Scheduler::UserCleanupScheduler
include Sidekiq::Worker
def perform
User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).find_in_batches do |batch|
Account.where(id: batch.map(&:account_id)).delete_all
User.where(id: batch.map(&:id)).delete_all
end
end
end

View File

@ -1,6 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
lock '3.8.1' lock '3.8.2'
set :repo_url, ENV.fetch('REPO', 'https://github.com/tootsuite/mastodon.git') set :repo_url, ENV.fetch('REPO', 'https://github.com/tootsuite/mastodon.git')
set :branch, ENV.fetch('BRANCH', 'master') set :branch, ENV.fetch('BRANCH', 'master')

View File

@ -0,0 +1,12 @@
nl:
activerecord:
errors:
models:
account:
attributes:
username:
invalid: alleen letters, nummers en underscores
status:
attributes:
reblog:
taken: van toot bestaat al

View File

@ -1,21 +1,17 @@
--- ---
ar: ar:
about: about:
about_mastodon: ماستدون شبكة إجتماعية <em>حرة و مفتوحة المصدر</em>. هو بديل <em>لامركزي</em> لمنصات تجارية ، يمكنك من تجنب احتكار شركة واحدة للإتصالات الخاصة بك. يمكنك اختيار أي خادم تثق فيه. أيهما تختار، يمكنك التفاعل مع أي شخص آخر على الشبكة. يمكن لأي شخص تنصيب و تشغيل خادم ماستدون خاص به والمشاركة في <em>الشبكات الاجتماعية</em> بكل شفافية. about_mastodon_html: ماستدون شبكة إجتماعية <em>حرة و مفتوحة المصدر</em>. هو بديل <em>لامركزي</em> لمنصات تجارية ، يمكنك من تجنب احتكار شركة واحدة للإتصالات الخاصة بك. يمكنك اختيار أي خادم تثق فيه. أيهما تختار، يمكنك التفاعل مع أي شخص آخر على الشبكة. يمكن لأي شخص تنصيب و تشغيل خادم ماستدون خاص به والمشاركة في <em>الشبكات الاجتماعية</em> بكل شفافية.
about_this: عن مثيل الخادوم هذا about_this: عن مثيل الخادوم هذا
business_email: 'البريد الإلكتروني المهني :'
closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا. closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا.
contact: للتواصل معنا contact: للتواصل معنا
description_headline: ما هو %{domain}? description_headline: ما هو %{domain}?
domain_count_after: خوادم أخرى domain_count_after: خوادم أخرى
domain_count_before: متصل بـ domain_count_before: متصل بـ
get_started: إبدأ الآن
links: الروابط
other_instances: خوادم أخرى other_instances: خوادم أخرى
source_code: الشفرة المصدرية source_code: الشفرة المصدرية
status_count_after: منشورا status_count_after: منشورا
status_count_before: نشروا status_count_before: نشروا
terms: شروط الاستعمال
user_count_after: مستخدم user_count_after: مستخدم
user_count_before: يستضيف user_count_before: يستضيف
accounts: accounts:

View File

@ -1,21 +1,17 @@
--- ---
bg: bg:
about: about:
about_mastodon: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>. about_mastodon_html: Mastodon е <em>безплатен</em> сървър с <em>отворен код</em> за социални мрежи. Като <em>децентрализирана</em> алтернатива на комерсиалните платформи, той позволява избягването на риска от монополизация на твоята комуникация от единични компании. Изберете си сървър, на който се доверявате, и ще можете да контактувате с всички останали. Всеки може да пусне Mastodon и лесно да вземе участие в <em>социалната мрежа</em>.
about_this: За тази инстанция about_this: За тази инстанция
business_email: 'Служебен e-mail:'
closed_registrations: В момента регистрациите за тази инстанция са затворени. closed_registrations: В момента регистрациите за тази инстанция са затворени.
contact: За контакти contact: За контакти
description_headline: Какво е %{domain}? description_headline: Какво е %{domain}?
domain_count_after: други инстанции domain_count_after: други инстанции
domain_count_before: Свързани към domain_count_before: Свързани към
get_started: Първи стъпки
links: Връзки
other_instances: Други инстанции other_instances: Други инстанции
source_code: Програмен код source_code: Програмен код
status_count_after: публикации status_count_after: публикации
status_count_before: Написали status_count_before: Написали
terms: Условия
user_count_after: потребители user_count_after: потребители
user_count_before: Дом на user_count_before: Дом на
accounts: accounts:

View File

@ -1,24 +1,19 @@
--- ---
ca: ca:
about: about:
about_mastodon: Mastodon és un servidor de xarxa social <em>lliure i de codi obert</em>. Una alternativa <em>descentralitzada</em> a plataformes comercials, que evita el risc que una única companyia monopolitzi la teva comunicació. Qualsevol pot executar Mastodon i participar sense problemes en la <em>xarxa social</em>. about_mastodon_html: Mastodon és un servidor de xarxa social <em>lliure i de codi obert</em>. Una alternativa <em>descentralitzada</em> a plataformes comercials, que evita el risc que una única companyia monopolitzi la teva comunicació. Qualsevol pot executar Mastodon i participar sense problemes en la <em>xarxa social</em>.
about_this: Sobre aquesta instància about_this: Sobre aquesta instància
business_email: 'Adreça de contacte:'
closed_registrations: Els registres estan actualment tancats en aquesta instància. closed_registrations: Els registres estan actualment tancats en aquesta instància.
contact: Contacte contact: Contacte
description_headline: Què es %{domain}? description_headline: Què es %{domain}?
domain_count_after: altres instàncies domain_count_after: altres instàncies
domain_count_before: Connectat a domain_count_before: Connectat a
get_started: Començar
links: Vincles
other_instances: Altres instàncies other_instances: Altres instàncies
source_code: Codi font source_code: Codi font
status_count_after: estats status_count_after: estats
status_count_before: Que han escrit status_count_before: Que han escrit
terms: Termes
user_count_after: usuaris registrats user_count_after: usuaris registrats
user_count_before: Tenim user_count_before: Tenim
version: Versió
accounts: accounts:
follow: Seguir follow: Seguir
followers: Seguidors followers: Seguidors

View File

@ -1,24 +1,19 @@
--- ---
de: de:
about: about:
about_mastodon: Mastodon ist ein <em>freier, quelloffener</em> sozialer Netzwerkserver. Als <em>dezentralisierte</em> Alternative zu kommerziellen Plattformen verhindert es die Risiken, die entstehen, wenn eine einzelne Firma deine Kommunikation monopolisiert. Jeder kann Mastodon verwenden und ganz einfach am <em>sozialen Netzwerk</em> teilnehmen. about_mastodon_html: Mastodon ist ein <em>freier, quelloffener</em> sozialer Netzwerkserver. Als <em>dezentralisierte</em> Alternative zu kommerziellen Plattformen verhindert es die Risiken, die entstehen, wenn eine einzelne Firma deine Kommunikation monopolisiert. Jeder kann Mastodon verwenden und ganz einfach am <em>sozialen Netzwerk</em> teilnehmen.
about_this: Über diese Instanz about_this: Über diese Instanz
business_email: 'Geschäftliche E-Mail:'
closed_registrations: Die Registrierung ist auf dieser Instanz momentan geschlossen. closed_registrations: Die Registrierung ist auf dieser Instanz momentan geschlossen.
contact: Kontakt contact: Kontakt
description_headline: Was ist %{domain}? description_headline: Was ist %{domain}?
domain_count_after: andere Instanzen domain_count_after: andere Instanzen
domain_count_before: Verbunden mit domain_count_before: Verbunden mit
get_started: Erste Schritte
links: Links
other_instances: Andere Instanzen other_instances: Andere Instanzen
source_code: Quellcode source_code: Quellcode
status_count_after: Beiträge verfassten status_count_after: Beiträge verfassten
status_count_before: die status_count_before: die
terms: AGB
user_count_after: Benutzer user_count_after: Benutzer
user_count_before: Heimat für user_count_before: Heimat für
version: Version
accounts: accounts:
follow: Folgen follow: Folgen
followers: Folgende followers: Folgende

View File

@ -2,7 +2,7 @@
nl: nl:
devise: devise:
confirmations: confirmations:
confirmed: Je account is bevestigd. confirmed: Jouw account is bevestigd.
send_instructions: Je ontvangt via e-mail instructies hoe je jouw account kunt bevestigen. Kijk tussen je spam wanneer niks werd ontvangen. send_instructions: Je ontvangt via e-mail instructies hoe je jouw account kunt bevestigen. Kijk tussen je spam wanneer niks werd ontvangen.
send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je jouw account kunt bevestigen. Kijk tussen je spam wanneer niks werd ontvangen. send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je jouw account kunt bevestigen. Kijk tussen je spam wanneer niks werd ontvangen.
failure: failure:
@ -10,8 +10,8 @@ nl:
inactive: Jouw account is nog niet geactiveerd. inactive: Jouw account is nog niet geactiveerd.
invalid: Ongeldig e-mailadres of wachtwoord. invalid: Ongeldig e-mailadres of wachtwoord.
invalid_token: Ongeldige bevestigingscode. invalid_token: Ongeldige bevestigingscode.
last_attempt: Je hebt nog één poging over voordat jouw account geblokkeerd wordt. last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort.
locked: Jouw account is geblokkeerd. locked: Jouw account is opgeschort.
not_found_in_database: Ongeldig e-mailadres of wachtwoord. not_found_in_database: Ongeldig e-mailadres of wachtwoord.
timeout: Jouw sessie is verlopen, log opnieuw in. timeout: Jouw sessie is verlopen, log opnieuw in.
unauthenticated: Je dient in te loggen of te registreren. unauthenticated: Je dient in te loggen of te registreren.
@ -24,21 +24,21 @@ nl:
reset_password_instructions: reset_password_instructions:
subject: 'Mastodon: Wachtwoord opnieuw instellen' subject: 'Mastodon: Wachtwoord opnieuw instellen'
unlock_instructions: unlock_instructions:
subject: 'Mastodon: Instructies om account te deblokkeren' subject: 'Mastodon: Instructies om opschorten account ongedaan te maken'
omniauth_callbacks: omniauth_callbacks:
failure: Kon je niet aanmelden met jouw %{kind} account, omdat "%{reason}". failure: Kon je niet aanmelden met jouw %{kind} account, omdat "%{reason}".
success: Successvol aangemeld met jouw %{kind} account. success: Successvol aangemeld met jouw %{kind} account.
passwords: passwords:
no_token: Je kunt deze pagina niet benaderen zonder dat je een e-mail om je wachtwoord opnieuw in te stellen hebt ontvangen. no_token: Je kunt deze pagina niet benaderen zonder dat je een e-mail om je wachtwoord opnieuw in te stellen hebt ontvangen.
send_instructions: Je ontvangt via e-mail instructies hoe je jouw wachtwoord opnieuw moet instellen. Kijk tussen je spam wanneer niks werd ontvangen. send_instructions: Je ontvangt via e-mail instructies hoe je jouw wachtwoord opnieuw moet instellen. Kijk tussen je spam wanneer niks werd ontvangen.
send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je jouw wachtwoord opnieuw moet instellen. Kijk tussen je spam wanneer niks werd ontvangen. send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je jouw wachtwoord opnieuw kunt instellen. Kijk tussen je spam wanneer niks werd ontvangen.
updated: Jouw wachtwoord is gewijzigd. Je bent nu ingelogd. updated: Jouw wachtwoord is gewijzigd. Je bent nu ingelogd.
updated_not_active: Jouw wachtwoord is gewijzigd. updated_not_active: Jouw wachtwoord is gewijzigd.
registrations: registrations:
destroyed: Jouw account is verwijderd. Wellicht tot ziens! destroyed: Jouw account is verwijderd. Wellicht tot ziens!
signed_up: Je bent geregistreerd. signed_up: Je bent geregistreerd.
signed_up_but_inactive: Je bent geregistreerd. Je kon alleen niet automatisch ingelogd worden omdat jouw account nog niet geactiveerd is. signed_up_but_inactive: Je bent geregistreerd. Je kon alleen niet automatisch ingelogd worden omdat jouw account nog niet geactiveerd is.
signed_up_but_locked: Je bent ingeschreven. Je kon alleen niet automatisch ingelogd worden omdat jouw account geblokkeerd is. signed_up_but_locked: Je bent ingeschreven. Je kon alleen niet automatisch ingelogd worden omdat jouw account is opgeschort.
signed_up_but_unconfirmed: Je ontvangt via e-mail instructies hoe je jouw account kunt activeren. Kijk tussen je spam wanneer niks werd ontvangen. signed_up_but_unconfirmed: Je ontvangt via e-mail instructies hoe je jouw account kunt activeren. Kijk tussen je spam wanneer niks werd ontvangen.
update_needs_confirmation: Je hebt je e-mailadres succesvol gewijzigd, maar we moeten je nieuwe mailadres nog bevestigen. Controleer jouw e-mail en klik op de link in de mail om jouw e-mailadres te bevestigen. Kijk tussen je spam wanneer niks werd ontvangen. update_needs_confirmation: Je hebt je e-mailadres succesvol gewijzigd, maar we moeten je nieuwe mailadres nog bevestigen. Controleer jouw e-mail en klik op de link in de mail om jouw e-mailadres te bevestigen. Kijk tussen je spam wanneer niks werd ontvangen.
updated: Jouw accountgegevens zijn opgeslagen. updated: Jouw accountgegevens zijn opgeslagen.
@ -46,16 +46,16 @@ nl:
signed_in: Je bent succesvol ingelogd. signed_in: Je bent succesvol ingelogd.
signed_out: Je bent succesvol uitgelogd. signed_out: Je bent succesvol uitgelogd.
unlocks: unlocks:
send_instructions: Je ontvangt via e-mail instructies hoe je jouw account kunt deblokkeren. Kijk tussen je spam wanneer niks werd ontvangen. send_instructions: Je ontvangt via e-mail instructies hoe je het opschorten van jouw account ongedaan kunt maken. Kijk tussen je spam wanneer niks werd ontvangen.
send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je jouw account kunt deblokkeren. Kijk tussen je spam wanneer niks werd ontvangen. send_paranoid_instructions: Als jouw e-mailadres in de database staat, ontvang je via e-mail instructies hoe je het opschorten van jouw account ongedaan kunt maken. Kijk tussen je spam wanneer niks werd ontvangen.
unlocked: Jouw account is gedeblokkeerd. Je kunt nu weer inloggen. unlocked: Jouw account is niet meer opgeschort. Je kunt nu weer inloggen.
errors: errors:
messages: messages:
already_confirmed: is reeds bevestigd already_confirmed: is reeds bevestigd
confirmation_period_expired: moet worden bevestigd binnen %{period}, probeer het nog een keer confirmation_period_expired: moet worden bevestigd binnen %{period}, probeer het nog een keer
expired: is verlopen, vraag een nieuwe aan expired: is verlopen, vraag een nieuwe aan
not_found: niet gevonden not_found: niet gevonden
not_locked: is niet geblokkeerd not_locked: is niet opgeschort
not_saved: not_saved:
one: '1 fout verhinderde het opslaan van deze %{resource}:' one: '1 fout verhinderde het opslaan van deze %{resource}:'
other: "%{count} fouten verhinderden het opslaan van deze %{resource}:" other: "%{count} fouten verhinderden het opslaan van deze %{resource}:"

View File

@ -109,6 +109,6 @@ nl:
application: application:
title: OAuth-autorisatie vereist title: OAuth-autorisatie vereist
scopes: scopes:
follow: volg, blokkeer, deblokkeer en stop het volgen van accounts follow: accounts te volgen, te negeren en te blokkeren.
read: lees jouw accountgegevens read: jouw accountgegevens te lezen
write: namens jou plaatsen write: namens jou berichten te plaatsen

View File

@ -3,12 +3,16 @@ en:
about: about:
about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail. about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail.
about_this: About about_this: About
business_email: 'Business e-mail:'
closed_registrations: Registrations are currently closed on this instance. However! You can find a different instance to make an account on and get access to the very same network from there. closed_registrations: Registrations are currently closed on this instance. However! You can find a different instance to make an account on and get access to the very same network from there.
contact: Contact contact: Contact
contact_missing: Not set
contact_unavailable: N/A
description_headline: What is %{domain}? description_headline: What is %{domain}?
domain_count_after: other instances domain_count_after: other instances
domain_count_before: Connected to domain_count_before: Connected to
extended_description_html: |
<h3>A good place for rules</h3>
<p>The extended description has not been set up yet.</p>
features: features:
humane_approach_body: Learning from failures of other networks, Mastodon aims to make ethical design choices to combat the misuse of social media. humane_approach_body: Learning from failures of other networks, Mastodon aims to make ethical design choices to combat the misuse of social media.
humane_approach_title: A more humane approach humane_approach_title: A more humane approach
@ -20,18 +24,14 @@ en:
within_reach_title: Always within reach within_reach_title: Always within reach
find_another_instance: Find another instance find_another_instance: Find another instance
generic_description: "%{domain} is one server in the network" generic_description: "%{domain} is one server in the network"
get_started: Get started
hosted_on: Mastodon hosted on %{domain} hosted_on: Mastodon hosted on %{domain}
learn_more: Learn more learn_more: Learn more
links: Links
other_instances: Instance list other_instances: Instance list
source_code: Source code source_code: Source code
status_count_after: statuses status_count_after: statuses
status_count_before: Who authored status_count_before: Who authored
terms: Terms
user_count_after: users user_count_after: users
user_count_before: Home to user_count_before: Home to
version: Version
what_is_mastodon: What is Mastodon? what_is_mastodon: What is Mastodon?
accounts: accounts:
follow: Follow follow: Follow
@ -108,13 +108,15 @@ en:
create: Create block create: Create block
hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts. hint: The domain block will not prevent creation of account entries in the database, but will retroactively and automatically apply specific moderation methods on those accounts.
severity: severity:
desc_html: "<strong>Silence</strong> will make the account's posts invisible to anyone who isn't following them. <strong>Suspend</strong> will remove all of the account's content, media, and profile data." desc_html: "<strong>Silence</strong> will make the account's posts invisible to anyone who isn't following them. <strong>Suspend</strong> will remove all of the account's content, media, and profile data. Use <strong>None</strong> if you just want to reject media files."
noop: None
silence: Silence silence: Silence
suspend: Suspend suspend: Suspend
title: New domain block title: New domain block
reject_media: Reject media files reject_media: Reject media files
reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions
severities: severities:
noop: None
silence: Silence silence: Silence
suspend: Suspend suspend: Suspend
severity: Severity severity: Severity
@ -198,8 +200,8 @@ en:
show: Show media show: Show media
title: Media title: Media
no_media: No media no_media: No media
with_media: With media
title: Account statuses title: Account statuses
with_media: With media
subscriptions: subscriptions:
callback_url: Callback URL callback_url: Callback URL
confirmed: Confirmed confirmed: Confirmed
@ -272,7 +274,7 @@ en:
content: Security verification failed. Are you blocking cookies? content: Security verification failed. Are you blocking cookies?
title: Security verification failed title: Security verification failed
'429': Throttled '429': Throttled
noscript: To use Mastodon, please enable JavaScript. noscript: To use the Mastodon web application, please enable JavaScript. Alternatively, find a native app for Mastodon for your platform.
exports: exports:
blocks: You block blocks: You block
csv: CSV csv: CSV
@ -347,15 +349,15 @@ en:
follow: follow:
title: "%{name} is now following you" title: "%{name} is now following you"
mention: mention:
action_boost: 'Boost' action_boost: Boost
action_expand: 'Show more' action_expand: Show more
action_favourite: 'Favourite' action_favourite: Favourite
title: "%{name} mentioned you" title: "%{name} mentioned you"
reblog: reblog:
title: "%{name} boosted your status" title: "%{name} boosted your status"
subscribed: subscribed:
body: "You can now receive push notifications." body: You can now receive push notifications.
title: "Subscription registered!" title: Subscription registered!
remote_follow: remote_follow:
acct: Enter your username@domain you want to follow from acct: Enter your username@domain you want to follow from
missing_resource: Could not find the required redirect URL for your account missing_resource: Could not find the required redirect URL for your account

View File

@ -1,20 +1,16 @@
--- ---
eo: eo:
about: about:
about_mastodon: Mastodon estas <em>senpaga, malfermitkoda</em> socia reto. Ĝi estas <em>sencentra</em> alia eblo al komercaj servoj. Ĝi evitigas, ke unusola firmao regu vian tutan komunikadon. Elektu servilon, kiun vi fidas. Kiu ajn estas via elekto, vi povas interagi kun ĉiuj aliaj uzantoj. Iu ajn povas krei sian propran aperaĵon de Mastodon en sia servilo, kaj partopreni en la <em>socia reto</em> tute glate. about_mastodon_html: Mastodon estas <em>senpaga, malfermitkoda</em> socia reto. Ĝi estas <em>sencentra</em> alia eblo al komercaj servoj. Ĝi evitigas, ke unusola firmao regu vian tutan komunikadon. Elektu servilon, kiun vi fidas. Kiu ajn estas via elekto, vi povas interagi kun ĉiuj aliaj uzantoj. Iu ajn povas krei sian propran aperaĵon de Mastodon en sia servilo, kaj partopreni en la <em>socia reto</em> tute glate.
about_this: Pri tiu aperaĵo about_this: Pri tiu aperaĵo
business_email: 'Profesia retpoŝt-adreso:'
contact: Kontakti contact: Kontakti
description_headline: Kio estas %{domain}? description_headline: Kio estas %{domain}?
domain_count_after: aliaj aperaĵoj domain_count_after: aliaj aperaĵoj
domain_count_before: Konektita al domain_count_before: Konektita al
get_started: Komenci
links: Ligiloj
other_instances: Aliaj aperaĵoj other_instances: Aliaj aperaĵoj
source_code: Fontkodo source_code: Fontkodo
status_count_after: mesaĝoj status_count_after: mesaĝoj
status_count_before: Kiu publikigis status_count_before: Kiu publikigis
terms: Terms
user_count_after: uzantoj user_count_after: uzantoj
user_count_before: Hejmo de user_count_before: Hejmo de
accounts: accounts:

View File

@ -1,21 +1,17 @@
--- ---
es: es:
about: about:
about_mastodon: Mastodon es un servidor de red social <em>libre y de código abierto</em>. Una alternativa <em>descentralizada</em> a plataformas comerciales, que evita el riesgo de que una única compañía monopolice tu comunicación. Cualquiera puede ejecutar Mastodon y participar sin problemas en la <em>red social</em>. about_mastodon_html: Mastodon es un servidor de red social <em>libre y de código abierto</em>. Una alternativa <em>descentralizada</em> a plataformas comerciales, que evita el riesgo de que una única compañía monopolice tu comunicación. Cualquiera puede ejecutar Mastodon y participar sin problemas en la <em>red social</em>.
about_this: Acerca de esta instancia about_this: Acerca de esta instancia
business_email: 'Correo de negocios:'
closed_registrations: Los registros están actualmente cerrados en esta instancia. closed_registrations: Los registros están actualmente cerrados en esta instancia.
contact: Contacto contact: Contacto
description_headline: "¿Qué es %{domain}?" description_headline: "¿Qué es %{domain}?"
domain_count_after: otras instancias domain_count_after: otras instancias
domain_count_before: Conectado a domain_count_before: Conectado a
get_started: Comenzar
links: Enlaces
other_instances: Otras instancias other_instances: Otras instancias
source_code: Código fuente source_code: Código fuente
status_count_after: estados status_count_after: estados
status_count_before: Que han escrito status_count_before: Que han escrito
terms: Términos
user_count_after: usuarios registrados user_count_after: usuarios registrados
user_count_before: Tenemos user_count_before: Tenemos
accounts: accounts:

View File

@ -1,24 +1,19 @@
--- ---
fa: fa:
about: about:
about_mastodon: ماستدون (Mastodon) یک شبکهٔ اجتماعی <em>آزاد و کدباز</em> است. یک جایگزین <em>غیرمتمرکز</em> برای شبکه‌های تجاری، که نمی‌گذارد ارتباط‌های شما را یک شرکت در انحصار خود بگیرد. یک سرور مورد اعتماد را انتخاب کنید &mdash; هر سروری که باشد، همچنان می‌توانید با سرورهای دیگر ارتباط داشته باشید. هر کسی می‌تواند سرور ماستدون خود را راه بیندازد و در <em>شبکهٔ اجتماعی</em> سهیم شود. about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی <em>آزاد و کدباز</em> است. یک جایگزین <em>غیرمتمرکز</em> برای شبکه‌های تجاری، که نمی‌گذارد ارتباط‌های شما را یک شرکت در انحصار خود بگیرد. یک سرور مورد اعتماد را انتخاب کنید &mdash; هر سروری که باشد، همچنان می‌توانید با سرورهای دیگر ارتباط داشته باشید. هر کسی می‌تواند سرور ماستدون خود را راه بیندازد و در <em>شبکهٔ اجتماعی</em> سهیم شود.
about_this: دربارهٔ این سرور about_this: دربارهٔ این سرور
business_email: 'ایمیل کاری:'
closed_registrations: امکان ثبت نام روی این سرور هم‌اینک فعال نیست. closed_registrations: امکان ثبت نام روی این سرور هم‌اینک فعال نیست.
contact: تماس contact: تماس
description_headline: "%{domain} چیست؟" description_headline: "%{domain} چیست؟"
domain_count_after: سرور دیگر domain_count_after: سرور دیگر
domain_count_before: متصل به domain_count_before: متصل به
get_started: آغاز کنید
links: پیوندها
other_instances: سرورهای دیگر other_instances: سرورهای دیگر
source_code: کدهای منبع source_code: کدهای منبع
status_count_after: چیز نوشته‌اند status_count_after: چیز نوشته‌اند
status_count_before: که جمعاً status_count_before: که جمعاً
terms: شرایط استفاده
user_count_after: کاربر user_count_after: کاربر
user_count_before: دارای user_count_before: دارای
version: نسخه
accounts: accounts:
follow: پی بگیرید follow: پی بگیرید
followers: پیگیران followers: پیگیران

View File

@ -1,20 +1,16 @@
--- ---
fi: fi:
about: about:
about_mastodon: Mastodon on <em>ilmainen, avoimeen lähdekoodiin perustuva</em> sosiaalinen verkosto. <em>Hajautettu</em> vaihtoehto kaupallisille alustoille, se välttää eiskit yhden yrityksen monopolisoinnin sinun viestinnässäsi. Valitse palvelin mihin luotat &mdash; minkä tahansa valitset, voit vuorovaikuttaa muiden kanssa. Kuka tahansa voi luoda Mastodon palvelimen ja ottaa osaa <em>sosiaaliseen verkkoon</em> saumattomasti. about_mastodon_html: Mastodon on <em>ilmainen, avoimeen lähdekoodiin perustuva</em> sosiaalinen verkosto. <em>Hajautettu</em> vaihtoehto kaupallisille alustoille, se välttää eiskit yhden yrityksen monopolisoinnin sinun viestinnässäsi. Valitse palvelin mihin luotat &mdash; minkä tahansa valitset, voit vuorovaikuttaa muiden kanssa. Kuka tahansa voi luoda Mastodon palvelimen ja ottaa osaa <em>sosiaaliseen verkkoon</em> saumattomasti.
about_this: Tietoja tästä palvelimesta about_this: Tietoja tästä palvelimesta
business_email: 'Business e-mail:'
contact: Ota yhteyttä contact: Ota yhteyttä
description_headline: Mikä on %{domain}? description_headline: Mikä on %{domain}?
domain_count_after: muuhun palvelimeen domain_count_after: muuhun palvelimeen
domain_count_before: Yhdistyneenä domain_count_before: Yhdistyneenä
get_started: Aloita käyttö
links: Linkit
other_instances: Muut palvelimet other_instances: Muut palvelimet
source_code: Lähdekoodi source_code: Lähdekoodi
status_count_after: statusta status_count_after: statusta
status_count_before: Ovat luoneet status_count_before: Ovat luoneet
terms: Ehdot
user_count_after: käyttäjälle user_count_after: käyttäjälle
user_count_before: Koti user_count_before: Koti
accounts: accounts:

File diff suppressed because one or more lines are too long

View File

@ -1,24 +1,19 @@
--- ---
he: he:
about: about:
about_mastodon: מסטודון היא רשת חברתית <em>חופשית, מבוססת תוכנה חופשית ("קוד פתוח")</em>. כאלטרנטיבה <em>בלתי ריכוזית</em> לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד &mdash; לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ב<em>רשת החברתית</em> באופן חלק. about_mastodon_html: מסטודון היא רשת חברתית <em>חופשית, מבוססת תוכנה חופשית ("קוד פתוח")</em>. כאלטרנטיבה <em>בלתי ריכוזית</em> לפלטפרומות המסחריות, מסטודון מאפשרת להמנע מהסיכונים הנלווים להפקדת התקשורת שלך בידי חברה יחידה. שמת את מבטחך בשרת אחד &mdash; לא משנה במי בחרת, תמיד אפשר לדבר עם כל שאר המשתמשים. לכל מי שרוצה יש את האפשרות להקים שרת מסטודון עצמאי, ולהשתתף ב<em>רשת החברתית</em> באופן חלק.
about_this: אודות שרת זה about_this: אודות שרת זה
business_email: 'דוא"ל עסקי:'
closed_registrations: הרשמות סגורות לשרת זה לעת עתה. closed_registrations: הרשמות סגורות לשרת זה לעת עתה.
contact: צור קשר contact: צור קשר
description_headline: מהו %{domain}? description_headline: מהו %{domain}?
domain_count_after: שרתים אחרים domain_count_after: שרתים אחרים
domain_count_before: מחובר אל domain_count_before: מחובר אל
get_started: בואו נתחיל
links: קישורים
other_instances: שרתים אחרים other_instances: שרתים אחרים
source_code: קוד מקור source_code: קוד מקור
status_count_after: הודעות status_count_after: הודעות
status_count_before: שכתבו status_count_before: שכתבו
terms: תנאים
user_count_after: משתמשים user_count_after: משתמשים
user_count_before: ביתם של user_count_before: ביתם של
version: גרסה
accounts: accounts:
follow: לעקוב follow: לעקוב
followers: עוקבים followers: עוקבים

View File

@ -1,21 +1,17 @@
--- ---
hr: hr:
about: about:
about_mastodon: Mastodon je <em>besplatna, open-source</em> socijalna mreža. <em>Decentralizirana</em> alternativa komercijalnim platformama, izbjegava rizik toga da jedna tvrtka monopolizira vašu komunikaciju. Izaberite server kojem ćete vjerovati &mdash; koji god odabrali, moći ćete komunicirati sa svima ostalima. Bilo tko može imati svoju vlastitu Mastodon instancu i sudjelovati u <em>socijalnoj mreži</em> bez problema. about_mastodon_html: Mastodon je <em>besplatna, open-source</em> socijalna mreža. <em>Decentralizirana</em> alternativa komercijalnim platformama, izbjegava rizik toga da jedna tvrtka monopolizira vašu komunikaciju. Izaberite server kojem ćete vjerovati &mdash; koji god odabrali, moći ćete komunicirati sa svima ostalima. Bilo tko može imati svoju vlastitu Mastodon instancu i sudjelovati u <em>socijalnoj mreži</em> bez problema.
about_this: O ovoj instanci about_this: O ovoj instanci
business_email: 'Poslovni e-mail:'
closed_registrations: Registracije na ovoj instanci su trenutno zatvorene. closed_registrations: Registracije na ovoj instanci su trenutno zatvorene.
contact: Kontakt contact: Kontakt
description_headline: Što je %{domain}? description_headline: Što je %{domain}?
domain_count_after: druge instance domain_count_after: druge instance
domain_count_before: Spojen na domain_count_before: Spojen na
get_started: Započni
links: Linkovi
other_instances: Druge instance other_instances: Druge instance
source_code: Izvorni kod source_code: Izvorni kod
status_count_after: statusi status_count_after: statusi
status_count_before: Tko je autor status_count_before: Tko je autor
terms: Uvjeti
user_count_after: korisnici user_count_after: korisnici
user_count_before: Home to user_count_before: Home to
accounts: accounts:

View File

@ -1,10 +1,8 @@
--- ---
hu: hu:
about: about:
about_mastodon: Mastodon egy <em>szabad, nyílt forráskódú</em> szociális hálózati kiszolgálo. Egy <em>központosítatlan</em> alternatíva a kereskedelmi platformokra, elkerüli a kommunikációd monopolizációját veszélyét. Bárki futtathatja a Mastodon-t és részt vehet a <em>szociális hálózatban</em>. about_mastodon_html: Mastodon egy <em>szabad, nyílt forráskódú</em> szociális hálózati kiszolgálo. Egy <em>központosítatlan</em> alternatíva a kereskedelmi platformokra, elkerüli a kommunikációd monopolizációját veszélyét. Bárki futtathatja a Mastodon-t és részt vehet a <em>szociális hálózatban</em>.
get_started: Első lépések
source_code: Forráskód source_code: Forráskód
terms: Feltételek
accounts: accounts:
follow: Követés follow: Követés
followers: Követők followers: Követők
@ -32,7 +30,7 @@ hu:
validation_errors: validation_errors:
one: Valami nincs rendjén! Kérlek tekintsd meg a hibát alant one: Valami nincs rendjén! Kérlek tekintsd meg a hibát alant
other: Valami nincs rendjén! Kérlek tekintsd meg a %{count} darab hibát alant. other: Valami nincs rendjén! Kérlek tekintsd meg a %{count} darab hibát alant.
landing_strip_html: <strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse. landing_strip_html: "<strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse."
landing_strip_signup_html: If you don't, you can <a href="%{sign_up_path}">sign up here</a>. landing_strip_signup_html: If you don't, you can <a href="%{sign_up_path}">sign up here</a>.
notification_mailer: notification_mailer:
favourite: favourite:

View File

@ -1,24 +1,19 @@
--- ---
id: id:
about: about:
about_mastodon: Mastodon adalah sebuah jejaring sosial <em>terbuka, open-source</em. Sebuah alternatif <em>desentralisasi</em> dari platform komersial, menjauhkan anda resiko dari sebuah perusahaan yang memonopoli komunikasi anda. Pilih server yang anda percayai &mdash; apapun yang anda pilih, anda tetap dapat berinteraksi dengan semua orang. Semua orang dapat menjalankan server Mastodon sendiri dan berpartisipasi dalam <em>jejaring sosial</em> dengan mudah. about_mastodon_html: Mastodon adalah sebuah jejaring sosial <em>terbuka, open-source</em. Sebuah alternatif <em>desentralisasi</em> dari platform komersial, menjauhkan anda resiko dari sebuah perusahaan yang memonopoli komunikasi anda. Pilih server yang anda percayai &mdash; apapun yang anda pilih, anda tetap dapat berinteraksi dengan semua orang. Semua orang dapat menjalankan server Mastodon sendiri dan berpartisipasi dalam <em>jejaring sosial</em> dengan mudah.
about_this: Tentang server ini about_this: Tentang server ini
business_email: 'E-mail bisnis:'
closed_registrations: Pendaftaran untuk server ini sedang ditutup. closed_registrations: Pendaftaran untuk server ini sedang ditutup.
contact: Kontak contact: Kontak
description_headline: Apa itu %{domain}? description_headline: Apa itu %{domain}?
domain_count_after: server lain domain_count_after: server lain
domain_count_before: Terhubung dengan domain_count_before: Terhubung dengan
get_started: Mulai
links: Link
other_instances: Server lain other_instances: Server lain
source_code: Kode sumber source_code: Kode sumber
status_count_after: status status_count_after: status
status_count_before: Yang telah menulis status_count_before: Yang telah menulis
terms: Ketentuan
user_count_after: pengguna user_count_after: pengguna
user_count_before: Tempat bernaung bagi user_count_before: Tempat bernaung bagi
version: Versi
accounts: accounts:
follow: Ikuti follow: Ikuti
followers: Pengikut followers: Pengikut

View File

@ -1,21 +1,17 @@
--- ---
io: io:
about: about:
about_mastodon: Mastodon esas <em>gratuita, apertitkodexa</em> sociala reto. Ol esas <em>sencentra</em> altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la <em>sociala reto</em> tote glate. about_mastodon_html: Mastodon esas <em>gratuita, apertitkodexa</em> sociala reto. Ol esas <em>sencentra</em> altra alternativo a komercala servadi. Ol evitigas, ke sola firmo guvernez tua tota komunikadol. Selektez servero, quan tu fidas. Irge qua esas tua selekto, tu povas komunikar kun omna altra uzeri. Irgu povas krear sua propra instaluro di Mastodon en sua servero, e partoprenar en la <em>sociala reto</em> tote glate.
about_this: Pri ta instaluro about_this: Pri ta instaluro
business_email: 'Profesionala retpost-adreso:'
closed_registrations: Membresko ne nun esas posible en ta instaluro. closed_registrations: Membresko ne nun esas posible en ta instaluro.
contact: Kontaktar contact: Kontaktar
description_headline: Quo esas %{domain}? description_headline: Quo esas %{domain}?
domain_count_after: altra instaluri domain_count_after: altra instaluri
domain_count_before: Konektita ad domain_count_before: Konektita ad
get_started: Komencar
links: Ligili
other_instances: Altra instaluri other_instances: Altra instaluri
source_code: Fontkodexo source_code: Fontkodexo
status_count_after: mesaji status_count_after: mesaji
status_count_before: Qua publikigis status_count_before: Qua publikigis
terms: Terms
user_count_after: uzeri user_count_after: uzeri
user_count_before: Hemo di user_count_before: Hemo di
accounts: accounts:

View File

@ -1,21 +1,17 @@
--- ---
it: it:
about: about:
about_mastodon: Mastodon è un social network <em>gratuito e open-source</em>. Un'alternativa <em>decentralizzata</em> alle piattaforme commerciali che evita che una singola compagnia monopolizzi il tuo modo di comunicare. Scegli un server di cui ti fidi &mdash; qualunque sia la tua scelta, potrai interagire con chiunque altro. Chiunque può sviluppare un suo server Mastodon e partecipare alla vita del <em>social network</em>. about_mastodon_html: Mastodon è un social network <em>gratuito e open-source</em>. Un'alternativa <em>decentralizzata</em> alle piattaforme commerciali che evita che una singola compagnia monopolizzi il tuo modo di comunicare. Scegli un server di cui ti fidi &mdash; qualunque sia la tua scelta, potrai interagire con chiunque altro. Chiunque può sviluppare un suo server Mastodon e partecipare alla vita del <em>social network</em>.
about_this: A proposito di questo server about_this: A proposito di questo server
business_email: 'Email di lavoro:'
closed_registrations: Al momento le iscrizioni a questo server sono chiuse. closed_registrations: Al momento le iscrizioni a questo server sono chiuse.
contact: Contatti contact: Contatti
description_headline: Cos'è %{domain}? description_headline: Cos'è %{domain}?
domain_count_after: altri server domain_count_after: altri server
domain_count_before: Connesso a domain_count_before: Connesso a
get_started: Inizia
links: Links
other_instances: Altri server other_instances: Altri server
source_code: Codice sorgente source_code: Codice sorgente
status_count_after: status status_count_after: status
status_count_before: Che hanno pubblicato status_count_before: Che hanno pubblicato
terms: Termini di Utilizzo
user_count_after: utenti user_count_after: utenti
user_count_before: Casa di user_count_before: Casa di
accounts: accounts:

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