Merge pull request #499 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
commit
162f1863a7
|
@ -10,6 +10,12 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
|
|
||||||
respond_to :json
|
respond_to :json
|
||||||
|
|
||||||
|
# This API was originally unlimited, pagination cannot be introduced without
|
||||||
|
# breaking backwards-compatibility. Arbitrarily high number to cover most
|
||||||
|
# conversations as quasi-unlimited, it would be too much work to render more
|
||||||
|
# than this anyway
|
||||||
|
CONTEXT_LIMIT = 4_096
|
||||||
|
|
||||||
def show
|
def show
|
||||||
cached = Rails.cache.read(@status.cache_key)
|
cached = Rails.cache.read(@status.cache_key)
|
||||||
@status = cached unless cached.nil?
|
@status = cached unless cached.nil?
|
||||||
|
@ -17,8 +23,8 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def context
|
def context
|
||||||
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(DEFAULT_STATUSES_LIMIT, current_account)
|
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(CONTEXT_LIMIT, current_account)
|
||||||
descendants_results = @status.descendants(DEFAULT_STATUSES_LIMIT, current_account)
|
descendants_results = @status.descendants(CONTEXT_LIMIT, current_account)
|
||||||
loaded_ancestors = cache_collection(ancestors_results, Status)
|
loaded_ancestors = cache_collection(ancestors_results, Status)
|
||||||
loaded_descendants = cache_collection(descendants_results, Status)
|
loaded_descendants = cache_collection(descendants_results, Status)
|
||||||
|
|
||||||
|
|
|
@ -40,10 +40,9 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => {
|
||||||
dispatch(expandHomeTimeline({}, () => dispatch(expandNotifications({}, done))));
|
dispatch(expandHomeTimeline({}, () => dispatch(expandNotifications({}, done))));
|
||||||
};
|
};
|
||||||
|
|
||||||
export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification);
|
export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification);
|
||||||
export const connectCommunityStream = () => connectTimelineStream('community', 'public:local');
|
export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`);
|
||||||
export const connectMediaStream = () => connectTimelineStream('community', 'public:local');
|
export const connectPublicStream = ({ onlyMedia } = {}) => connectTimelineStream(`public${onlyMedia ? ':media' : ''}`, `public${onlyMedia ? ':media' : ''}`);
|
||||||
export const connectPublicStream = () => connectTimelineStream('public', 'public');
|
export const connectHashtagStream = tag => connectTimelineStream(`hashtag:${tag}`, `hashtag&tag=${tag}`);
|
||||||
export const connectHashtagStream = (tag) => connectTimelineStream(`hashtag:${tag}`, `hashtag&tag=${tag}`);
|
export const connectDirectStream = () => connectTimelineStream('direct', 'direct');
|
||||||
export const connectDirectStream = () => connectTimelineStream('direct', 'direct');
|
export const connectListStream = id => connectTimelineStream(`list:${id}`, `list&list=${id}`);
|
||||||
export const connectListStream = (id) => connectTimelineStream(`list:${id}`, `list&list=${id}`);
|
|
||||||
|
|
|
@ -93,15 +93,15 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done);
|
export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done);
|
||||||
export const expandPublicTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('public', '/api/v1/timelines/public', { max_id: maxId }, done);
|
export const expandPublicTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`public${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { max_id: maxId, only_media: !!onlyMedia }, done);
|
||||||
export const expandCommunityTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('community', '/api/v1/timelines/public', { local: true, max_id: maxId }, done);
|
export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done);
|
||||||
export const expandDirectTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }, done);
|
export const expandDirectTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('direct', '/api/v1/timelines/direct', { max_id: maxId }, done);
|
||||||
export const expandAccountTimeline = (accountId, { maxId, withReplies } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, max_id: maxId });
|
export const expandAccountTimeline = (accountId, { maxId, withReplies } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, max_id: maxId });
|
||||||
export const expandAccountFeaturedTimeline = accountId => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true });
|
export const expandAccountFeaturedTimeline = accountId => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true });
|
||||||
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true });
|
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true });
|
||||||
export const expandHashtagTimeline = (hashtag, { maxId } = {}, done = noOp) => expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`, { max_id: maxId }, done);
|
export const expandHashtagTimeline = (hashtag, { maxId } = {}, done = noOp) => expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`, { max_id: maxId }, done);
|
||||||
export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
|
export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
|
||||||
|
|
||||||
export function expandTimelineRequest(timeline) {
|
export function expandTimelineRequest(timeline) {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -20,6 +20,7 @@ class Item extends React.PureComponent {
|
||||||
index: PropTypes.number.isRequired,
|
index: PropTypes.number.isRequired,
|
||||||
size: PropTypes.number.isRequired,
|
size: PropTypes.number.isRequired,
|
||||||
onClick: PropTypes.func.isRequired,
|
onClick: PropTypes.func.isRequired,
|
||||||
|
displayWidth: PropTypes.number,
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
|
@ -58,7 +59,7 @@ class Item extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { attachment, index, size, standalone } = this.props;
|
const { attachment, index, size, standalone, displayWidth } = this.props;
|
||||||
|
|
||||||
let width = 50;
|
let width = 50;
|
||||||
let height = 100;
|
let height = 100;
|
||||||
|
@ -121,7 +122,7 @@ class Item extends React.PureComponent {
|
||||||
const hasSize = typeof originalWidth === 'number' && typeof previewWidth === 'number';
|
const hasSize = typeof originalWidth === 'number' && typeof previewWidth === 'number';
|
||||||
|
|
||||||
const srcSet = hasSize ? `${originalUrl} ${originalWidth}w, ${previewUrl} ${previewWidth}w` : null;
|
const srcSet = hasSize ? `${originalUrl} ${originalWidth}w, ${previewUrl} ${previewWidth}w` : null;
|
||||||
const sizes = hasSize ? `(min-width: 1025px) ${320 * (width / 100)}px, ${width}vw` : null;
|
const sizes = hasSize ? `${displayWidth * (width / 100)}px` : null;
|
||||||
|
|
||||||
const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;
|
const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0;
|
||||||
const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;
|
const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0;
|
||||||
|
@ -263,9 +264,9 @@ export default class MediaGallery extends React.PureComponent {
|
||||||
const size = media.take(4).size;
|
const size = media.take(4).size;
|
||||||
|
|
||||||
if (this.isStandaloneEligible()) {
|
if (this.isStandaloneEligible()) {
|
||||||
children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} />;
|
children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} />;
|
||||||
} else {
|
} else {
|
||||||
children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} />);
|
children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} />);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
|
import { NavLink } from 'react-router-dom';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import StatusListContainer from '../ui/containers/status_list_container';
|
import StatusListContainer from '../ui/containers/status_list_container';
|
||||||
import Column from '../../components/column';
|
import Column from '../../components/column';
|
||||||
import ColumnHeader from '../../components/column_header';
|
import ColumnHeader from '../../components/column_header';
|
||||||
import { expandCommunityTimeline } from '../../actions/timelines';
|
import { expandCommunityTimeline } from '../../actions/timelines';
|
||||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
||||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|
||||||
import ColumnSettingsContainer from './containers/column_settings_container';
|
import ColumnSettingsContainer from './containers/column_settings_container';
|
||||||
import { connectCommunityStream } from '../../actions/streaming';
|
import { connectCommunityStream } from '../../actions/streaming';
|
||||||
|
|
||||||
|
@ -14,20 +15,25 @@ const messages = defineMessages({
|
||||||
title: { id: 'column.community', defaultMessage: 'Local timeline' },
|
title: { id: 'column.community', defaultMessage: 'Local timeline' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = (state, { onlyMedia }) => ({
|
||||||
hasUnread: state.getIn(['timelines', 'community', 'unread']) > 0,
|
hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@connect(mapStateToProps)
|
@connect(mapStateToProps)
|
||||||
@injectIntl
|
@injectIntl
|
||||||
export default class CommunityTimeline extends React.PureComponent {
|
export default class CommunityTimeline extends React.PureComponent {
|
||||||
|
|
||||||
|
static defaultProps = {
|
||||||
|
onlyMedia: false,
|
||||||
|
};
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
dispatch: PropTypes.func.isRequired,
|
dispatch: PropTypes.func.isRequired,
|
||||||
columnId: PropTypes.string,
|
columnId: PropTypes.string,
|
||||||
intl: PropTypes.object.isRequired,
|
intl: PropTypes.object.isRequired,
|
||||||
hasUnread: PropTypes.bool,
|
hasUnread: PropTypes.bool,
|
||||||
multiColumn: PropTypes.bool,
|
multiColumn: PropTypes.bool,
|
||||||
|
onlyMedia: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
handlePin = () => {
|
handlePin = () => {
|
||||||
|
@ -50,10 +56,10 @@ export default class CommunityTimeline extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
const { dispatch } = this.props;
|
const { dispatch, onlyMedia } = this.props;
|
||||||
|
|
||||||
dispatch(expandCommunityTimeline());
|
dispatch(expandCommunityTimeline({ onlyMedia }));
|
||||||
this.disconnect = dispatch(connectCommunityStream());
|
this.disconnect = dispatch(connectCommunityStream({ onlyMedia }));
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount () {
|
componentWillUnmount () {
|
||||||
|
@ -68,13 +74,22 @@ export default class CommunityTimeline extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleLoadMore = maxId => {
|
handleLoadMore = maxId => {
|
||||||
this.props.dispatch(expandCommunityTimeline({ maxId }));
|
const { dispatch, onlyMedia } = this.props;
|
||||||
|
|
||||||
|
dispatch(expandCommunityTimeline({ maxId, onlyMedia }));
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl, hasUnread, columnId, multiColumn } = this.props;
|
const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props;
|
||||||
const pinned = !!columnId;
|
const pinned = !!columnId;
|
||||||
|
|
||||||
|
const headline = (
|
||||||
|
<div className='community-timeline__section-headline'>
|
||||||
|
<NavLink exact to='/timelines/public/local' replace><FormattedMessage id='timeline.posts' defaultMessage='Toots' /></NavLink>
|
||||||
|
<NavLink exact to='/timelines/public/local/media' replace><FormattedMessage id='timeline.media' defaultMessage='Media' /></NavLink>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column ref={this.setRef}>
|
<Column ref={this.setRef}>
|
||||||
<ColumnHeader
|
<ColumnHeader
|
||||||
|
@ -91,9 +106,10 @@ export default class CommunityTimeline extends React.PureComponent {
|
||||||
</ColumnHeader>
|
</ColumnHeader>
|
||||||
|
|
||||||
<StatusListContainer
|
<StatusListContainer
|
||||||
|
prepend={headline}
|
||||||
trackScroll={!pinned}
|
trackScroll={!pinned}
|
||||||
scrollKey={`community_timeline-${columnId}`}
|
scrollKey={`community_timeline-${columnId}`}
|
||||||
timelineId='community'
|
timelineId={`community${onlyMedia ? ':media' : ''}`}
|
||||||
onLoadMore={this.handleLoadMore}
|
onLoadMore={this.handleLoadMore}
|
||||||
emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}
|
emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
|
import { NavLink } from 'react-router-dom';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import StatusListContainer from '../ui/containers/status_list_container';
|
import StatusListContainer from '../ui/containers/status_list_container';
|
||||||
import Column from '../../components/column';
|
import Column from '../../components/column';
|
||||||
import ColumnHeader from '../../components/column_header';
|
import ColumnHeader from '../../components/column_header';
|
||||||
import { expandPublicTimeline } from '../../actions/timelines';
|
import { expandPublicTimeline } from '../../actions/timelines';
|
||||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
import { addColumn, removeColumn, moveColumn } from '../../actions/columns';
|
||||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|
||||||
import ColumnSettingsContainer from './containers/column_settings_container';
|
import ColumnSettingsContainer from './containers/column_settings_container';
|
||||||
import { connectPublicStream } from '../../actions/streaming';
|
import { connectPublicStream } from '../../actions/streaming';
|
||||||
|
|
||||||
|
@ -14,20 +15,25 @@ const messages = defineMessages({
|
||||||
title: { id: 'column.public', defaultMessage: 'Federated timeline' },
|
title: { id: 'column.public', defaultMessage: 'Federated timeline' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = (state, { onlyMedia }) => ({
|
||||||
hasUnread: state.getIn(['timelines', 'public', 'unread']) > 0,
|
hasUnread: state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`, 'unread']) > 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@connect(mapStateToProps)
|
@connect(mapStateToProps)
|
||||||
@injectIntl
|
@injectIntl
|
||||||
export default class PublicTimeline extends React.PureComponent {
|
export default class PublicTimeline extends React.PureComponent {
|
||||||
|
|
||||||
|
static defaultProps = {
|
||||||
|
onlyMedia: false,
|
||||||
|
};
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
dispatch: PropTypes.func.isRequired,
|
dispatch: PropTypes.func.isRequired,
|
||||||
intl: PropTypes.object.isRequired,
|
intl: PropTypes.object.isRequired,
|
||||||
columnId: PropTypes.string,
|
columnId: PropTypes.string,
|
||||||
multiColumn: PropTypes.bool,
|
multiColumn: PropTypes.bool,
|
||||||
hasUnread: PropTypes.bool,
|
hasUnread: PropTypes.bool,
|
||||||
|
onlyMedia: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
handlePin = () => {
|
handlePin = () => {
|
||||||
|
@ -50,10 +56,10 @@ export default class PublicTimeline extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
const { dispatch } = this.props;
|
const { dispatch, onlyMedia } = this.props;
|
||||||
|
|
||||||
dispatch(expandPublicTimeline());
|
dispatch(expandPublicTimeline({ onlyMedia }));
|
||||||
this.disconnect = dispatch(connectPublicStream());
|
this.disconnect = dispatch(connectPublicStream({ onlyMedia }));
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount () {
|
componentWillUnmount () {
|
||||||
|
@ -68,13 +74,22 @@ export default class PublicTimeline extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleLoadMore = maxId => {
|
handleLoadMore = maxId => {
|
||||||
this.props.dispatch(expandPublicTimeline({ maxId }));
|
const { dispatch, onlyMedia } = this.props;
|
||||||
|
|
||||||
|
dispatch(expandPublicTimeline({ maxId, onlyMedia }));
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl, columnId, hasUnread, multiColumn } = this.props;
|
const { intl, columnId, hasUnread, multiColumn, onlyMedia } = this.props;
|
||||||
const pinned = !!columnId;
|
const pinned = !!columnId;
|
||||||
|
|
||||||
|
const headline = (
|
||||||
|
<div className='public-timeline__section-headline'>
|
||||||
|
<NavLink exact to='/timelines/public' replace><FormattedMessage id='timeline.posts' defaultMessage='Toots' /></NavLink>
|
||||||
|
<NavLink exact to='/timelines/public/media' replace><FormattedMessage id='timeline.media' defaultMessage='Media' /></NavLink>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column ref={this.setRef}>
|
<Column ref={this.setRef}>
|
||||||
<ColumnHeader
|
<ColumnHeader
|
||||||
|
@ -91,7 +106,8 @@ export default class PublicTimeline extends React.PureComponent {
|
||||||
</ColumnHeader>
|
</ColumnHeader>
|
||||||
|
|
||||||
<StatusListContainer
|
<StatusListContainer
|
||||||
timelineId='public'
|
prepend={headline}
|
||||||
|
timelineId={`public${onlyMedia ? ':media' : ''}`}
|
||||||
onLoadMore={this.handleLoadMore}
|
onLoadMore={this.handleLoadMore}
|
||||||
trackScroll={!pinned}
|
trackScroll={!pinned}
|
||||||
scrollKey={`public_timeline-${columnId}`}
|
scrollKey={`public_timeline-${columnId}`}
|
||||||
|
|
|
@ -141,7 +141,9 @@ class SwitchingColumnsArea extends React.PureComponent {
|
||||||
<WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />
|
<WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />
|
||||||
<WrappedRoute path='/timelines/home' component={HomeTimeline} content={children} />
|
<WrappedRoute path='/timelines/home' component={HomeTimeline} content={children} />
|
||||||
<WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} />
|
<WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} />
|
||||||
<WrappedRoute path='/timelines/public/local' component={CommunityTimeline} content={children} />
|
<WrappedRoute path='/timelines/public/media' component={PublicTimeline} content={children} componentParams={{ onlyMedia: true }} />
|
||||||
|
<WrappedRoute path='/timelines/public/local' exact component={CommunityTimeline} content={children} />
|
||||||
|
<WrappedRoute path='/timelines/public/local/media' component={CommunityTimeline} content={children} componentParams={{ onlyMedia: true }} />
|
||||||
<WrappedRoute path='/timelines/direct' component={DirectTimeline} content={children} />
|
<WrappedRoute path='/timelines/direct' component={DirectTimeline} content={children} />
|
||||||
<WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />
|
<WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />
|
||||||
<WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />
|
<WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "المحلي",
|
"tabs_bar.local_timeline": "المحلي",
|
||||||
"tabs_bar.notifications": "الإخطارات",
|
"tabs_bar.notifications": "الإخطارات",
|
||||||
"tabs_bar.search": "البحث",
|
"tabs_bar.search": "البحث",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
||||||
"upload_area.title": "إسحب ثم أفلت للرفع",
|
"upload_area.title": "إسحب ثم أفلت للرفع",
|
||||||
"upload_button.label": "إضافة وسائط",
|
"upload_button.label": "إضافة وسائط",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Известия",
|
"tabs_bar.notifications": "Известия",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Добави медия",
|
"upload_button.label": "Добави медия",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificacions",
|
"tabs_bar.notifications": "Notificacions",
|
||||||
"tabs_bar.search": "Cerca",
|
"tabs_bar.search": "Cerca",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
|
"ui.beforeunload": "El vostre esborrany es perdrà si sortiu de Mastodon.",
|
||||||
"upload_area.title": "Arrossega i deixa anar per carregar",
|
"upload_area.title": "Arrossega i deixa anar per carregar",
|
||||||
"upload_button.label": "Afegir multimèdia",
|
"upload_button.label": "Afegir multimèdia",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lucale",
|
"tabs_bar.local_timeline": "Lucale",
|
||||||
"tabs_bar.notifications": "Nutificazione",
|
"tabs_bar.notifications": "Nutificazione",
|
||||||
"tabs_bar.search": "Cercà",
|
"tabs_bar.search": "Cercà",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
|
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
|
||||||
"upload_area.title": "Drag & drop per caricà un fugliale",
|
"upload_area.title": "Drag & drop per caricà un fugliale",
|
||||||
"upload_button.label": "Aghjunghje un media",
|
"upload_button.label": "Aghjunghje un media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokal",
|
"tabs_bar.local_timeline": "Lokal",
|
||||||
"tabs_bar.notifications": "Mitteilungen",
|
"tabs_bar.notifications": "Mitteilungen",
|
||||||
"tabs_bar.search": "Suchen",
|
"tabs_bar.search": "Suchen",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
||||||
"upload_area.title": "Zum Hochladen hereinziehen",
|
"upload_area.title": "Zum Hochladen hereinziehen",
|
||||||
"upload_button.label": "Mediendatei hinzufügen",
|
"upload_button.label": "Mediendatei hinzufügen",
|
||||||
|
|
|
@ -596,6 +596,14 @@
|
||||||
"defaultMessage": "Local timeline",
|
"defaultMessage": "Local timeline",
|
||||||
"id": "column.community"
|
"id": "column.community"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Toots",
|
||||||
|
"id": "timeline.posts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Media",
|
||||||
|
"id": "timeline.media"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
"defaultMessage": "The local timeline is empty. Write something publicly to get the ball rolling!",
|
||||||
"id": "empty_column.community"
|
"id": "empty_column.community"
|
||||||
|
@ -1393,6 +1401,14 @@
|
||||||
"defaultMessage": "Federated timeline",
|
"defaultMessage": "Federated timeline",
|
||||||
"id": "column.public"
|
"id": "column.public"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Toots",
|
||||||
|
"id": "timeline.posts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Media",
|
||||||
|
"id": "timeline.media"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
"defaultMessage": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
||||||
"id": "empty_column.public"
|
"id": "empty_column.public"
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Add media",
|
"upload_button.label": "Add media",
|
||||||
|
|
|
@ -284,6 +284,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Add media",
|
"upload_button.label": "Add media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Loka tempolinio",
|
"tabs_bar.local_timeline": "Loka tempolinio",
|
||||||
"tabs_bar.notifications": "Sciigoj",
|
"tabs_bar.notifications": "Sciigoj",
|
||||||
"tabs_bar.search": "Serĉi",
|
"tabs_bar.search": "Serĉi",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
|
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
|
||||||
"upload_area.title": "Altreni kaj lasi por alŝuti",
|
"upload_area.title": "Altreni kaj lasi por alŝuti",
|
||||||
"upload_button.label": "Aldoni aŭdovidaĵon",
|
"upload_button.label": "Aldoni aŭdovidaĵon",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificaciones",
|
"tabs_bar.notifications": "Notificaciones",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
||||||
"upload_area.title": "Arrastra y suelta para subir",
|
"upload_area.title": "Arrastra y suelta para subir",
|
||||||
"upload_button.label": "Subir multimedia",
|
"upload_button.label": "Subir multimedia",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Add media",
|
"upload_button.label": "Add media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "محلی",
|
"tabs_bar.local_timeline": "محلی",
|
||||||
"tabs_bar.notifications": "اعلانها",
|
"tabs_bar.notifications": "اعلانها",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.",
|
"ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.",
|
||||||
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
||||||
"upload_button.label": "افزودن تصویر",
|
"upload_button.label": "افزودن تصویر",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Paikallinen",
|
"tabs_bar.local_timeline": "Paikallinen",
|
||||||
"tabs_bar.notifications": "Ilmoitukset",
|
"tabs_bar.notifications": "Ilmoitukset",
|
||||||
"tabs_bar.search": "Hae",
|
"tabs_bar.search": "Hae",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
|
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
|
||||||
"upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
|
"upload_area.title": "Lataa raahaamalla ja pudottamalla tähän",
|
||||||
"upload_button.label": "Lisää mediaa",
|
"upload_button.label": "Lisää mediaa",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Fil public local",
|
"tabs_bar.local_timeline": "Fil public local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Chercher",
|
"tabs_bar.search": "Chercher",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
|
"ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.",
|
||||||
"upload_area.title": "Glissez et déposez pour envoyer",
|
"upload_area.title": "Glissez et déposez pour envoyer",
|
||||||
"upload_button.label": "Joindre un média",
|
"upload_button.label": "Joindre un média",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificacións",
|
"tabs_bar.notifications": "Notificacións",
|
||||||
"tabs_bar.search": "Buscar",
|
"tabs_bar.search": "Buscar",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "O borrador perderase se sae de Mastodon.",
|
"ui.beforeunload": "O borrador perderase se sae de Mastodon.",
|
||||||
"upload_area.title": "Arrastre e solte para subir",
|
"upload_area.title": "Arrastre e solte para subir",
|
||||||
"upload_button.label": "Engadir medios",
|
"upload_button.label": "Engadir medios",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "ציר זמן מקומי",
|
"tabs_bar.local_timeline": "ציר זמן מקומי",
|
||||||
"tabs_bar.notifications": "התראות",
|
"tabs_bar.notifications": "התראות",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
||||||
"upload_area.title": "ניתן להעלות על ידי Drag & drop",
|
"upload_area.title": "ניתן להעלות על ידי Drag & drop",
|
||||||
"upload_button.label": "הוספת מדיה",
|
"upload_button.label": "הוספת מדיה",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokalno",
|
"tabs_bar.local_timeline": "Lokalno",
|
||||||
"tabs_bar.notifications": "Notifikacije",
|
"tabs_bar.notifications": "Notifikacije",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Povuci i spusti kako bi uploadao",
|
"upload_area.title": "Povuci i spusti kako bi uploadao",
|
||||||
"upload_button.label": "Dodaj media",
|
"upload_button.label": "Dodaj media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Értesítések",
|
"tabs_bar.notifications": "Értesítések",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.",
|
"ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.",
|
||||||
"upload_area.title": "Húzza ide a feltöltéshez",
|
"upload_area.title": "Húzza ide a feltöltéshez",
|
||||||
"upload_button.label": "Média hozzáadása",
|
"upload_button.label": "Média hozzáadása",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Տեղական",
|
"tabs_bar.local_timeline": "Տեղական",
|
||||||
"tabs_bar.notifications": "Ծանուցումներ",
|
"tabs_bar.notifications": "Ծանուցումներ",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
||||||
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
|
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
|
||||||
"upload_button.label": "Ավելացնել մեդիա",
|
"upload_button.label": "Ավելացնել մեդիա",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokal",
|
"tabs_bar.local_timeline": "Lokal",
|
||||||
"tabs_bar.notifications": "Notifikasi",
|
"tabs_bar.notifications": "Notifikasi",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
|
"ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
|
||||||
"upload_area.title": "Seret & lepaskan untuk mengunggah",
|
"upload_area.title": "Seret & lepaskan untuk mengunggah",
|
||||||
"upload_button.label": "Tambahkan media",
|
"upload_button.label": "Tambahkan media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokala",
|
"tabs_bar.local_timeline": "Lokala",
|
||||||
"tabs_bar.notifications": "Savigi",
|
"tabs_bar.notifications": "Savigi",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Tranar faligar por kargar",
|
"upload_area.title": "Tranar faligar por kargar",
|
||||||
"upload_button.label": "Adjuntar kontenajo",
|
"upload_button.label": "Adjuntar kontenajo",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Locale",
|
"tabs_bar.local_timeline": "Locale",
|
||||||
"tabs_bar.notifications": "Notifiche",
|
"tabs_bar.notifications": "Notifiche",
|
||||||
"tabs_bar.search": "Cerca",
|
"tabs_bar.search": "Cerca",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
|
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
|
||||||
"upload_area.title": "Trascina per caricare",
|
"upload_area.title": "Trascina per caricare",
|
||||||
"upload_button.label": "Aggiungi file multimediale",
|
"upload_button.label": "Aggiungi file multimediale",
|
||||||
|
|
|
@ -284,6 +284,8 @@
|
||||||
"tabs_bar.local_timeline": "ローカル",
|
"tabs_bar.local_timeline": "ローカル",
|
||||||
"tabs_bar.notifications": "通知",
|
"tabs_bar.notifications": "通知",
|
||||||
"tabs_bar.search": "検索",
|
"tabs_bar.search": "検索",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
||||||
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
||||||
"upload_button.label": "メディアを追加",
|
"upload_button.label": "メディアを追加",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "로컬",
|
"tabs_bar.local_timeline": "로컬",
|
||||||
"tabs_bar.notifications": "알림",
|
"tabs_bar.notifications": "알림",
|
||||||
"tabs_bar.search": "검색",
|
"tabs_bar.search": "검색",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
||||||
"upload_area.title": "드래그 & 드롭으로 업로드",
|
"upload_area.title": "드래그 & 드롭으로 업로드",
|
||||||
"upload_button.label": "미디어 추가",
|
"upload_button.label": "미디어 추가",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokaal",
|
"tabs_bar.local_timeline": "Lokaal",
|
||||||
"tabs_bar.notifications": "Meldingen",
|
"tabs_bar.notifications": "Meldingen",
|
||||||
"tabs_bar.search": "Zoeken",
|
"tabs_bar.search": "Zoeken",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
|
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
|
||||||
"upload_area.title": "Hierin slepen om te uploaden",
|
"upload_area.title": "Hierin slepen om te uploaden",
|
||||||
"upload_button.label": "Media toevoegen",
|
"upload_button.label": "Media toevoegen",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokal",
|
"tabs_bar.local_timeline": "Lokal",
|
||||||
"tabs_bar.notifications": "Varslinger",
|
"tabs_bar.notifications": "Varslinger",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
|
"ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.",
|
||||||
"upload_area.title": "Dra og slipp for å laste opp",
|
"upload_area.title": "Dra og slipp for å laste opp",
|
||||||
"upload_button.label": "Legg til media",
|
"upload_button.label": "Legg til media",
|
||||||
|
|
|
@ -61,9 +61,9 @@
|
||||||
"column_subheading.navigation": "Navigacion",
|
"column_subheading.navigation": "Navigacion",
|
||||||
"column_subheading.settings": "Paramètres",
|
"column_subheading.settings": "Paramètres",
|
||||||
"compose_form.direct_message_warning": "Aqueste tut serà pas que visibile pel monde mencionat.",
|
"compose_form.direct_message_warning": "Aqueste tut serà pas que visibile pel monde mencionat.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Learn more",
|
"compose_form.direct_message_warning_learn_more": "Ne saber mai",
|
||||||
"compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap etiqueta estant qu’es pas listat. Òm pas cercar que los tuts publics per etiqueta.",
|
"compose_form.hashtag_warning": "Aqueste tut serà pas ligat a cap d’etiqueta estant qu’es pas listat. Òm pas cercar que los tuts publics per etiqueta.",
|
||||||
"compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo mond pòt vos sègre e veire los estatuts reservats als seguidors.",
|
"compose_form.lock_disclaimer": "Vòstre compte es pas {locked}. Tot lo monde pòt vos sègre e veire los estatuts reservats als seguidors.",
|
||||||
"compose_form.lock_disclaimer.lock": "clavat",
|
"compose_form.lock_disclaimer.lock": "clavat",
|
||||||
"compose_form.placeholder": "A de qué pensatz ?",
|
"compose_form.placeholder": "A de qué pensatz ?",
|
||||||
"compose_form.publish": "Tut",
|
"compose_form.publish": "Tut",
|
||||||
|
@ -187,11 +187,11 @@
|
||||||
"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",
|
||||||
"notifications.group": "{count} notifications",
|
"notifications.group": "{count} notificacions",
|
||||||
"onboarding.done": "Sortir",
|
"onboarding.done": "Sortir",
|
||||||
"onboarding.next": "Seguent",
|
"onboarding.next": "Seguent",
|
||||||
"onboarding.page_five.public_timelines": "Lo flux local mòstra los estatuts publics del monde de vòstra instància, aquí {domain}. Lo flux federat mòstra los estatuts publics de la gent que los de {domain} sègon. Son los fluxes publics, un bon biais de trobar de mond.",
|
"onboarding.page_five.public_timelines": "Lo flux local mòstra los estatuts publics del monde de vòstra instància, aquí {domain}. Lo flux federat mòstra los estatuts publics de la gent que los de {domain} sègon. Son los fluxes publics, un bon biais de trobar de mond.",
|
||||||
"onboarding.page_four.home": "Lo flux d’acuèlh mòstra los estatuts del mond que seguètz.",
|
"onboarding.page_four.home": "Lo flux d’acuèlh mòstra los estatuts del monde que seguètz.",
|
||||||
"onboarding.page_four.notifications": "La colomna de notificacions vos fa veire quand qualqu’un interagís amb vos.",
|
"onboarding.page_four.notifications": "La colomna de notificacions vos fa veire quand qualqu’un interagís amb vos.",
|
||||||
"onboarding.page_one.federation": "Mastodon es un malhum de servidors independents que comunican per construire un malhum mai larg. Òm los apèla instàncias.",
|
"onboarding.page_one.federation": "Mastodon es un malhum de servidors independents que comunican per construire un malhum mai larg. Òm los apèla instàncias.",
|
||||||
"onboarding.page_one.full_handle": "Vòstre escais-nom complèt",
|
"onboarding.page_one.full_handle": "Vòstre escais-nom complèt",
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
"onboarding.page_six.read_guidelines": "Mercés de legir la {guidelines} de {domain} !",
|
"onboarding.page_six.read_guidelines": "Mercés de legir la {guidelines} de {domain} !",
|
||||||
"onboarding.page_six.various_app": "aplicacions per mobil",
|
"onboarding.page_six.various_app": "aplicacions per mobil",
|
||||||
"onboarding.page_three.profile": "Modificatz vòstre perfil per cambiar vòstre avatar, bio e escais-nom. I a enlà totas las preferéncias.",
|
"onboarding.page_three.profile": "Modificatz vòstre perfil per cambiar vòstre avatar, bio e escais-nom. I a enlà totas las preferéncias.",
|
||||||
"onboarding.page_three.search": "Emplegatz la barra de recèrca per trobar de mond e engachatz las etiquetas coma {illustration} e {introductions}. Per trobar una persona d’una autra instància, picatz son identificant complèt.",
|
"onboarding.page_three.search": "Emplegatz la barra de recèrca per trobar de monde e engachatz las etiquetas coma {illustration} e {introductions}. Per trobar una persona d’una autra instància, picatz son identificant complèt.",
|
||||||
"onboarding.page_two.compose": "Escrivètz un estatut dempuèi la colomna per compausar. Podètz mandar un imatge, cambiar la confidencialitat e ajustar un avertiment amb las icònas cai-jos.",
|
"onboarding.page_two.compose": "Escrivètz un estatut dempuèi la colomna per compausar. Podètz mandar un imatge, cambiar la confidencialitat e ajustar un avertiment amb las icònas cai-jos.",
|
||||||
"onboarding.skip": "Passar",
|
"onboarding.skip": "Passar",
|
||||||
"privacy.change": "Ajustar la confidencialitat del messatge",
|
"privacy.change": "Ajustar la confidencialitat del messatge",
|
||||||
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Flux public local",
|
"tabs_bar.local_timeline": "Flux public local",
|
||||||
"tabs_bar.notifications": "Notificacions",
|
"tabs_bar.notifications": "Notificacions",
|
||||||
"tabs_bar.search": "Recèrcas",
|
"tabs_bar.search": "Recèrcas",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
|
"ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.",
|
||||||
"upload_area.title": "Lisatz e depausatz per mandar",
|
"upload_area.title": "Lisatz e depausatz per mandar",
|
||||||
"upload_button.label": "Ajustar un mèdia",
|
"upload_button.label": "Ajustar un mèdia",
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
"column_subheading.navigation": "Nawigacja",
|
"column_subheading.navigation": "Nawigacja",
|
||||||
"column_subheading.settings": "Ustawienia",
|
"column_subheading.settings": "Ustawienia",
|
||||||
"compose_form.direct_message_warning": "Ten wpis będzie widoczny tylko dla wszystkich wspomnianych użytkowników.",
|
"compose_form.direct_message_warning": "Ten wpis będzie widoczny tylko dla wszystkich wspomnianych użytkowników.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Learn more",
|
"compose_form.direct_message_warning_learn_more": "Dowiedz się więcej",
|
||||||
"compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hashtagami, ponieważ jest oznaczony jako niewidoczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hashtagów.",
|
"compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hashtagami, ponieważ jest oznaczony jako niewidoczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hashtagów.",
|
||||||
"compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię śledzi, może wyświetlać Twoje wpisy przeznaczone tylko dla śledzących.",
|
"compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię śledzi, może wyświetlać Twoje wpisy przeznaczone tylko dla śledzących.",
|
||||||
"compose_form.lock_disclaimer.lock": "zablokowane",
|
"compose_form.lock_disclaimer.lock": "zablokowane",
|
||||||
|
@ -191,7 +191,7 @@
|
||||||
"notifications.column_settings.reblog": "Podbicia:",
|
"notifications.column_settings.reblog": "Podbicia:",
|
||||||
"notifications.column_settings.show": "Pokaż w kolumnie",
|
"notifications.column_settings.show": "Pokaż w kolumnie",
|
||||||
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
"notifications.column_settings.sound": "Odtwarzaj dźwięk",
|
||||||
"notifications.group": "{count} notifications",
|
"notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}",
|
||||||
"onboarding.done": "Gotowe",
|
"onboarding.done": "Gotowe",
|
||||||
"onboarding.next": "Dalej",
|
"onboarding.next": "Dalej",
|
||||||
"onboarding.page_five.public_timelines": "Lokalna oś czasu zawiera wszystkie publiczne wpisy z {domain}. Globalna oś czasu wyświetla publiczne wpisy śledzonych przez członków {domain}. Są to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.",
|
"onboarding.page_five.public_timelines": "Lokalna oś czasu zawiera wszystkie publiczne wpisy z {domain}. Globalna oś czasu wyświetla publiczne wpisy śledzonych przez członków {domain}. Są to publiczne osie czasu – najlepszy sposób na poznanie nowych osób.",
|
||||||
|
@ -284,6 +284,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokalne",
|
"tabs_bar.local_timeline": "Lokalne",
|
||||||
"tabs_bar.notifications": "Powiadomienia",
|
"tabs_bar.notifications": "Powiadomienia",
|
||||||
"tabs_bar.search": "Szukaj",
|
"tabs_bar.search": "Szukaj",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
|
"ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.",
|
||||||
"upload_area.title": "Przeciągnij i upuść aby wysłać",
|
"upload_area.title": "Przeciągnij i upuść aby wysłać",
|
||||||
"upload_button.label": "Dodaj zawartość multimedialną",
|
"upload_button.label": "Dodaj zawartość multimedialną",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificações",
|
"tabs_bar.notifications": "Notificações",
|
||||||
"tabs_bar.search": "Buscar",
|
"tabs_bar.search": "Buscar",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
|
"ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.",
|
||||||
"upload_area.title": "Arraste e solte para enviar",
|
"upload_area.title": "Arraste e solte para enviar",
|
||||||
"upload_button.label": "Adicionar mídia",
|
"upload_button.label": "Adicionar mídia",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notificações",
|
"tabs_bar.notifications": "Notificações",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "O teu rascunho vai ser perdido se abandonares o Mastodon.",
|
"ui.beforeunload": "O teu rascunho vai ser perdido se abandonares o Mastodon.",
|
||||||
"upload_area.title": "Arraste e solte para enviar",
|
"upload_area.title": "Arraste e solte para enviar",
|
||||||
"upload_button.label": "Adicionar media",
|
"upload_button.label": "Adicionar media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Локальная",
|
"tabs_bar.local_timeline": "Локальная",
|
||||||
"tabs_bar.notifications": "Уведомления",
|
"tabs_bar.notifications": "Уведомления",
|
||||||
"tabs_bar.search": "Поиск",
|
"tabs_bar.search": "Поиск",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
||||||
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
||||||
"upload_button.label": "Добавить медиаконтент",
|
"upload_button.label": "Добавить медиаконтент",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokálna",
|
"tabs_bar.local_timeline": "Lokálna",
|
||||||
"tabs_bar.notifications": "Notifikácie",
|
"tabs_bar.notifications": "Notifikácie",
|
||||||
"tabs_bar.search": "Hľadaj",
|
"tabs_bar.search": "Hľadaj",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Čo máte rozpísané sa stratí, ak opustíte Mastodon.",
|
"ui.beforeunload": "Čo máte rozpísané sa stratí, ak opustíte Mastodon.",
|
||||||
"upload_area.title": "Ťahaj a pusti pre nahratie",
|
"upload_area.title": "Ťahaj a pusti pre nahratie",
|
||||||
"upload_button.label": "Pridať médiá",
|
"upload_button.label": "Pridať médiá",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokalno",
|
"tabs_bar.local_timeline": "Lokalno",
|
||||||
"tabs_bar.notifications": "Obvestila",
|
"tabs_bar.notifications": "Obvestila",
|
||||||
"tabs_bar.search": "Poišči",
|
"tabs_bar.search": "Poišči",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.",
|
"ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.",
|
||||||
"upload_area.title": "Povlecite in spustite za pošiljanje",
|
"upload_area.title": "Povlecite in spustite za pošiljanje",
|
||||||
"upload_button.label": "Dodaj medij",
|
"upload_button.label": "Dodaj medij",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokalno",
|
"tabs_bar.local_timeline": "Lokalno",
|
||||||
"tabs_bar.notifications": "Obaveštenja",
|
"tabs_bar.notifications": "Obaveštenja",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.",
|
"ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.",
|
||||||
"upload_area.title": "Prevucite ovde da otpremite",
|
"upload_area.title": "Prevucite ovde da otpremite",
|
||||||
"upload_button.label": "Dodaj multimediju",
|
"upload_button.label": "Dodaj multimediju",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Локално",
|
"tabs_bar.local_timeline": "Локално",
|
||||||
"tabs_bar.notifications": "Обавештења",
|
"tabs_bar.notifications": "Обавештења",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
|
"ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
|
||||||
"upload_area.title": "Превуците овде да отпремите",
|
"upload_area.title": "Превуците овде да отпремите",
|
||||||
"upload_button.label": "Додај мултимедију",
|
"upload_button.label": "Додај мултимедију",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Lokal",
|
"tabs_bar.local_timeline": "Lokal",
|
||||||
"tabs_bar.notifications": "Meddelanden",
|
"tabs_bar.notifications": "Meddelanden",
|
||||||
"tabs_bar.search": "Sök",
|
"tabs_bar.search": "Sök",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.",
|
"ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.",
|
||||||
"upload_area.title": "Dra & släpp för att ladda upp",
|
"upload_area.title": "Dra & släpp för att ladda upp",
|
||||||
"upload_button.label": "Lägg till media",
|
"upload_button.label": "Lägg till media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Add media",
|
"upload_button.label": "Add media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Drag & drop to upload",
|
"upload_area.title": "Drag & drop to upload",
|
||||||
"upload_button.label": "Add media",
|
"upload_button.label": "Add media",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Yerel",
|
"tabs_bar.local_timeline": "Yerel",
|
||||||
"tabs_bar.notifications": "Bildirimler",
|
"tabs_bar.notifications": "Bildirimler",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Upload için sürükle bırak yapınız",
|
"upload_area.title": "Upload için sürükle bırak yapınız",
|
||||||
"upload_button.label": "Görsel ekle",
|
"upload_button.label": "Görsel ekle",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "Локальна",
|
"tabs_bar.local_timeline": "Локальна",
|
||||||
"tabs_bar.notifications": "Сповіщення",
|
"tabs_bar.notifications": "Сповіщення",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
"upload_area.title": "Перетягніть сюди, щоб завантажити",
|
"upload_area.title": "Перетягніть сюди, щоб завантажити",
|
||||||
"upload_button.label": "Додати медіаконтент",
|
"upload_button.label": "Додати медіаконтент",
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"account.badges.bot": "Bot",
|
"account.badges.bot": "机器人",
|
||||||
"account.block": "屏蔽 @{name}",
|
"account.block": "屏蔽 @{name}",
|
||||||
"account.block_domain": "隐藏来自 {domain} 的内容",
|
"account.block_domain": "隐藏来自 {domain} 的内容",
|
||||||
"account.blocked": "Blocked",
|
"account.blocked": "已屏蔽",
|
||||||
"account.direct": "Direct Message @{name}",
|
"account.direct": "发送私信给 @{name}",
|
||||||
"account.disclaimer_full": "此处显示的信息可能不是全部内容。",
|
"account.disclaimer_full": "此处显示的信息可能不是全部内容。",
|
||||||
"account.domain_blocked": "Domain hidden",
|
"account.domain_blocked": "网站已屏蔽",
|
||||||
"account.edit_profile": "修改个人资料",
|
"account.edit_profile": "修改个人资料",
|
||||||
"account.follow": "关注",
|
"account.follow": "关注",
|
||||||
"account.followers": "关注者",
|
"account.followers": "关注者",
|
||||||
|
@ -17,9 +17,9 @@
|
||||||
"account.moved_to": "{name} 已经迁移到:",
|
"account.moved_to": "{name} 已经迁移到:",
|
||||||
"account.mute": "隐藏 @{name}",
|
"account.mute": "隐藏 @{name}",
|
||||||
"account.mute_notifications": "隐藏来自 @{name} 的通知",
|
"account.mute_notifications": "隐藏来自 @{name} 的通知",
|
||||||
"account.muted": "Muted",
|
"account.muted": "已隐藏",
|
||||||
"account.posts": "嘟文",
|
"account.posts": "嘟文",
|
||||||
"account.posts_with_replies": "Toots with replies",
|
"account.posts_with_replies": "嘟文和回复",
|
||||||
"account.report": "举报 @{name}",
|
"account.report": "举报 @{name}",
|
||||||
"account.requested": "正在等待对方同意。点击以取消发送关注请求",
|
"account.requested": "正在等待对方同意。点击以取消发送关注请求",
|
||||||
"account.share": "分享 @{name} 的个人资料",
|
"account.share": "分享 @{name} 的个人资料",
|
||||||
|
@ -30,8 +30,8 @@
|
||||||
"account.unmute": "不再隐藏 @{name}",
|
"account.unmute": "不再隐藏 @{name}",
|
||||||
"account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
|
"account.unmute_notifications": "不再隐藏来自 @{name} 的通知",
|
||||||
"account.view_full_profile": "查看完整资料",
|
"account.view_full_profile": "查看完整资料",
|
||||||
"alert.unexpected.message": "An unexpected error occurred.",
|
"alert.unexpected.message": "发生了意外错误。",
|
||||||
"alert.unexpected.title": "Oops!",
|
"alert.unexpected.title": "哎呀!",
|
||||||
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
|
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
|
||||||
"bundle_column_error.body": "载入这个组件时发生了错误。",
|
"bundle_column_error.body": "载入这个组件时发生了错误。",
|
||||||
"bundle_column_error.retry": "重试",
|
"bundle_column_error.retry": "重试",
|
||||||
|
@ -41,8 +41,8 @@
|
||||||
"bundle_modal_error.retry": "重试",
|
"bundle_modal_error.retry": "重试",
|
||||||
"column.blocks": "屏蔽用户",
|
"column.blocks": "屏蔽用户",
|
||||||
"column.community": "本站时间轴",
|
"column.community": "本站时间轴",
|
||||||
"column.direct": "Direct messages",
|
"column.direct": "私信",
|
||||||
"column.domain_blocks": "Hidden domains",
|
"column.domain_blocks": "已屏蔽的网站",
|
||||||
"column.favourites": "收藏过的嘟文",
|
"column.favourites": "收藏过的嘟文",
|
||||||
"column.follow_requests": "关注请求",
|
"column.follow_requests": "关注请求",
|
||||||
"column.home": "主页",
|
"column.home": "主页",
|
||||||
|
@ -60,18 +60,18 @@
|
||||||
"column_header.unpin": "取消固定",
|
"column_header.unpin": "取消固定",
|
||||||
"column_subheading.navigation": "导航",
|
"column_subheading.navigation": "导航",
|
||||||
"column_subheading.settings": "设置",
|
"column_subheading.settings": "设置",
|
||||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
"compose_form.direct_message_warning": "这条嘟文仅对所有被提及的用户可见。",
|
||||||
"compose_form.direct_message_warning_learn_more": "Learn more",
|
"compose_form.direct_message_warning_learn_more": "了解详情",
|
||||||
"compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。",
|
"compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。",
|
||||||
"compose_form.lock_disclaimer": "你的帐户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。",
|
"compose_form.lock_disclaimer": "你的帐户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。",
|
||||||
"compose_form.lock_disclaimer.lock": "开启保护",
|
"compose_form.lock_disclaimer.lock": "开启保护",
|
||||||
"compose_form.placeholder": "在想啥?",
|
"compose_form.placeholder": "在想啥?",
|
||||||
"compose_form.publish": "嘟嘟",
|
"compose_form.publish": "嘟嘟",
|
||||||
"compose_form.publish_loud": "{publish}!",
|
"compose_form.publish_loud": "{publish}!",
|
||||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
"compose_form.sensitive.marked": "媒体已被标记为敏感内容",
|
||||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
"compose_form.sensitive.unmarked": "媒体未被标记为敏感内容",
|
||||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
"compose_form.spoiler.marked": "正文已被折叠在警告信息之后",
|
||||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
"compose_form.spoiler.unmarked": "正文未被折叠",
|
||||||
"compose_form.spoiler_placeholder": "折叠部分的警告消息",
|
"compose_form.spoiler_placeholder": "折叠部分的警告消息",
|
||||||
"confirmation_modal.cancel": "取消",
|
"confirmation_modal.cancel": "取消",
|
||||||
"confirmations.block.confirm": "屏蔽",
|
"confirmations.block.confirm": "屏蔽",
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
"emoji_button.symbols": "符号",
|
"emoji_button.symbols": "符号",
|
||||||
"emoji_button.travel": "旅行和地点",
|
"emoji_button.travel": "旅行和地点",
|
||||||
"empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!",
|
"empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!",
|
||||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
"empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。",
|
||||||
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
|
"empty_column.hashtag": "这个话题标签下暂时没有内容。",
|
||||||
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
|
"empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。",
|
||||||
"empty_column.home.public_timeline": "公共时间轴",
|
"empty_column.home.public_timeline": "公共时间轴",
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
"keyboard_shortcuts.mention": "提及嘟文作者",
|
"keyboard_shortcuts.mention": "提及嘟文作者",
|
||||||
"keyboard_shortcuts.reply": "回复嘟文",
|
"keyboard_shortcuts.reply": "回复嘟文",
|
||||||
"keyboard_shortcuts.search": "选择搜索框",
|
"keyboard_shortcuts.search": "选择搜索框",
|
||||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
"keyboard_shortcuts.toggle_hidden": "显示或隐藏被折叠的正文",
|
||||||
"keyboard_shortcuts.toot": "发送新嘟文",
|
"keyboard_shortcuts.toot": "发送新嘟文",
|
||||||
"keyboard_shortcuts.unfocus": "取消输入",
|
"keyboard_shortcuts.unfocus": "取消输入",
|
||||||
"keyboard_shortcuts.up": "在列表中让光标上移",
|
"keyboard_shortcuts.up": "在列表中让光标上移",
|
||||||
|
@ -159,8 +159,8 @@
|
||||||
"mute_modal.hide_notifications": "同时隐藏来自这个用户的通知",
|
"mute_modal.hide_notifications": "同时隐藏来自这个用户的通知",
|
||||||
"navigation_bar.blocks": "被屏蔽的用户",
|
"navigation_bar.blocks": "被屏蔽的用户",
|
||||||
"navigation_bar.community_timeline": "本站时间轴",
|
"navigation_bar.community_timeline": "本站时间轴",
|
||||||
"navigation_bar.direct": "Direct messages",
|
"navigation_bar.direct": "私信",
|
||||||
"navigation_bar.domain_blocks": "Hidden domains",
|
"navigation_bar.domain_blocks": "已屏蔽的网站",
|
||||||
"navigation_bar.edit_profile": "修改个人资料",
|
"navigation_bar.edit_profile": "修改个人资料",
|
||||||
"navigation_bar.favourites": "收藏的内容",
|
"navigation_bar.favourites": "收藏的内容",
|
||||||
"navigation_bar.follow_requests": "关注请求",
|
"navigation_bar.follow_requests": "关注请求",
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
"notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:",
|
"notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:",
|
||||||
"notifications.column_settings.show": "在通知栏显示",
|
"notifications.column_settings.show": "在通知栏显示",
|
||||||
"notifications.column_settings.sound": "播放音效",
|
"notifications.column_settings.sound": "播放音效",
|
||||||
"notifications.group": "{count} notifications",
|
"notifications.group": "{count} 条通知",
|
||||||
"onboarding.done": "出发!",
|
"onboarding.done": "出发!",
|
||||||
"onboarding.next": "下一步",
|
"onboarding.next": "下一步",
|
||||||
"onboarding.page_five.public_timelines": "“本站时间轴”显示的是由本站({domain})用户发布的所有公开嘟文。“跨站公共时间轴”显示的的是由本站用户关注对象所发布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。",
|
"onboarding.page_five.public_timelines": "“本站时间轴”显示的是由本站({domain})用户发布的所有公开嘟文。“跨站公共时间轴”显示的的是由本站用户关注对象所发布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。",
|
||||||
|
@ -226,29 +226,29 @@
|
||||||
"relative_time.minutes": "{number}分",
|
"relative_time.minutes": "{number}分",
|
||||||
"relative_time.seconds": "{number}秒",
|
"relative_time.seconds": "{number}秒",
|
||||||
"reply_indicator.cancel": "取消",
|
"reply_indicator.cancel": "取消",
|
||||||
"report.forward": "Forward to {target}",
|
"report.forward": "发送举报至 {target}",
|
||||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
"report.forward_hint": "这名用户来自另一个实例。是否要向那个实例发送一条匿名的举报?",
|
||||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
"report.hint": "举报将会发送给你所在实例的监察员。你可以在下面填写举报这个用户的理由:",
|
||||||
"report.placeholder": "附言",
|
"report.placeholder": "附言",
|
||||||
"report.submit": "提交",
|
"report.submit": "提交",
|
||||||
"report.target": "举报 {target}",
|
"report.target": "举报 {target}",
|
||||||
"search.placeholder": "搜索",
|
"search.placeholder": "搜索",
|
||||||
"search_popout.search_format": "高级搜索格式",
|
"search_popout.search_format": "高级搜索格式",
|
||||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
"search_popout.tips.full_text": "输入其他内容将会返回所有你撰写、收藏、转嘟过或提及到你的嘟文,同时也会在用户名、昵称和话题标签中进行搜索。",
|
||||||
"search_popout.tips.hashtag": "话题标签",
|
"search_popout.tips.hashtag": "话题标签",
|
||||||
"search_popout.tips.status": "嘟文",
|
"search_popout.tips.status": "嘟文",
|
||||||
"search_popout.tips.text": "使用普通字符进行搜索将会返回昵称、用户名和话题标签",
|
"search_popout.tips.text": "输入其他内容将会返回昵称、用户名和话题标签",
|
||||||
"search_popout.tips.user": "用户",
|
"search_popout.tips.user": "用户",
|
||||||
"search_results.accounts": "People",
|
"search_results.accounts": "用户",
|
||||||
"search_results.hashtags": "Hashtags",
|
"search_results.hashtags": "话题标签",
|
||||||
"search_results.statuses": "Toots",
|
"search_results.statuses": "嘟文",
|
||||||
"search_results.total": "共 {count, number} 个结果",
|
"search_results.total": "共 {count, number} 个结果",
|
||||||
"standalone.public_title": "大家都在干啥?",
|
"standalone.public_title": "大家都在干啥?",
|
||||||
"status.block": "屏蔽 @{name}",
|
"status.block": "屏蔽 @{name}",
|
||||||
"status.cancel_reblog_private": "Unboost",
|
"status.cancel_reblog_private": "取消转嘟",
|
||||||
"status.cannot_reblog": "无法转嘟这条嘟文",
|
"status.cannot_reblog": "无法转嘟这条嘟文",
|
||||||
"status.delete": "删除",
|
"status.delete": "删除",
|
||||||
"status.direct": "Direct message @{name}",
|
"status.direct": "发送私信给 @{name}",
|
||||||
"status.embed": "嵌入",
|
"status.embed": "嵌入",
|
||||||
"status.favourite": "收藏",
|
"status.favourite": "收藏",
|
||||||
"status.load_more": "加载更多",
|
"status.load_more": "加载更多",
|
||||||
|
@ -259,9 +259,9 @@
|
||||||
"status.mute_conversation": "隐藏此对话",
|
"status.mute_conversation": "隐藏此对话",
|
||||||
"status.open": "展开嘟文",
|
"status.open": "展开嘟文",
|
||||||
"status.pin": "在个人资料页面置顶",
|
"status.pin": "在个人资料页面置顶",
|
||||||
"status.pinned": "Pinned toot",
|
"status.pinned": "置顶嘟文",
|
||||||
"status.reblog": "转嘟",
|
"status.reblog": "转嘟",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "转嘟给原有关注者",
|
||||||
"status.reblogged_by": "{name} 转嘟了",
|
"status.reblogged_by": "{name} 转嘟了",
|
||||||
"status.reply": "回复",
|
"status.reply": "回复",
|
||||||
"status.replyAll": "回复所有人",
|
"status.replyAll": "回复所有人",
|
||||||
|
@ -270,21 +270,23 @@
|
||||||
"status.sensitive_warning": "敏感内容",
|
"status.sensitive_warning": "敏感内容",
|
||||||
"status.share": "分享",
|
"status.share": "分享",
|
||||||
"status.show_less": "隐藏内容",
|
"status.show_less": "隐藏内容",
|
||||||
"status.show_less_all": "Show less for all",
|
"status.show_less_all": "隐藏所有内容",
|
||||||
"status.show_more": "显示内容",
|
"status.show_more": "显示内容",
|
||||||
"status.show_more_all": "Show more for all",
|
"status.show_more_all": "显示所有内容",
|
||||||
"status.unmute_conversation": "不再隐藏此对话",
|
"status.unmute_conversation": "不再隐藏此对话",
|
||||||
"status.unpin": "在个人资料页面取消置顶",
|
"status.unpin": "在个人资料页面取消置顶",
|
||||||
"tabs_bar.federated_timeline": "跨站",
|
"tabs_bar.federated_timeline": "跨站",
|
||||||
"tabs_bar.home": "主页",
|
"tabs_bar.home": "主页",
|
||||||
"tabs_bar.local_timeline": "本站",
|
"tabs_bar.local_timeline": "本站",
|
||||||
"tabs_bar.notifications": "通知",
|
"tabs_bar.notifications": "通知",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "搜索",
|
||||||
|
"timeline.media": "媒体",
|
||||||
|
"timeline.posts": "嘟文",
|
||||||
"ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
|
"ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
|
||||||
"upload_area.title": "将文件拖放到此处开始上传",
|
"upload_area.title": "将文件拖放到此处开始上传",
|
||||||
"upload_button.label": "上传媒体文件",
|
"upload_button.label": "上传媒体文件",
|
||||||
"upload_form.description": "为视觉障碍人士添加文字说明",
|
"upload_form.description": "为视觉障碍人士添加文字说明",
|
||||||
"upload_form.focus": "Crop",
|
"upload_form.focus": "剪裁",
|
||||||
"upload_form.undo": "取消上传",
|
"upload_form.undo": "取消上传",
|
||||||
"upload_progress.label": "上传中…",
|
"upload_progress.label": "上传中…",
|
||||||
"video.close": "关闭视频",
|
"video.close": "关闭视频",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "本站",
|
"tabs_bar.local_timeline": "本站",
|
||||||
"tabs_bar.notifications": "通知",
|
"tabs_bar.notifications": "通知",
|
||||||
"tabs_bar.search": "搜尋",
|
"tabs_bar.search": "搜尋",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
|
"ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
|
||||||
"upload_area.title": "將檔案拖放至此上載",
|
"upload_area.title": "將檔案拖放至此上載",
|
||||||
"upload_button.label": "上載媒體檔案",
|
"upload_button.label": "上載媒體檔案",
|
||||||
|
|
|
@ -280,6 +280,8 @@
|
||||||
"tabs_bar.local_timeline": "本地",
|
"tabs_bar.local_timeline": "本地",
|
||||||
"tabs_bar.notifications": "通知",
|
"tabs_bar.notifications": "通知",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Search",
|
||||||
|
"timeline.media": "Media",
|
||||||
|
"timeline.posts": "Toots",
|
||||||
"ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
|
"ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
|
||||||
"upload_area.title": "拖放來上傳",
|
"upload_area.title": "拖放來上傳",
|
||||||
"upload_button.label": "增加媒體",
|
"upload_button.label": "增加媒體",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import IntlMessageFormat from 'intl-messageformat';
|
import IntlMessageFormat from 'intl-messageformat';
|
||||||
import locales from './web_push_locales';
|
import locales from './web_push_locales';
|
||||||
|
import { unescape } from 'lodash';
|
||||||
|
|
||||||
const MAX_NOTIFICATIONS = 5;
|
const MAX_NOTIFICATIONS = 5;
|
||||||
const GROUP_TAG = 'tag';
|
const GROUP_TAG = 'tag';
|
||||||
|
@ -59,6 +60,9 @@ const fetchFromApi = (path, method, accessToken) => {
|
||||||
const formatMessage = (messageId, locale, values = {}) =>
|
const formatMessage = (messageId, locale, values = {}) =>
|
||||||
(new IntlMessageFormat(locales[locale][messageId], locale)).format(values);
|
(new IntlMessageFormat(locales[locale][messageId], locale)).format(values);
|
||||||
|
|
||||||
|
const htmlToPlainText = html =>
|
||||||
|
unescape(html.replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n').replace(/<[^>]*>/g, ''));
|
||||||
|
|
||||||
const handlePush = (event) => {
|
const handlePush = (event) => {
|
||||||
const { access_token, notification_id, preferred_locale, title, body, icon } = event.data.json();
|
const { access_token, notification_id, preferred_locale, title, body, icon } = event.data.json();
|
||||||
|
|
||||||
|
@ -76,7 +80,7 @@ const handlePush = (event) => {
|
||||||
const options = {};
|
const options = {};
|
||||||
|
|
||||||
options.title = formatMessage(`notification.${notification.type}`, preferred_locale, { name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username });
|
options.title = formatMessage(`notification.${notification.type}`, preferred_locale, { name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username });
|
||||||
options.body = notification.status && notification.status.content;
|
options.body = notification.status && htmlToPlainText(notification.status.content);
|
||||||
options.icon = notification.account.avatar_static;
|
options.icon = notification.account.avatar_static;
|
||||||
options.timestamp = notification.created_at && new Date(notification.created_at);
|
options.timestamp = notification.created_at && new Date(notification.created_at);
|
||||||
options.tag = notification.id;
|
options.tag = notification.id;
|
||||||
|
@ -85,10 +89,10 @@ const handlePush = (event) => {
|
||||||
options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` };
|
options.data = { access_token, preferred_locale, id: notification.status ? notification.status.id : notification.account.id, url: notification.status ? `/web/statuses/${notification.status.id}` : `/web/accounts/${notification.account.id}` };
|
||||||
|
|
||||||
if (notification.status && notification.status.sensitive) {
|
if (notification.status && notification.status.sensitive) {
|
||||||
options.data.hiddenBody = notification.status.content;
|
options.data.hiddenBody = htmlToPlainText(notification.status.content);
|
||||||
options.data.hiddenImage = notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url;
|
options.data.hiddenImage = notification.status.media_attachments.length > 0 && notification.status.media_attachments[0].preview_url;
|
||||||
|
|
||||||
options.body = undefined;
|
options.body = notification.status.spoiler_text;
|
||||||
options.image = undefined;
|
options.image = undefined;
|
||||||
options.actions = [actionExpand(preferred_locale)];
|
options.actions = [actionExpand(preferred_locale)];
|
||||||
} else if (notification.status) {
|
} else if (notification.status) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.card {
|
.card {
|
||||||
background-color: lighten($ui-base-color, 4%);
|
background-color: $base-shadow-color;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
|
|
|
@ -4737,6 +4737,8 @@ a.status-card {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.community-timeline__section-headline,
|
||||||
|
.public-timeline__section-headline,
|
||||||
.account__section-headline {
|
.account__section-headline {
|
||||||
background: darken($ui-base-color, 4%);
|
background: darken($ui-base-color, 4%);
|
||||||
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
border-bottom: 1px solid lighten($ui-base-color, 8%);
|
||||||
|
|
|
@ -81,6 +81,11 @@ class BatchedRemoveStatusService < BaseService
|
||||||
redis.publish('timeline:public', payload)
|
redis.publish('timeline:public', payload)
|
||||||
redis.publish('timeline:public:local', payload) if status.local?
|
redis.publish('timeline:public:local', payload) if status.local?
|
||||||
|
|
||||||
|
if status.media_attachments.any?
|
||||||
|
redis.publish('timeline:public:media', payload)
|
||||||
|
redis.publish('timeline:public:local:media', payload) if status.local?
|
||||||
|
end
|
||||||
|
|
||||||
@tags[status.id].each do |hashtag|
|
@tags[status.id].each do |hashtag|
|
||||||
redis.publish("timeline:hashtag:#{hashtag}", payload)
|
redis.publish("timeline:hashtag:#{hashtag}", payload)
|
||||||
redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local?
|
redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local?
|
||||||
|
|
|
@ -25,6 +25,7 @@ class FanOutOnWriteService < BaseService
|
||||||
return if status.reply? && status.in_reply_to_account_id != status.account_id
|
return if status.reply? && status.in_reply_to_account_id != status.account_id
|
||||||
|
|
||||||
deliver_to_public(status)
|
deliver_to_public(status)
|
||||||
|
deliver_to_media(status) if status.media_attachments.any?
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -85,6 +86,13 @@ class FanOutOnWriteService < BaseService
|
||||||
Redis.current.publish('timeline:public:local', @payload) if status.local?
|
Redis.current.publish('timeline:public:local', @payload) if status.local?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def deliver_to_media(status)
|
||||||
|
Rails.logger.debug "Delivering status #{status.id} to media timeline"
|
||||||
|
|
||||||
|
Redis.current.publish('timeline:public:media', @payload)
|
||||||
|
Redis.current.publish('timeline:public:local:media', @payload) if status.local?
|
||||||
|
end
|
||||||
|
|
||||||
def deliver_to_direct_timelines(status)
|
def deliver_to_direct_timelines(status)
|
||||||
Rails.logger.debug "Delivering status #{status.id} to direct timelines"
|
Rails.logger.debug "Delivering status #{status.id} to direct timelines"
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ class RemoveStatusService < BaseService
|
||||||
remove_reblogs
|
remove_reblogs
|
||||||
remove_from_hashtags
|
remove_from_hashtags
|
||||||
remove_from_public
|
remove_from_public
|
||||||
|
remove_from_media if status.media_attachments.any?
|
||||||
remove_from_direct if status.direct_visibility?
|
remove_from_direct if status.direct_visibility?
|
||||||
|
|
||||||
@status.destroy!
|
@status.destroy!
|
||||||
|
@ -131,6 +132,13 @@ class RemoveStatusService < BaseService
|
||||||
Redis.current.publish('timeline:public:local', @payload) if @status.local?
|
Redis.current.publish('timeline:public:local', @payload) if @status.local?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_from_media
|
||||||
|
return unless @status.public_visibility?
|
||||||
|
|
||||||
|
Redis.current.publish('timeline:public:media', @payload)
|
||||||
|
Redis.current.publish('timeline:public:local:media', @payload) if @status.local?
|
||||||
|
end
|
||||||
|
|
||||||
def remove_from_direct
|
def remove_from_direct
|
||||||
@mentions.each do |mention|
|
@mentions.each do |mention|
|
||||||
Redis.current.publish("timeline:direct:#{mention.account.id}", @payload) if mention.account.local?
|
Redis.current.publish("timeline:direct:#{mention.account.id}", @payload) if mention.account.local?
|
||||||
|
|
|
@ -115,5 +115,6 @@ zh-CN:
|
||||||
title: 需要 OAuth 认证
|
title: 需要 OAuth 认证
|
||||||
scopes:
|
scopes:
|
||||||
follow: 关注或屏蔽用户
|
follow: 关注或屏蔽用户
|
||||||
|
push: 接收你的帐户的推送通知
|
||||||
read: 读取你的帐户数据
|
read: 读取你的帐户数据
|
||||||
write: 为你发表嘟文
|
write: 为你发表嘟文
|
||||||
|
|
|
@ -785,6 +785,10 @@ en:
|
||||||
|
|
||||||
<p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
<p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
||||||
title: "%{instance} Terms of Service and Privacy Policy"
|
title: "%{instance} Terms of Service and Privacy Policy"
|
||||||
|
themes:
|
||||||
|
contrast: High contrast
|
||||||
|
default: Mastodon
|
||||||
|
mastodon-light: Mastodon (light)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%b %d, %Y, %H:%M"
|
default: "%b %d, %Y, %H:%M"
|
||||||
|
|
|
@ -697,6 +697,10 @@ fr:
|
||||||
sensitive_content: Contenu sensible
|
sensitive_content: Contenu sensible
|
||||||
terms:
|
terms:
|
||||||
title: "%{instance} Conditions d’utilisations et politique de confidentialité"
|
title: "%{instance} Conditions d’utilisations et politique de confidentialité"
|
||||||
|
themes:
|
||||||
|
contrast: Contraste élevé
|
||||||
|
default: Mastodon
|
||||||
|
mastodon-light: Mastodon (clair)
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%d %b %Y, %H:%M"
|
default: "%d %b %Y, %H:%M"
|
||||||
|
|
|
@ -40,9 +40,10 @@ oc:
|
||||||
following: Abonaments
|
following: Abonaments
|
||||||
media: Mèdias
|
media: Mèdias
|
||||||
moved_html: "%{name} a mudat a %{new_profile_link} :"
|
moved_html: "%{name} a mudat a %{new_profile_link} :"
|
||||||
|
network_hidden: Aquesta informacion es pas disponibla
|
||||||
nothing_here: I a pas res aquí !
|
nothing_here: I a pas res aquí !
|
||||||
people_followed_by: Lo mond que %{name} sèc
|
people_followed_by: Lo monde que %{name} sèc
|
||||||
people_who_follow: Lo mond que sègon %{name}
|
people_who_follow: Lo monde que sègon %{name}
|
||||||
posts: Tuts
|
posts: Tuts
|
||||||
posts_with_replies: Tuts e responsas
|
posts_with_replies: Tuts e responsas
|
||||||
remote_follow: Sègre a distància
|
remote_follow: Sègre a distància
|
||||||
|
@ -319,13 +320,13 @@ oc:
|
||||||
desc_html: Afichat sus las pagina d’acuèlh quand las inscripcions son tampadas.<br>Podètz utilizar de balisas HTML
|
desc_html: Afichat sus las pagina d’acuèlh quand las inscripcions son tampadas.<br>Podètz utilizar de balisas HTML
|
||||||
title: Messatge de barradura de las inscripcions
|
title: Messatge de barradura de las inscripcions
|
||||||
deletion:
|
deletion:
|
||||||
desc_html: Autorizar lo mond a suprimir lor compte
|
desc_html: Autorizar lo monde a suprimir lor compte
|
||||||
title: Possibilitat de suprimir lo compte
|
title: Possibilitat de suprimir lo compte
|
||||||
min_invite_role:
|
min_invite_role:
|
||||||
disabled: Degun
|
disabled: Degun
|
||||||
title: Autorizat amb invitacions
|
title: Autorizat amb invitacions
|
||||||
open:
|
open:
|
||||||
desc_html: Autorizar lo mond a se marcar
|
desc_html: Autorizar lo monde a se marcar
|
||||||
title: Inscripcions
|
title: Inscripcions
|
||||||
show_known_fediverse_at_about_page:
|
show_known_fediverse_at_about_page:
|
||||||
desc_html: Un còp activat mostrarà los tuts de totes los fediverse dins l’apercebut. Autrament mostrarà pas que los tuts locals.
|
desc_html: Un còp activat mostrarà los tuts de totes los fediverse dins l’apercebut. Autrament mostrarà pas que los tuts locals.
|
||||||
|
@ -359,7 +360,7 @@ oc:
|
||||||
failed_to_execute: Fracàs
|
failed_to_execute: Fracàs
|
||||||
media:
|
media:
|
||||||
title: Mèdia
|
title: Mèdia
|
||||||
no_media: Cap mèdia
|
no_media: Cap de mèdia
|
||||||
title: Estatuts del compte
|
title: Estatuts del compte
|
||||||
with_media: Amb mèdia
|
with_media: Amb mèdia
|
||||||
subscriptions:
|
subscriptions:
|
||||||
|
@ -549,7 +550,7 @@ oc:
|
||||||
storage: Mèdias gardats
|
storage: Mèdias gardats
|
||||||
followers:
|
followers:
|
||||||
domain: Domeni
|
domain: Domeni
|
||||||
explanation_html: Se volètz vos assegurar de la confidencialitat de vòstres estatuts, vos cal saber qual sèc vòstre compte. <strong>Vòstres estatuts privats son enviats a totas las instàncias qu’an de mond que vos sègon.</strong>. Benlèu que volètz repassar vòstra lista e tirar los seguidors s’avètz de dobtes tocant las politica de confidencialitat de lor instàncias.
|
explanation_html: Se volètz vos assegurar de la confidencialitat de vòstres estatuts, vos cal saber qual sèc vòstre compte. <strong>Vòstres estatuts privats son enviats a totas las instàncias qu’an de monde que vos sègon.</strong>. Benlèu que volètz repassar vòstra lista e tirar los seguidors s’avètz de dobtes tocant las politica de confidencialitat de lor instàncias.
|
||||||
followers_count: Nombre de seguidors
|
followers_count: Nombre de seguidors
|
||||||
lock_link: Clavar vòstre compte
|
lock_link: Clavar vòstre compte
|
||||||
purge: Tirar dels seguidors
|
purge: Tirar dels seguidors
|
||||||
|
@ -557,7 +558,7 @@ oc:
|
||||||
one: Soi a blocar los seguidors d’un domeni…
|
one: Soi a blocar los seguidors d’un domeni…
|
||||||
other: Soi a blocar los seguidors de %{count} domenis…
|
other: Soi a blocar los seguidors de %{count} domenis…
|
||||||
true_privacy_html: Mèfi que la <strong>vertadièra confidencialitat pòt solament èsser amb un chiframent del cap a la fin (end-to-end)</strong>.
|
true_privacy_html: Mèfi que la <strong>vertadièra confidencialitat pòt solament èsser amb un chiframent del cap a la fin (end-to-end)</strong>.
|
||||||
unlocked_warning_html: Tot lo mond pòt vos sègre e veire sulpic vòstres estatuts privats. %{lock_link} per poder repassar e regetar los seguidors.
|
unlocked_warning_html: Tot lo monde pòt vos sègre e veire sulpic vòstres estatuts privats. %{lock_link} per poder repassar e regetar los seguidors.
|
||||||
unlocked_warning_title: Vòstre compte es pas clavat
|
unlocked_warning_title: Vòstre compte es pas clavat
|
||||||
generic:
|
generic:
|
||||||
changes_saved_msg: Cambiaments ben realizats !
|
changes_saved_msg: Cambiaments ben realizats !
|
||||||
|
@ -567,12 +568,12 @@ oc:
|
||||||
one: I a quicòm que truca ! Mercés de corregir l’error çai-jos
|
one: I a quicòm que truca ! Mercés de corregir l’error çai-jos
|
||||||
other: I a quicòm que truca ! Mercés de corregir las %{count} errors çai-jos
|
other: I a quicòm que truca ! Mercés de corregir las %{count} errors çai-jos
|
||||||
imports:
|
imports:
|
||||||
preface: Podètz importar qualques donadas coma lo mond que seguètz o blocatz a-n aquesta instància d’un fichièr creat d’una autra instància.
|
preface: Podètz importar qualques donadas coma lo monde que seguètz o blocatz a-n aquesta instància d’un fichièr creat d’una autra instància.
|
||||||
success: Vòstras donadas son ben estadas mandadas e seràn tractadas tre que possible
|
success: Vòstras donadas son ben estadas mandadas e seràn tractadas tre que possible
|
||||||
types:
|
types:
|
||||||
blocking: Lista de blocatge
|
blocking: Lista de blocatge
|
||||||
following: Lista de mond que seguètz
|
following: Lista de monde que seguètz
|
||||||
muting: Lista de mond que volètz pas legir
|
muting: Lista de monde que volètz pas legir
|
||||||
upload: Importar
|
upload: Importar
|
||||||
in_memoriam_html: En Memòria.
|
in_memoriam_html: En Memòria.
|
||||||
invites:
|
invites:
|
||||||
|
@ -658,9 +659,9 @@ oc:
|
||||||
trillion: T
|
trillion: T
|
||||||
unit: ''
|
unit: ''
|
||||||
pagination:
|
pagination:
|
||||||
newer: Mai recent
|
newer: Mai recents
|
||||||
next: Seguent
|
next: Seguent
|
||||||
older: Mai ancian
|
older: Mai ancians
|
||||||
prev: Precedent
|
prev: Precedent
|
||||||
truncate: "…"
|
truncate: "…"
|
||||||
preferences:
|
preferences:
|
||||||
|
@ -692,7 +693,7 @@ oc:
|
||||||
micro_messenger: MicroMessenger
|
micro_messenger: MicroMessenger
|
||||||
nokia: Nokia S40 Ovi Browser
|
nokia: Nokia S40 Ovi Browser
|
||||||
opera: Opera
|
opera: Opera
|
||||||
otter: Autre
|
otter: Otter
|
||||||
phantom_js: PhantomJS
|
phantom_js: PhantomJS
|
||||||
qq: QQ Browser
|
qq: QQ Browser
|
||||||
safari: Safari
|
safari: Safari
|
||||||
|
@ -760,9 +761,9 @@ oc:
|
||||||
private: Seguidors solament
|
private: Seguidors solament
|
||||||
private_long: Mostrar pas qu’als seguidors
|
private_long: Mostrar pas qu’als seguidors
|
||||||
public: Public
|
public: Public
|
||||||
public_long: Tot lo mond pòt veire
|
public_long: Tot lo monde pòt veire
|
||||||
unlisted: Pas listat
|
unlisted: Pas listat
|
||||||
unlisted_long: Tot lo mond pòt veire mai serà pas visible sul flux public
|
unlisted_long: Tot lo monde pòt veire mai serà pas visible sul flux public
|
||||||
stream_entries:
|
stream_entries:
|
||||||
click_to_show: Clicatz per veire
|
click_to_show: Clicatz per veire
|
||||||
pinned: Tut penjat
|
pinned: Tut penjat
|
||||||
|
@ -788,7 +789,7 @@ oc:
|
||||||
recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar
|
recovery_codes_regenerated: Los còdis de recuperacion son ben estats tornats generar
|
||||||
recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. <strong>Gardatz los còdis en seguretat</strong>, per exemple, imprimissètz los e gardatz los amb vòstres documents importants.
|
recovery_instructions_html: Se vos arriba de perdre vòstre mobil, podètz utilizar un dels còdis de recuperacion cai-jos per poder tornar accedir a vòstre compte. <strong>Gardatz los còdis en seguretat</strong>, per exemple, imprimissètz los e gardatz los amb vòstres documents importants.
|
||||||
setup: Paramètres
|
setup: Paramètres
|
||||||
wrong_code: Lo còdi picat es invalid ! L’ora es la bona sul servidor e lo mobil ?
|
wrong_code: Lo còdi picat es invalid ! L’ora es bona sul servidor e lo mobil ?
|
||||||
user_mailer:
|
user_mailer:
|
||||||
backup_ready:
|
backup_ready:
|
||||||
explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament !
|
explanation: Avètz demandat una salvagarda complèta de vòstre compte Mastodon. Es prèsta per telecargament !
|
||||||
|
@ -806,9 +807,9 @@ oc:
|
||||||
review_preferences_step: Pensatz de configurar vòstras preferéncias, tal coma los corrièls que volètz recebrer o lo nivèl de confidencialitat de vòstres tuts per defaut. O se l’animacion vos dòna pas enveja de rendre, podètz activar la lectura automatica dels GIF.
|
review_preferences_step: Pensatz de configurar vòstras preferéncias, tal coma los corrièls que volètz recebrer o lo nivèl de confidencialitat de vòstres tuts per defaut. O se l’animacion vos dòna pas enveja de rendre, podètz activar la lectura automatica dels GIF.
|
||||||
subject: Benvengut a Mastodon
|
subject: Benvengut a Mastodon
|
||||||
tip_bridge_html: Se venètz de Twitter, podètz trobar vòstres amics sus Mastodon en utilizant l‘<a href="%{bridge_url}">aplicacion de Pont</a>. Aquò fonciona pas que s’utilizan lo Pont tanben !
|
tip_bridge_html: Se venètz de Twitter, podètz trobar vòstres amics sus Mastodon en utilizant l‘<a href="%{bridge_url}">aplicacion de Pont</a>. Aquò fonciona pas que s’utilizan lo Pont tanben !
|
||||||
tip_federated_timeline: Lo flux d’actualitat federat es una vista generala del malhum Mastodon. Mas aquò inclutz solament lo mond que vòstres vesins sègon, doncas es pas complèt.
|
tip_federated_timeline: Lo flux d’actualitat federat es una vista generala del malhum Mastodon. Mas aquò inclutz solament lo monde que vòstres vesins sègon, doncas es pas complèt.
|
||||||
tip_following: Seguètz l’administrator del servidor per defaut. Per trobar de mond mai interessant, agachatz lo flux d’actualitat local e lo global.
|
tip_following: Seguètz l’administrator del servidor per defaut. Per trobar de monde mai interessant, agachatz lo flux d’actualitat local e lo global.
|
||||||
tip_local_timeline: Lo flux d’actualitat local es una vista del mond de %{instance}. Son vòstres vesins dirèctes !
|
tip_local_timeline: Lo flux d’actualitat local es una vista del monde de %{instance}. Son vòstres vesins dirèctes !
|
||||||
tip_mobile_webapp: Se vòstre navigator mobil nos permet d’apondre Mastodon a l’ecran d‘acuèlh, podètz recebre de notificacions. Aquò se compòrta coma una aplicacion nativa !
|
tip_mobile_webapp: Se vòstre navigator mobil nos permet d’apondre Mastodon a l’ecran d‘acuèlh, podètz recebre de notificacions. Aquò se compòrta coma una aplicacion nativa !
|
||||||
tips: Astúcias
|
tips: Astúcias
|
||||||
title: Vos desirem la benvenguda a bòrd %{name} !
|
title: Vos desirem la benvenguda a bòrd %{name} !
|
||||||
|
|
|
@ -40,6 +40,7 @@ pl:
|
||||||
following: Śledzeni
|
following: Śledzeni
|
||||||
media: Zawartość multimedialna
|
media: Zawartość multimedialna
|
||||||
moved_html: "%{name} korzysta teraz z konta %{new_profile_link}:"
|
moved_html: "%{name} korzysta teraz z konta %{new_profile_link}:"
|
||||||
|
network_hidden: Ta informacja nie jest dostępna
|
||||||
nothing_here: Niczego tu nie ma!
|
nothing_here: Niczego tu nie ma!
|
||||||
people_followed_by: Konta śledzone przez %{name}
|
people_followed_by: Konta śledzone przez %{name}
|
||||||
people_who_follow: Osoby, które śledzą konto %{name}
|
people_who_follow: Osoby, które śledzą konto %{name}
|
||||||
|
|
|
@ -40,6 +40,7 @@ ru:
|
||||||
following: Подписан(а)
|
following: Подписан(а)
|
||||||
media: Медиаконтент
|
media: Медиаконтент
|
||||||
moved_html: "%{name} переехал(а) на %{new_profile_link}:"
|
moved_html: "%{name} переехал(а) на %{new_profile_link}:"
|
||||||
|
network_hidden: Эта информация недоступна
|
||||||
nothing_here: Здесь ничего нет!
|
nothing_here: Здесь ничего нет!
|
||||||
people_followed_by: Люди, на которых подписан(а) %{name}
|
people_followed_by: Люди, на которых подписан(а) %{name}
|
||||||
people_who_follow: Подписчики %{name}
|
people_who_follow: Подписчики %{name}
|
||||||
|
@ -71,7 +72,7 @@ ru:
|
||||||
title: Сменить e-mail для %{username}
|
title: Сменить e-mail для %{username}
|
||||||
confirm: Подтвердить
|
confirm: Подтвердить
|
||||||
confirmed: Подтверждено
|
confirmed: Подтверждено
|
||||||
confirming: подтверждающий
|
confirming: Подтверждение
|
||||||
demote: Разжаловать
|
demote: Разжаловать
|
||||||
disable: Отключить
|
disable: Отключить
|
||||||
disable_two_factor_authentication: Отключить 2FA
|
disable_two_factor_authentication: Отключить 2FA
|
||||||
|
@ -80,7 +81,7 @@ ru:
|
||||||
domain: Домен
|
domain: Домен
|
||||||
edit: Изменить
|
edit: Изменить
|
||||||
email: E-mail
|
email: E-mail
|
||||||
email_status: Статус электронной почты
|
email_status: Статус e-mail
|
||||||
enable: Включить
|
enable: Включить
|
||||||
enabled: Включен
|
enabled: Включен
|
||||||
feed_url: URL фида
|
feed_url: URL фида
|
||||||
|
|
|
@ -15,6 +15,7 @@ oc:
|
||||||
note:
|
note:
|
||||||
one: Demòra encara <span class="name-counter">1</span> caractèr
|
one: Demòra encara <span class="name-counter">1</span> caractèr
|
||||||
other: Demòran encara <span class="name-counter">%{count}</span> caractèrs
|
other: Demòran encara <span class="name-counter">%{count}</span> caractèrs
|
||||||
|
setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo monde que seguètz
|
||||||
setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts
|
setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts
|
||||||
setting_theme: Aquò càmbia lo tèma grafic de Mastodon quand sètz connectat qual que siasque lo periferic.
|
setting_theme: Aquò càmbia lo tèma grafic de Mastodon quand sètz connectat qual que siasque lo periferic.
|
||||||
imports:
|
imports:
|
||||||
|
@ -54,6 +55,7 @@ oc:
|
||||||
setting_default_sensitive: Totjorn marcar los mèdias coma sensibles
|
setting_default_sensitive: Totjorn marcar los mèdias coma sensibles
|
||||||
setting_delete_modal: Afichar una fenèstra de confirmacion abans de suprimir un estatut
|
setting_delete_modal: Afichar una fenèstra de confirmacion abans de suprimir un estatut
|
||||||
setting_display_sensitive_media: Totjorn mostrar los mèdias coma sensibles
|
setting_display_sensitive_media: Totjorn mostrar los mèdias coma sensibles
|
||||||
|
setting_hide_network: Amagar vòstre malhum
|
||||||
setting_noindex: Èsser pas indexat pels motors de recèrca
|
setting_noindex: Èsser pas indexat pels motors de recèrca
|
||||||
setting_reduce_motion: Reduire la velocitat de las animacions
|
setting_reduce_motion: Reduire la velocitat de las animacions
|
||||||
setting_system_font_ui: Utilizar la polissa del sisèma
|
setting_system_font_ui: Utilizar la polissa del sisèma
|
||||||
|
|
|
@ -19,6 +19,7 @@ pl:
|
||||||
many: Pozostało <span class="name-counter">%{count}</span> znaków
|
many: Pozostało <span class="name-counter">%{count}</span> znaków
|
||||||
one: Pozostał <span class="name-counter">1</span> znak
|
one: Pozostał <span class="name-counter">1</span> znak
|
||||||
other: Pozostało <span class="name-counter">%{count}</span> znaków
|
other: Pozostało <span class="name-counter">%{count}</span> znaków
|
||||||
|
setting_hide_network: Informacje o tym, kto Cię śledzi i kogo śledzisz nie będą widoczne
|
||||||
setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów
|
setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów
|
||||||
setting_skin: Zmienia wygląd używanej odmiany Mastodona
|
setting_skin: Zmienia wygląd używanej odmiany Mastodona
|
||||||
imports:
|
imports:
|
||||||
|
@ -59,6 +60,7 @@ pl:
|
||||||
setting_delete_modal: Pytaj o potwierdzenie przed usunięciem wpisu
|
setting_delete_modal: Pytaj o potwierdzenie przed usunięciem wpisu
|
||||||
setting_display_sensitive_media: Zawsze oznaczaj zawartość multimedialną jako wrażliwą
|
setting_display_sensitive_media: Zawsze oznaczaj zawartość multimedialną jako wrażliwą
|
||||||
setting_favourite_modal: Pytaj o potwierdzenie przed dodaniem do ulubionych
|
setting_favourite_modal: Pytaj o potwierdzenie przed dodaniem do ulubionych
|
||||||
|
setting_hide_network: Ukryj swoją sieć
|
||||||
setting_noindex: Nie indeksuj mojego profilu w wyszukiwarkach internetowych
|
setting_noindex: Nie indeksuj mojego profilu w wyszukiwarkach internetowych
|
||||||
setting_reduce_motion: Ogranicz ruch w animacjach
|
setting_reduce_motion: Ogranicz ruch w animacjach
|
||||||
setting_skin: Motyw
|
setting_skin: Motyw
|
||||||
|
|
|
@ -19,6 +19,7 @@ ru:
|
||||||
many: Осталось <span class="name-counter">%{count}</span> символов
|
many: Осталось <span class="name-counter">%{count}</span> символов
|
||||||
one: Остался <span class="name-counter">1</span> символ
|
one: Остался <span class="name-counter">1</span> символ
|
||||||
other: Осталось <span class="name-counter">%{count}</span> символов
|
other: Осталось <span class="name-counter">%{count}</span> символов
|
||||||
|
setting_hide_network: Те, на кого Вы подписаны и кто подписан на Вас, не будут отображены в Вашем профиле
|
||||||
setting_noindex: Относится к Вашему публичному профилю и страницам статусов
|
setting_noindex: Относится к Вашему публичному профилю и страницам статусов
|
||||||
setting_theme: Влияет на внешний вид Mastodon при выполненном входе в аккаунт.
|
setting_theme: Влияет на внешний вид Mastodon при выполненном входе в аккаунт.
|
||||||
imports:
|
imports:
|
||||||
|
@ -58,6 +59,7 @@ ru:
|
||||||
setting_default_sensitive: Всегда отмечать медиаконтент как чувствительный
|
setting_default_sensitive: Всегда отмечать медиаконтент как чувствительный
|
||||||
setting_delete_modal: Показывать диалог подтверждения перед удалением
|
setting_delete_modal: Показывать диалог подтверждения перед удалением
|
||||||
setting_display_sensitive_media: Всегда показывать медиаконтент, отмеченный как чувствительный
|
setting_display_sensitive_media: Всегда показывать медиаконтент, отмеченный как чувствительный
|
||||||
|
setting_hide_network: Скрыть свои связи
|
||||||
setting_noindex: Отказаться от индексации в поисковых машинах
|
setting_noindex: Отказаться от индексации в поисковых машинах
|
||||||
setting_reduce_motion: Уменьшить движение в анимации
|
setting_reduce_motion: Уменьшить движение в анимации
|
||||||
setting_system_font_ui: Использовать шрифт системы по умолчанию
|
setting_system_font_ui: Использовать шрифт системы по умолчанию
|
||||||
|
|
|
@ -4,22 +4,30 @@ zh-CN:
|
||||||
hints:
|
hints:
|
||||||
defaults:
|
defaults:
|
||||||
avatar: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 400×400px
|
avatar: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 400×400px
|
||||||
|
bot: 来自这个帐户的绝大多数操作都是自动进行的,并且可能无人监控
|
||||||
digest: 仅在你长时间未登录,且收到了私信时发送
|
digest: 仅在你长时间未登录,且收到了私信时发送
|
||||||
display_name: 还能输入 <span class="name-counter">%{count}</span> 个字符
|
display_name: 还能输入 <span class="name-counter">%{count}</span> 个字符
|
||||||
|
fields: 这将会在个人资料页上以表格的形式展示,最多 4 个项目
|
||||||
header: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px
|
header: 文件大小限制 2MB,只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px
|
||||||
locked: 你需要手动审核所有关注请求
|
locked: 你需要手动审核所有关注请求
|
||||||
note: 还能输入 <span class="note-counter">%{count}</span> 个字符
|
note: 还能输入 <span class="note-counter">%{count}</span> 个字符
|
||||||
|
setting_hide_network: 你关注的人和关注你的人将不会在你的个人资料页上展示
|
||||||
setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面
|
setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面
|
||||||
setting_theme: 此设置会影响到你从任意设备登录时 Mastodon 的显示样式
|
setting_theme: 此设置会影响到你从任意设备登录时 Mastodon 的显示样式
|
||||||
imports:
|
imports:
|
||||||
data: 请上传从其他 Mastodon 实例导出的 CSV 文件
|
data: 请上传从其他 Mastodon 实例导出的 CSV 文件
|
||||||
sessions:
|
sessions:
|
||||||
otp: 输入你手机上生成的双重认证码,或者任意一个恢复代码。
|
otp: 输入你手机应用上生成的双重认证码,或者任意一个恢复代码:
|
||||||
user:
|
user:
|
||||||
filtered_languages: 被勾选语言的嘟文将不会出现在你的公共时间轴上
|
filtered_languages: 被勾选语言的嘟文将不会出现在你的公共时间轴上
|
||||||
labels:
|
labels:
|
||||||
|
account:
|
||||||
|
fields:
|
||||||
|
name: 标签
|
||||||
|
value: 内容
|
||||||
defaults:
|
defaults:
|
||||||
avatar: 头像
|
avatar: 头像
|
||||||
|
bot: 这是一个机器人帐户
|
||||||
confirm_new_password: 确认新密码
|
confirm_new_password: 确认新密码
|
||||||
confirm_password: 确认密码
|
confirm_password: 确认密码
|
||||||
current_password: 当前密码
|
current_password: 当前密码
|
||||||
|
@ -27,6 +35,7 @@ zh-CN:
|
||||||
display_name: 昵称
|
display_name: 昵称
|
||||||
email: 电子邮件地址
|
email: 电子邮件地址
|
||||||
expires_in: 失效时间
|
expires_in: 失效时间
|
||||||
|
fields: 个人资料附加信息
|
||||||
filtered_languages: 语言过滤
|
filtered_languages: 语言过滤
|
||||||
header: 个人资料页横幅图片
|
header: 个人资料页横幅图片
|
||||||
locale: 语言
|
locale: 语言
|
||||||
|
@ -41,6 +50,8 @@ zh-CN:
|
||||||
setting_default_privacy: 嘟文默认可见范围
|
setting_default_privacy: 嘟文默认可见范围
|
||||||
setting_default_sensitive: 总是将我发送的媒体文件标记为敏感内容
|
setting_default_sensitive: 总是将我发送的媒体文件标记为敏感内容
|
||||||
setting_delete_modal: 在删除嘟文前询问我
|
setting_delete_modal: 在删除嘟文前询问我
|
||||||
|
setting_display_sensitive_media: 总是显示标记为敏感的媒体文件
|
||||||
|
setting_hide_network: 隐藏你的社交网络
|
||||||
setting_noindex: 禁止搜索引擎建立索引
|
setting_noindex: 禁止搜索引擎建立索引
|
||||||
setting_reduce_motion: 降低过渡动画效果
|
setting_reduce_motion: 降低过渡动画效果
|
||||||
setting_system_font_ui: 使用系统默认字体
|
setting_system_font_ui: 使用系统默认字体
|
||||||
|
@ -49,6 +60,7 @@ zh-CN:
|
||||||
severity: 级别
|
severity: 级别
|
||||||
type: 导入数据类型
|
type: 导入数据类型
|
||||||
username: 用户名
|
username: 用户名
|
||||||
|
username_or_email: 用户名或电子邮件地址
|
||||||
interactions:
|
interactions:
|
||||||
must_be_follower: 屏蔽来自未关注我的用户的通知
|
must_be_follower: 屏蔽来自未关注我的用户的通知
|
||||||
must_be_following: 屏蔽来自我未关注的用户的通知
|
must_be_following: 屏蔽来自我未关注的用户的通知
|
||||||
|
|
|
@ -4,6 +4,7 @@ zh-CN:
|
||||||
about_hashtag_html: 这里展示的是带有话题标签 <strong>#%{hashtag}</strong> 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。
|
about_hashtag_html: 这里展示的是带有话题标签 <strong>#%{hashtag}</strong> 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。
|
||||||
about_mastodon_html: Mastodon(长毛象)是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。
|
about_mastodon_html: Mastodon(长毛象)是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。
|
||||||
about_this: 关于本实例
|
about_this: 关于本实例
|
||||||
|
administered_by: 本实例的管理员:
|
||||||
closed_registrations: 这个实例目前没有开放注册。不过,你可以前往其他实例注册一个帐户,同样可以加入到这个网络中哦!
|
closed_registrations: 这个实例目前没有开放注册。不过,你可以前往其他实例注册一个帐户,同样可以加入到这个网络中哦!
|
||||||
contact: 联系方式
|
contact: 联系方式
|
||||||
contact_missing: 未设定
|
contact_missing: 未设定
|
||||||
|
@ -39,6 +40,7 @@ zh-CN:
|
||||||
following: 正在关注
|
following: 正在关注
|
||||||
media: 媒体
|
media: 媒体
|
||||||
moved_html: "%{name} 已经迁移到 %{new_profile_link}:"
|
moved_html: "%{name} 已经迁移到 %{new_profile_link}:"
|
||||||
|
network_hidden: 此信息不可用。
|
||||||
nothing_here: 这里神马都没有!
|
nothing_here: 这里神马都没有!
|
||||||
people_followed_by: "%{name} 关注的人"
|
people_followed_by: "%{name} 关注的人"
|
||||||
people_who_follow: 关注 %{name} 的人
|
people_who_follow: 关注 %{name} 的人
|
||||||
|
@ -48,6 +50,7 @@ zh-CN:
|
||||||
reserved_username: 此用户名已被保留
|
reserved_username: 此用户名已被保留
|
||||||
roles:
|
roles:
|
||||||
admin: 管理员
|
admin: 管理员
|
||||||
|
bot: 机器人
|
||||||
moderator: 监察员
|
moderator: 监察员
|
||||||
unfollow: 取消关注
|
unfollow: 取消关注
|
||||||
admin:
|
admin:
|
||||||
|
@ -58,7 +61,15 @@ zh-CN:
|
||||||
destroyed_msg: 管理备忘删除成功!
|
destroyed_msg: 管理备忘删除成功!
|
||||||
accounts:
|
accounts:
|
||||||
are_you_sure: 你确定吗?
|
are_you_sure: 你确定吗?
|
||||||
|
avatar: 头像
|
||||||
by_domain: 域名
|
by_domain: 域名
|
||||||
|
change_email:
|
||||||
|
changed_msg: 帐户电子邮件地址更改成功!
|
||||||
|
current_email: 当前的电子邮件地址
|
||||||
|
label: 更改电子邮件地址
|
||||||
|
new_email: 新的电子邮件地址
|
||||||
|
submit: 更改电子邮件地址
|
||||||
|
title: 为 %{username} 更改电子邮件地址
|
||||||
confirm: 确认
|
confirm: 确认
|
||||||
confirmed: 已确认
|
confirmed: 已确认
|
||||||
confirming: 确认
|
confirming: 确认
|
||||||
|
@ -70,7 +81,7 @@ zh-CN:
|
||||||
domain: 域名
|
domain: 域名
|
||||||
edit: 编辑
|
edit: 编辑
|
||||||
email: 电子邮件地址
|
email: 电子邮件地址
|
||||||
email_status: 电子邮件状态
|
email_status: 电子邮件地址状态
|
||||||
enable: 启用
|
enable: 启用
|
||||||
enabled: 已启用
|
enabled: 已启用
|
||||||
feed_url: 订阅 URL
|
feed_url: 订阅 URL
|
||||||
|
@ -108,10 +119,11 @@ zh-CN:
|
||||||
public: 公开页面
|
public: 公开页面
|
||||||
push_subscription_expires: PuSH 订阅过期时间
|
push_subscription_expires: PuSH 订阅过期时间
|
||||||
redownload: 刷新头像
|
redownload: 刷新头像
|
||||||
|
remove_avatar: 删除头像
|
||||||
resend_confirmation:
|
resend_confirmation:
|
||||||
already_confirmed: 该用户已被确认
|
already_confirmed: 该用户已被确认
|
||||||
send: 重发确认邮件
|
send: 重发确认邮件
|
||||||
success: 确认电子邮件成功发送!
|
success: 确认邮件发送成功!
|
||||||
reset: 重置
|
reset: 重置
|
||||||
reset_password: 重置密码
|
reset_password: 重置密码
|
||||||
resubscribe: 重新订阅
|
resubscribe: 重新订阅
|
||||||
|
@ -132,6 +144,7 @@ zh-CN:
|
||||||
statuses: 嘟文
|
statuses: 嘟文
|
||||||
subscribe: 订阅
|
subscribe: 订阅
|
||||||
title: 用户
|
title: 用户
|
||||||
|
unconfirmed_email: 待验证的电子邮件地址
|
||||||
undo_silenced: 解除隐藏
|
undo_silenced: 解除隐藏
|
||||||
undo_suspension: 解除封禁
|
undo_suspension: 解除封禁
|
||||||
unsubscribe: 取消订阅
|
unsubscribe: 取消订阅
|
||||||
|
@ -139,6 +152,8 @@ zh-CN:
|
||||||
web: 站内页面
|
web: 站内页面
|
||||||
action_logs:
|
action_logs:
|
||||||
actions:
|
actions:
|
||||||
|
assigned_to_self_report: "%{name} 接管了举报 %{target}"
|
||||||
|
change_email_user: "%{name} 更改了用户 %{target} 的电子邮件地址"
|
||||||
confirm_user: "%{name} 确认了用户 %{target} 的电子邮件地址"
|
confirm_user: "%{name} 确认了用户 %{target} 的电子邮件地址"
|
||||||
create_custom_emoji: "%{name} 添加了新的自定义表情 %{target}"
|
create_custom_emoji: "%{name} 添加了新的自定义表情 %{target}"
|
||||||
create_domain_block: "%{name} 屏蔽了域名 %{target}"
|
create_domain_block: "%{name} 屏蔽了域名 %{target}"
|
||||||
|
@ -154,10 +169,13 @@ zh-CN:
|
||||||
enable_user: "%{name} 将用户 %{target} 设置为允许登录"
|
enable_user: "%{name} 将用户 %{target} 设置为允许登录"
|
||||||
memorialize_account: "%{name} 将 %{target} 设置为追悼帐户"
|
memorialize_account: "%{name} 将 %{target} 设置为追悼帐户"
|
||||||
promote_user: "%{name} 对用户 %{target} 进行了升任操作"
|
promote_user: "%{name} 对用户 %{target} 进行了升任操作"
|
||||||
|
remove_avatar_user: "%{name} 删除了 %{target} 的头像"
|
||||||
|
reopen_report: "%{name} 重开了举报 %{target}"
|
||||||
reset_password_user: "%{name} 重置了用户 %{target} 的密码"
|
reset_password_user: "%{name} 重置了用户 %{target} 的密码"
|
||||||
resolve_report: "%{name} 处理了举报 %{target}"
|
resolve_report: "%{name} 处理了举报 %{target}"
|
||||||
silence_account: "%{name} 隐藏了用户 %{target}"
|
silence_account: "%{name} 隐藏了用户 %{target}"
|
||||||
suspend_account: "%{name} 封禁了用户 %{target}"
|
suspend_account: "%{name} 封禁了用户 %{target}"
|
||||||
|
unassigned_report: "%{name} 放弃了举报 %{target} 的接管"
|
||||||
unsilence_account: "%{name} 解除了用户 %{target} 的隐藏状态"
|
unsilence_account: "%{name} 解除了用户 %{target} 的隐藏状态"
|
||||||
unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态"
|
unsuspend_account: "%{name} 解除了用户 %{target} 的封禁状态"
|
||||||
update_custom_emoji: "%{name} 更新了自定义表情 %{target}"
|
update_custom_emoji: "%{name} 更新了自定义表情 %{target}"
|
||||||
|
@ -241,24 +259,44 @@ zh-CN:
|
||||||
expired: 已失效
|
expired: 已失效
|
||||||
title: 筛选
|
title: 筛选
|
||||||
title: 邀请用户
|
title: 邀请用户
|
||||||
|
report_notes:
|
||||||
|
created_msg: 举报记录建立成功!
|
||||||
|
destroyed_msg: 举报记录删除成功!
|
||||||
reports:
|
reports:
|
||||||
|
account:
|
||||||
|
note: 条记录
|
||||||
|
report: 条举报
|
||||||
action_taken_by: 操作执行者
|
action_taken_by: 操作执行者
|
||||||
are_you_sure: 你确定吗?
|
are_you_sure: 你确定吗?
|
||||||
|
assign_to_self: 接管
|
||||||
|
assigned: 已接管的监察员
|
||||||
comment:
|
comment:
|
||||||
none: 没有
|
none: 没有
|
||||||
|
created_at: 举报时间
|
||||||
id: ID
|
id: ID
|
||||||
mark_as_resolved: 标记为“已处理”
|
mark_as_resolved: 标记为“已处理”
|
||||||
|
mark_as_unresolved: 标记为“未处理”
|
||||||
|
notes:
|
||||||
|
create: 添加记录
|
||||||
|
create_and_resolve: 添加记录并标记为“已处理”
|
||||||
|
create_and_unresolve: 添加记录并重开
|
||||||
|
delete: 删除
|
||||||
|
placeholder: 描述已经执行的操作,或其他任何与此条举报相关的跟进情况
|
||||||
|
reopen: 重开举报
|
||||||
report: '举报 #%{id}'
|
report: '举报 #%{id}'
|
||||||
report_contents: 内容
|
report_contents: 内容
|
||||||
reported_account: 举报用户
|
reported_account: 举报用户
|
||||||
reported_by: 举报人
|
reported_by: 举报人
|
||||||
resolved: 已处理
|
resolved: 已处理
|
||||||
|
resolved_msg: 举报处理成功!
|
||||||
silence_account: 隐藏用户
|
silence_account: 隐藏用户
|
||||||
status: 状态
|
status: 状态
|
||||||
suspend_account: 封禁用户
|
suspend_account: 封禁用户
|
||||||
target: 被举报人
|
target: 被举报人
|
||||||
title: 举报
|
title: 举报
|
||||||
|
unassign: 取消接管
|
||||||
unresolved: 未处理
|
unresolved: 未处理
|
||||||
|
updated_at: 更新时间
|
||||||
view: 查看
|
view: 查看
|
||||||
settings:
|
settings:
|
||||||
activity_api_enabled:
|
activity_api_enabled:
|
||||||
|
@ -270,6 +308,9 @@ zh-CN:
|
||||||
contact_information:
|
contact_information:
|
||||||
email: 用于联系的公开电子邮件地址
|
email: 用于联系的公开电子邮件地址
|
||||||
username: 用于联系的公开用户名
|
username: 用于联系的公开用户名
|
||||||
|
hero:
|
||||||
|
desc_html: 用于在首页展示。推荐分辨率 600×100px 以上。未指定的情况下将默认使用本站缩略图
|
||||||
|
title: 主题图片
|
||||||
peers_api_enabled:
|
peers_api_enabled:
|
||||||
desc_html: 截至目前本实例在网络中已发现的域名
|
desc_html: 截至目前本实例在网络中已发现的域名
|
||||||
title: 公开已知实例的列表
|
title: 公开已知实例的列表
|
||||||
|
@ -286,11 +327,14 @@ zh-CN:
|
||||||
open:
|
open:
|
||||||
desc_html: 允许所有人建立帐户
|
desc_html: 允许所有人建立帐户
|
||||||
title: 开放注册
|
title: 开放注册
|
||||||
|
show_known_fediverse_at_about_page:
|
||||||
|
desc_html: 启用此选项将会在预览中显示来自已知实例的嘟文,否则只会显示本站时间轴的内容
|
||||||
|
title: 在时间轴预览中显示已知实例
|
||||||
show_staff_badge:
|
show_staff_badge:
|
||||||
desc_html: 在个人资料页上显示管理人员标志
|
desc_html: 在个人资料页上显示管理人员标志
|
||||||
title: 显示管理人员标志
|
title: 显示管理人员标志
|
||||||
site_description:
|
site_description:
|
||||||
desc_html: 用于首页展示以及 meta 标签中的网站简介。可以使用 HTML 标签,包括 <code><a></code> 和 <code><em></code>。
|
desc_html: 用于首页展示以及 meta 标签中的网站简介。可以使用 HTML 标签,包括 <code><a></code> 和 <code><em></code>
|
||||||
title: 本站简介
|
title: 本站简介
|
||||||
site_description_extended:
|
site_description_extended:
|
||||||
desc_html: 可以填写行为守则、规定、指南或其他本站特有的内容。可以使用 HTML 标签
|
desc_html: 可以填写行为守则、规定、指南或其他本站特有的内容。可以使用 HTML 标签
|
||||||
|
@ -310,8 +354,8 @@ zh-CN:
|
||||||
back_to_account: 返回帐户信息页
|
back_to_account: 返回帐户信息页
|
||||||
batch:
|
batch:
|
||||||
delete: 删除
|
delete: 删除
|
||||||
nsfw_off: 取消 NSFW 标记
|
nsfw_off: 标记为非敏感内容
|
||||||
nsfw_on: 添加 NSFW 标记
|
nsfw_on: 标记为敏感内容
|
||||||
failed_to_execute: 执行失败
|
failed_to_execute: 执行失败
|
||||||
media:
|
media:
|
||||||
title: 媒体文件
|
title: 媒体文件
|
||||||
|
@ -328,7 +372,8 @@ zh-CN:
|
||||||
title: 管理
|
title: 管理
|
||||||
admin_mailer:
|
admin_mailer:
|
||||||
new_report:
|
new_report:
|
||||||
body: "%{reporter} 举报了用户 %{target}。"
|
body: "%{reporter} 举报了用户 %{target}"
|
||||||
|
body_remote: 来自 %{domain} 的用户举报了用户 %{target}
|
||||||
subject: 来自 %{instance} 的用户举报(#%{id})
|
subject: 来自 %{instance} 的用户举报(#%{id})
|
||||||
application_mailer:
|
application_mailer:
|
||||||
notification_preferences: 更改电子邮件首选项
|
notification_preferences: 更改电子邮件首选项
|
||||||
|
@ -347,6 +392,8 @@ zh-CN:
|
||||||
your_token: 你的访问令牌
|
your_token: 你的访问令牌
|
||||||
auth:
|
auth:
|
||||||
agreement_html: 注册即表示你同意遵守<a href="%{rules_path}">本实例的相关规定</a>和<a href="%{terms_path}">我们的使用条款</a>。
|
agreement_html: 注册即表示你同意遵守<a href="%{rules_path}">本实例的相关规定</a>和<a href="%{terms_path}">我们的使用条款</a>。
|
||||||
|
change_password: 密码
|
||||||
|
confirm_email: 确认电子邮件地址
|
||||||
delete_account: 删除帐户
|
delete_account: 删除帐户
|
||||||
delete_account_html: 如果你想删除你的帐户,请<a href="%{path}">点击这里继续</a>。你需要确认你的操作。
|
delete_account_html: 如果你想删除你的帐户,请<a href="%{path}">点击这里继续</a>。你需要确认你的操作。
|
||||||
didnt_get_confirmation: 没有收到确认邮件?
|
didnt_get_confirmation: 没有收到确认邮件?
|
||||||
|
@ -356,12 +403,16 @@ zh-CN:
|
||||||
logout: 登出
|
logout: 登出
|
||||||
migrate_account: 迁移到另一个帐户
|
migrate_account: 迁移到另一个帐户
|
||||||
migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。
|
migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。
|
||||||
|
or: 或者
|
||||||
|
or_log_in_with: 或通过其他方式登录
|
||||||
register: 注册
|
register: 注册
|
||||||
|
register_elsewhere: 前往其他实例注册
|
||||||
resend_confirmation: 重新发送确认邮件
|
resend_confirmation: 重新发送确认邮件
|
||||||
reset_password: 重置密码
|
reset_password: 重置密码
|
||||||
security: 帐户安全
|
security: 帐户安全
|
||||||
set_new_password: 设置新密码
|
set_new_password: 设置新密码
|
||||||
authorize_follow:
|
authorize_follow:
|
||||||
|
already_following: 你已经在关注此用户了
|
||||||
error: 对不起,寻找这个跨站用户时出错
|
error: 对不起,寻找这个跨站用户时出错
|
||||||
follow: 关注
|
follow: 关注
|
||||||
follow_request: 关注请求已发送给:
|
follow_request: 关注请求已发送给:
|
||||||
|
@ -406,6 +457,13 @@ zh-CN:
|
||||||
title: 这个页面有问题
|
title: 这个页面有问题
|
||||||
noscript_html: 使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">Mastodon 应用</a>。
|
noscript_html: 使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">Mastodon 应用</a>。
|
||||||
exports:
|
exports:
|
||||||
|
archive_takeout:
|
||||||
|
date: 日期
|
||||||
|
download: 下载你的存档
|
||||||
|
hint_html: 你可以请求一份包含你的<strong>嘟文和已上传的媒体文件</strong>的存档。导出的数据为 ActivityPub 格式,因而可以通过相应的软件读取。每次可以请求存档的间隔至少为 7 天。
|
||||||
|
in_progress: 正在准备你的存档……
|
||||||
|
request: 请求你的存档
|
||||||
|
size: 大小
|
||||||
blocks: 屏蔽的用户
|
blocks: 屏蔽的用户
|
||||||
csv: CSV
|
csv: CSV
|
||||||
follows: 关注的用户
|
follows: 关注的用户
|
||||||
|
@ -445,6 +503,7 @@ zh-CN:
|
||||||
'21600': 6 小时后
|
'21600': 6 小时后
|
||||||
'3600': 1 小时后
|
'3600': 1 小时后
|
||||||
'43200': 12 小时后
|
'43200': 12 小时后
|
||||||
|
'604800': 1 周后
|
||||||
'86400': 1 天后
|
'86400': 1 天后
|
||||||
expires_in_prompt: 永不过期
|
expires_in_prompt: 永不过期
|
||||||
generate: 生成邀请链接
|
generate: 生成邀请链接
|
||||||
|
@ -528,6 +587,10 @@ zh-CN:
|
||||||
missing_resource: 无法确定你的帐户的跳转 URL
|
missing_resource: 无法确定你的帐户的跳转 URL
|
||||||
proceed: 确认关注
|
proceed: 确认关注
|
||||||
prompt: 你正准备关注:
|
prompt: 你正准备关注:
|
||||||
|
remote_unfollow:
|
||||||
|
error: 错误
|
||||||
|
title: 标题
|
||||||
|
unfollowed: 已取消关注
|
||||||
sessions:
|
sessions:
|
||||||
activity: 最后一次活跃的时间
|
activity: 最后一次活跃的时间
|
||||||
browser: 浏览器
|
browser: 浏览器
|
||||||
|
@ -583,6 +646,15 @@ zh-CN:
|
||||||
two_factor_authentication: 双重认证
|
two_factor_authentication: 双重认证
|
||||||
your_apps: 你的应用
|
your_apps: 你的应用
|
||||||
statuses:
|
statuses:
|
||||||
|
attached:
|
||||||
|
description: 附加媒体:%{attached}
|
||||||
|
image: "%{count} 张图片"
|
||||||
|
video: "%{count} 个视频"
|
||||||
|
boosted_from_html: 转嘟自 %{acct_link}
|
||||||
|
content_warning: 内容警告:%{warning}
|
||||||
|
disallowed_hashtags:
|
||||||
|
one: 包含了一个禁止的话题标签:%{tags}
|
||||||
|
other: 包含了这些禁止的话题标签:%{tags}
|
||||||
open_in_web: 在站内打开
|
open_in_web: 在站内打开
|
||||||
over_character_limit: 超过了 %{max} 字的限制
|
over_character_limit: 超过了 %{max} 字的限制
|
||||||
pin_errors:
|
pin_errors:
|
||||||
|
@ -606,6 +678,9 @@ zh-CN:
|
||||||
sensitive_content: 敏感内容
|
sensitive_content: 敏感内容
|
||||||
terms:
|
terms:
|
||||||
title: "%{instance} 使用条款和隐私权政策"
|
title: "%{instance} 使用条款和隐私权政策"
|
||||||
|
themes:
|
||||||
|
contrast: 高对比度
|
||||||
|
default: Mastodon
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%Y年%-m月%d日 %H:%M"
|
default: "%Y年%-m月%d日 %H:%M"
|
||||||
|
@ -626,6 +701,10 @@ zh-CN:
|
||||||
setup: 设置
|
setup: 设置
|
||||||
wrong_code: 输入的认证码无效!请核对一下你的设备显示的时间,如果正确,你可能需要联系一下实例的管理员,让他们校准服务器的时间。
|
wrong_code: 输入的认证码无效!请核对一下你的设备显示的时间,如果正确,你可能需要联系一下实例的管理员,让他们校准服务器的时间。
|
||||||
user_mailer:
|
user_mailer:
|
||||||
|
backup_ready:
|
||||||
|
explanation: 你请求了一份 Mastodon 帐户的完整备份。现在你可以下载了!
|
||||||
|
subject: 你的存档已经准备完毕
|
||||||
|
title: 存档导出
|
||||||
welcome:
|
welcome:
|
||||||
edit_profile_action: 设置个人资料
|
edit_profile_action: 设置个人资料
|
||||||
edit_profile_step: 你可以自定义你的个人资料,包括上传头像、横幅图片、更改昵称等等。如果你想在新的关注者关注你之前对他们进行审核,你也可以选择为你的帐户开启保护。
|
edit_profile_step: 你可以自定义你的个人资料,包括上传头像、横幅图片、更改昵称等等。如果你想在新的关注者关注你之前对他们进行审核,你也可以选择为你的帐户开启保护。
|
||||||
|
@ -647,4 +726,6 @@ zh-CN:
|
||||||
users:
|
users:
|
||||||
invalid_email: 输入的电子邮件地址无效
|
invalid_email: 输入的电子邮件地址无效
|
||||||
invalid_otp_token: 输入的双重认证代码无效
|
invalid_otp_token: 输入的双重认证代码无效
|
||||||
|
otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助
|
||||||
|
seamless_external_login: 因为你是通过外部服务登录的,所以密码和电子邮件地址设置都不可用。
|
||||||
signed_in_as: 当前登录的帐户:
|
signed_in_as: 当前登录的帐户:
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Mastodon
|
||||||
end
|
end
|
||||||
|
|
||||||
def flags
|
def flags
|
||||||
'rc4'
|
'rc5'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_a
|
def to_a
|
||||||
|
|
|
@ -241,7 +241,9 @@ const startWorker = (workerId) => {
|
||||||
|
|
||||||
const PUBLIC_STREAMS = [
|
const PUBLIC_STREAMS = [
|
||||||
'public',
|
'public',
|
||||||
|
'public:media',
|
||||||
'public:local',
|
'public:local',
|
||||||
|
'public:local:media',
|
||||||
'hashtag',
|
'hashtag',
|
||||||
'hashtag:local',
|
'hashtag:local',
|
||||||
];
|
];
|
||||||
|
@ -459,11 +461,17 @@ const startWorker = (workerId) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/api/v1/streaming/public', (req, res) => {
|
app.get('/api/v1/streaming/public', (req, res) => {
|
||||||
streamFrom('timeline:public', req, streamToHttp(req, res), streamHttpEnd(req), true);
|
const onlyMedia = req.query.only_media === '1' || req.query.only_media === 'true';
|
||||||
|
const channel = onlyMedia ? 'timeline:public:media' : 'timeline:public';
|
||||||
|
|
||||||
|
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/api/v1/streaming/public/local', (req, res) => {
|
app.get('/api/v1/streaming/public/local', (req, res) => {
|
||||||
streamFrom('timeline:public:local', req, streamToHttp(req, res), streamHttpEnd(req), true);
|
const onlyMedia = req.query.only_media === '1' || req.query.only_media === 'true';
|
||||||
|
const channel = onlyMedia ? 'timeline:public:local:media' : 'timeline:public:local';
|
||||||
|
|
||||||
|
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/api/v1/streaming/direct', (req, res) => {
|
app.get('/api/v1/streaming/direct', (req, res) => {
|
||||||
|
@ -521,6 +529,12 @@ const startWorker = (workerId) => {
|
||||||
case 'public:local':
|
case 'public:local':
|
||||||
streamFrom('timeline:public:local', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
streamFrom('timeline:public:local', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
||||||
break;
|
break;
|
||||||
|
case 'public:media':
|
||||||
|
streamFrom('timeline:public:media', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
||||||
|
break;
|
||||||
|
case 'public:local:media':
|
||||||
|
streamFrom('timeline:public:local:media', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
||||||
|
break;
|
||||||
case 'direct':
|
case 'direct':
|
||||||
streamFrom(`timeline:direct:${req.accountId}`, req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
streamFrom(`timeline:direct:${req.accountId}`, req, streamToWs(req, ws), streamWsEnd(req, ws), true);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue