Merge remote-tracking branch 'glitchsoc/master' into 454-allow-keyword-mutes-to-skip-mentions
Conflicts: app/models/glitch/keyword_mute.rb
This commit is contained in:
commit
e931cf656d
|
@ -30,6 +30,7 @@ plugins:
|
||||||
channel: eslint-4
|
channel: eslint-4
|
||||||
rubocop:
|
rubocop:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
channel: rubocop-0-54
|
||||||
scss-lint:
|
scss-lint:
|
||||||
enabled: true
|
enabled: true
|
||||||
exclude_patterns:
|
exclude_patterns:
|
||||||
|
|
|
@ -107,5 +107,8 @@ Style/RegexpLiteral:
|
||||||
Style/SymbolArray:
|
Style/SymbolArray:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
Style/TrailingCommaInLiteral:
|
Style/TrailingCommaInArrayLiteral:
|
||||||
|
EnforcedStyleForMultiline: 'comma'
|
||||||
|
|
||||||
|
Style/TrailingCommaInHashLiteral:
|
||||||
EnforcedStyleForMultiline: 'comma'
|
EnforcedStyleForMultiline: 'comma'
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class Api::V1::TrendsController < Api::BaseController
|
|
||||||
before_action :set_tags
|
|
||||||
|
|
||||||
respond_to :json
|
|
||||||
|
|
||||||
def index
|
|
||||||
render json: @tags, each_serializer: REST::TagSerializer
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_tags
|
|
||||||
@tags = TrendingTags.get(limit_param(10))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -10,10 +10,10 @@ export default class ColumnBackButton extends React.PureComponent {
|
||||||
|
|
||||||
handleClick = () => {
|
handleClick = () => {
|
||||||
// if history is exhausted, or we would leave mastodon, just go to root.
|
// if history is exhausted, or we would leave mastodon, just go to root.
|
||||||
if (window.history && (window.history.length === 1 || window.history.length === window._mastoInitialHistoryLen)) {
|
if (window.history.state) {
|
||||||
this.context.router.history.push('/');
|
|
||||||
} else {
|
|
||||||
this.context.router.history.goBack();
|
this.context.router.history.goBack();
|
||||||
|
} else {
|
||||||
|
this.context.router.history.push('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ export default class ColumnBackButtonSlim extends React.PureComponent {
|
||||||
|
|
||||||
handleClick = () => {
|
handleClick = () => {
|
||||||
// if history is exhausted, or we would leave mastodon, just go to root.
|
// if history is exhausted, or we would leave mastodon, just go to root.
|
||||||
if (window.history && (window.history.length === 1 || window.history.length === window._mastoInitialHistoryLen)) {
|
if (window.history.state) {
|
||||||
this.context.router.history.push('/');
|
|
||||||
} else {
|
|
||||||
this.context.router.history.goBack();
|
this.context.router.history.goBack();
|
||||||
|
} else {
|
||||||
|
this.context.router.history.push('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,10 +66,10 @@ export default class ColumnHeader extends React.PureComponent {
|
||||||
|
|
||||||
handleBackClick = () => {
|
handleBackClick = () => {
|
||||||
// if history is exhausted, or we would leave mastodon, just go to root.
|
// if history is exhausted, or we would leave mastodon, just go to root.
|
||||||
if (window.history && (window.history.length === 1 || window.history.length === window._mastoInitialHistoryLen)) {
|
if (window.history.state) {
|
||||||
this.context.router.history.push('/');
|
|
||||||
} else {
|
|
||||||
this.context.router.history.goBack();
|
this.context.router.history.goBack();
|
||||||
|
} else {
|
||||||
|
this.context.router.history.push('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,10 +99,6 @@ const keyMap = {
|
||||||
@withRouter
|
@withRouter
|
||||||
export default class UI extends React.Component {
|
export default class UI extends React.Component {
|
||||||
|
|
||||||
static contextTypes = {
|
|
||||||
router: PropTypes.object.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
dispatch: PropTypes.func.isRequired,
|
dispatch: PropTypes.func.isRequired,
|
||||||
children: PropTypes.node,
|
children: PropTypes.node,
|
||||||
|
@ -113,6 +109,7 @@ export default class UI extends React.Component {
|
||||||
isComposing: PropTypes.bool,
|
isComposing: PropTypes.bool,
|
||||||
hasComposingText: PropTypes.bool,
|
hasComposingText: PropTypes.bool,
|
||||||
location: PropTypes.object,
|
location: PropTypes.object,
|
||||||
|
router: PropTypes.object,
|
||||||
intl: PropTypes.object.isRequired,
|
intl: PropTypes.object.isRequired,
|
||||||
dropdownMenuIsOpen: PropTypes.bool,
|
dropdownMenuIsOpen: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
@ -200,7 +197,7 @@ export default class UI extends React.Component {
|
||||||
|
|
||||||
handleServiceWorkerPostMessage = ({ data }) => {
|
handleServiceWorkerPostMessage = ({ data }) => {
|
||||||
if (data.type === 'navigate') {
|
if (data.type === 'navigate') {
|
||||||
this.context.router.history.push(data.path);
|
this.props.router.history.push(data.path);
|
||||||
} else {
|
} else {
|
||||||
console.warn('Unknown message type:', data.type);
|
console.warn('Unknown message type:', data.type);
|
||||||
}
|
}
|
||||||
|
@ -305,10 +302,11 @@ export default class UI extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyBack = () => {
|
handleHotkeyBack = () => {
|
||||||
if (window.history && window.history.length === 1) {
|
// if history is exhausted, or we would leave mastodon, just go to root.
|
||||||
this.context.router.history.push('/');
|
if (window.history.state) {
|
||||||
} else {
|
|
||||||
this.context.router.history.goBack();
|
this.context.router.history.goBack();
|
||||||
|
} else {
|
||||||
|
this.context.router.history.push('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,54 +316,54 @@ export default class UI extends React.Component {
|
||||||
|
|
||||||
handleHotkeyToggleHelp = () => {
|
handleHotkeyToggleHelp = () => {
|
||||||
if (this.props.location.pathname === '/keyboard-shortcuts') {
|
if (this.props.location.pathname === '/keyboard-shortcuts') {
|
||||||
this.context.router.history.goBack();
|
this.props.router.history.goBack();
|
||||||
} else {
|
} else {
|
||||||
this.context.router.history.push('/keyboard-shortcuts');
|
this.props.router.history.push('/keyboard-shortcuts');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToHome = () => {
|
handleHotkeyGoToHome = () => {
|
||||||
this.context.router.history.push('/timelines/home');
|
this.props.router.history.push('/timelines/home');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToNotifications = () => {
|
handleHotkeyGoToNotifications = () => {
|
||||||
this.context.router.history.push('/notifications');
|
this.props.router.history.push('/notifications');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToLocal = () => {
|
handleHotkeyGoToLocal = () => {
|
||||||
this.context.router.history.push('/timelines/public/local');
|
this.props.router.history.push('/timelines/public/local');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToFederated = () => {
|
handleHotkeyGoToFederated = () => {
|
||||||
this.context.router.history.push('/timelines/public');
|
this.props.router.history.push('/timelines/public');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToDirect = () => {
|
handleHotkeyGoToDirect = () => {
|
||||||
this.context.router.history.push('/timelines/direct');
|
this.props.router.history.push('/timelines/direct');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToStart = () => {
|
handleHotkeyGoToStart = () => {
|
||||||
this.context.router.history.push('/getting-started');
|
this.props.router.history.push('/getting-started');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToFavourites = () => {
|
handleHotkeyGoToFavourites = () => {
|
||||||
this.context.router.history.push('/favourites');
|
this.props.router.history.push('/favourites');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToPinned = () => {
|
handleHotkeyGoToPinned = () => {
|
||||||
this.context.router.history.push('/pinned');
|
this.props.router.history.push('/pinned');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToProfile = () => {
|
handleHotkeyGoToProfile = () => {
|
||||||
this.context.router.history.push(`/accounts/${me}`);
|
this.props.router.history.push(`/accounts/${me}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToBlocked = () => {
|
handleHotkeyGoToBlocked = () => {
|
||||||
this.context.router.history.push('/blocks');
|
this.props.router.history.push('/blocks');
|
||||||
}
|
}
|
||||||
|
|
||||||
handleHotkeyGoToMuted = () => {
|
handleHotkeyGoToMuted = () => {
|
||||||
this.context.router.history.push('/mutes');
|
this.props.router.history.push('/mutes');
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
|
|
|
@ -27,7 +27,6 @@ import {
|
||||||
FAVOURITES_FETCH_SUCCESS,
|
FAVOURITES_FETCH_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/interactions';
|
} from 'flavours/glitch/actions/interactions';
|
||||||
import {
|
import {
|
||||||
TIMELINE_REFRESH_SUCCESS,
|
|
||||||
TIMELINE_UPDATE,
|
TIMELINE_UPDATE,
|
||||||
TIMELINE_EXPAND_SUCCESS,
|
TIMELINE_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/timelines';
|
} from 'flavours/glitch/actions/timelines';
|
||||||
|
@ -38,7 +37,6 @@ import {
|
||||||
import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
|
import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
|
||||||
import {
|
import {
|
||||||
NOTIFICATIONS_UPDATE,
|
NOTIFICATIONS_UPDATE,
|
||||||
NOTIFICATIONS_REFRESH_SUCCESS,
|
|
||||||
NOTIFICATIONS_EXPAND_SUCCESS,
|
NOTIFICATIONS_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/notifications';
|
} from 'flavours/glitch/actions/notifications';
|
||||||
import {
|
import {
|
||||||
|
@ -144,11 +142,9 @@ export default function accounts(state = initialState, action) {
|
||||||
case LIST_ACCOUNTS_FETCH_SUCCESS:
|
case LIST_ACCOUNTS_FETCH_SUCCESS:
|
||||||
case LIST_EDITOR_SUGGESTIONS_READY:
|
case LIST_EDITOR_SUGGESTIONS_READY:
|
||||||
return action.accounts ? normalizeAccounts(state, action.accounts) : state;
|
return action.accounts ? normalizeAccounts(state, action.accounts) : state;
|
||||||
case NOTIFICATIONS_REFRESH_SUCCESS:
|
|
||||||
case NOTIFICATIONS_EXPAND_SUCCESS:
|
case NOTIFICATIONS_EXPAND_SUCCESS:
|
||||||
case SEARCH_FETCH_SUCCESS:
|
case SEARCH_FETCH_SUCCESS:
|
||||||
return normalizeAccountsFromStatuses(normalizeAccounts(state, action.accounts), action.statuses);
|
return normalizeAccountsFromStatuses(normalizeAccounts(state, action.accounts), action.statuses);
|
||||||
case TIMELINE_REFRESH_SUCCESS:
|
|
||||||
case TIMELINE_EXPAND_SUCCESS:
|
case TIMELINE_EXPAND_SUCCESS:
|
||||||
case CONTEXT_FETCH_SUCCESS:
|
case CONTEXT_FETCH_SUCCESS:
|
||||||
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
||||||
|
|
|
@ -29,7 +29,6 @@ import {
|
||||||
FAVOURITES_FETCH_SUCCESS,
|
FAVOURITES_FETCH_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/interactions';
|
} from 'flavours/glitch/actions/interactions';
|
||||||
import {
|
import {
|
||||||
TIMELINE_REFRESH_SUCCESS,
|
|
||||||
TIMELINE_UPDATE,
|
TIMELINE_UPDATE,
|
||||||
TIMELINE_EXPAND_SUCCESS,
|
TIMELINE_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/timelines';
|
} from 'flavours/glitch/actions/timelines';
|
||||||
|
@ -40,7 +39,6 @@ import {
|
||||||
import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
|
import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
|
||||||
import {
|
import {
|
||||||
NOTIFICATIONS_UPDATE,
|
NOTIFICATIONS_UPDATE,
|
||||||
NOTIFICATIONS_REFRESH_SUCCESS,
|
|
||||||
NOTIFICATIONS_EXPAND_SUCCESS,
|
NOTIFICATIONS_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/notifications';
|
} from 'flavours/glitch/actions/notifications';
|
||||||
import {
|
import {
|
||||||
|
@ -119,11 +117,9 @@ export default function accountsCounters(state = initialState, action) {
|
||||||
case LIST_ACCOUNTS_FETCH_SUCCESS:
|
case LIST_ACCOUNTS_FETCH_SUCCESS:
|
||||||
case LIST_EDITOR_SUGGESTIONS_READY:
|
case LIST_EDITOR_SUGGESTIONS_READY:
|
||||||
return action.accounts ? normalizeAccounts(state, action.accounts) : state;
|
return action.accounts ? normalizeAccounts(state, action.accounts) : state;
|
||||||
case NOTIFICATIONS_REFRESH_SUCCESS:
|
|
||||||
case NOTIFICATIONS_EXPAND_SUCCESS:
|
case NOTIFICATIONS_EXPAND_SUCCESS:
|
||||||
case SEARCH_FETCH_SUCCESS:
|
case SEARCH_FETCH_SUCCESS:
|
||||||
return normalizeAccountsFromStatuses(normalizeAccounts(state, action.accounts), action.statuses);
|
return normalizeAccountsFromStatuses(normalizeAccounts(state, action.accounts), action.statuses);
|
||||||
case TIMELINE_REFRESH_SUCCESS:
|
|
||||||
case TIMELINE_EXPAND_SUCCESS:
|
case TIMELINE_EXPAND_SUCCESS:
|
||||||
case CONTEXT_FETCH_SUCCESS:
|
case CONTEXT_FETCH_SUCCESS:
|
||||||
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
||||||
|
|
|
@ -21,14 +21,12 @@ import {
|
||||||
STATUS_UNMUTE_SUCCESS,
|
STATUS_UNMUTE_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/statuses';
|
} from 'flavours/glitch/actions/statuses';
|
||||||
import {
|
import {
|
||||||
TIMELINE_REFRESH_SUCCESS,
|
|
||||||
TIMELINE_UPDATE,
|
TIMELINE_UPDATE,
|
||||||
TIMELINE_DELETE,
|
TIMELINE_DELETE,
|
||||||
TIMELINE_EXPAND_SUCCESS,
|
TIMELINE_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/timelines';
|
} from 'flavours/glitch/actions/timelines';
|
||||||
import {
|
import {
|
||||||
NOTIFICATIONS_UPDATE,
|
NOTIFICATIONS_UPDATE,
|
||||||
NOTIFICATIONS_REFRESH_SUCCESS,
|
|
||||||
NOTIFICATIONS_EXPAND_SUCCESS,
|
NOTIFICATIONS_EXPAND_SUCCESS,
|
||||||
} from 'flavours/glitch/actions/notifications';
|
} from 'flavours/glitch/actions/notifications';
|
||||||
import {
|
import {
|
||||||
|
@ -129,10 +127,8 @@ export default function statuses(state = initialState, action) {
|
||||||
return state.setIn([action.id, 'muted'], true);
|
return state.setIn([action.id, 'muted'], true);
|
||||||
case STATUS_UNMUTE_SUCCESS:
|
case STATUS_UNMUTE_SUCCESS:
|
||||||
return state.setIn([action.id, 'muted'], false);
|
return state.setIn([action.id, 'muted'], false);
|
||||||
case TIMELINE_REFRESH_SUCCESS:
|
|
||||||
case TIMELINE_EXPAND_SUCCESS:
|
case TIMELINE_EXPAND_SUCCESS:
|
||||||
case CONTEXT_FETCH_SUCCESS:
|
case CONTEXT_FETCH_SUCCESS:
|
||||||
case NOTIFICATIONS_REFRESH_SUCCESS:
|
|
||||||
case NOTIFICATIONS_EXPAND_SUCCESS:
|
case NOTIFICATIONS_EXPAND_SUCCESS:
|
||||||
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
case FAVOURITED_STATUSES_FETCH_SUCCESS:
|
||||||
case FAVOURITED_STATUSES_EXPAND_SUCCESS:
|
case FAVOURITED_STATUSES_EXPAND_SUCCESS:
|
||||||
|
|
|
@ -28,11 +28,6 @@ function main() {
|
||||||
store.dispatch(registerPushNotifications.register());
|
store.dispatch(registerPushNotifications.register());
|
||||||
}
|
}
|
||||||
perf.stop('main()');
|
perf.stop('main()');
|
||||||
|
|
||||||
// remember the initial URL
|
|
||||||
if (window.history && typeof window._mastoInitialHistoryLen === 'undefined') {
|
|
||||||
window._mastoInitialHistoryLen = window.history.length;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ export const STATUS_UNMUTE_FAIL = 'STATUS_UNMUTE_FAIL';
|
||||||
export const STATUS_REVEAL = 'STATUS_REVEAL';
|
export const STATUS_REVEAL = 'STATUS_REVEAL';
|
||||||
export const STATUS_HIDE = 'STATUS_HIDE';
|
export const STATUS_HIDE = 'STATUS_HIDE';
|
||||||
|
|
||||||
|
export const REDRAFT = 'REDRAFT';
|
||||||
|
|
||||||
export function fetchStatusRequest(id, skipLoading) {
|
export function fetchStatusRequest(id, skipLoading) {
|
||||||
return {
|
return {
|
||||||
type: STATUS_FETCH_REQUEST,
|
type: STATUS_FETCH_REQUEST,
|
||||||
|
@ -131,14 +133,27 @@ export function fetchStatusFail(id, error, skipLoading) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export function deleteStatus(id) {
|
export function redraft(status) {
|
||||||
|
return {
|
||||||
|
type: REDRAFT,
|
||||||
|
status,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export function deleteStatus(id, withRedraft = false) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
|
const status = getState().getIn(['statuses', id]);
|
||||||
|
|
||||||
dispatch(deleteStatusRequest(id));
|
dispatch(deleteStatusRequest(id));
|
||||||
|
|
||||||
api(getState).delete(`/api/v1/statuses/${id}`).then(() => {
|
api(getState).delete(`/api/v1/statuses/${id}`).then(() => {
|
||||||
evictStatus(id);
|
evictStatus(id);
|
||||||
dispatch(deleteStatusSuccess(id));
|
dispatch(deleteStatusSuccess(id));
|
||||||
dispatch(deleteFromTimelines(id));
|
dispatch(deleteFromTimelines(id));
|
||||||
|
|
||||||
|
if (withRedraft) {
|
||||||
|
dispatch(redraft(status));
|
||||||
|
}
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
dispatch(deleteStatusFail(id, error));
|
dispatch(deleteStatusFail(id, error));
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
import api from '../api';
|
|
||||||
|
|
||||||
export const TRENDS_FETCH_REQUEST = 'TRENDS_FETCH_REQUEST';
|
|
||||||
export const TRENDS_FETCH_SUCCESS = 'TRENDS_FETCH_SUCCESS';
|
|
||||||
export const TRENDS_FETCH_FAIL = 'TRENDS_FETCH_FAIL';
|
|
||||||
|
|
||||||
export const fetchTrends = () => (dispatch, getState) => {
|
|
||||||
dispatch(fetchTrendsRequest());
|
|
||||||
|
|
||||||
api(getState)
|
|
||||||
.get('/api/v1/trends')
|
|
||||||
.then(({ data }) => dispatch(fetchTrendsSuccess(data)))
|
|
||||||
.catch(err => dispatch(fetchTrendsFail(err)));
|
|
||||||
};
|
|
||||||
|
|
||||||
export const fetchTrendsRequest = () => ({
|
|
||||||
type: TRENDS_FETCH_REQUEST,
|
|
||||||
skipLoading: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const fetchTrendsSuccess = trends => ({
|
|
||||||
type: TRENDS_FETCH_SUCCESS,
|
|
||||||
trends,
|
|
||||||
skipLoading: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const fetchTrendsFail = error => ({
|
|
||||||
type: TRENDS_FETCH_FAIL,
|
|
||||||
error,
|
|
||||||
skipLoading: true,
|
|
||||||
skipAlert: true,
|
|
||||||
});
|
|
|
@ -1,16 +1,9 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Sparklines, SparklinesCurve } from 'react-sparklines';
|
import { Sparklines, SparklinesCurve } from 'react-sparklines';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { FormattedMessage, FormattedNumber } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
import { shortNumberFormat } from '../utils/numbers';
|
||||||
const shortNumberFormat = number => {
|
|
||||||
if (number < 1000) {
|
|
||||||
return <FormattedNumber value={number} />;
|
|
||||||
} else {
|
|
||||||
return <React.Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</React.Fragment>;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const Hashtag = ({ hashtag }) => (
|
const Hashtag = ({ hashtag }) => (
|
||||||
<div className='trends__item'>
|
<div className='trends__item'>
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { me } from '../initial_state';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||||
|
redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },
|
||||||
direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
|
direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
|
||||||
mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
|
mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
|
||||||
mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
|
mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
|
||||||
|
@ -88,6 +89,10 @@ export default class StatusActionBar extends ImmutablePureComponent {
|
||||||
this.props.onDelete(this.props.status);
|
this.props.onDelete(this.props.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleRedraftClick = () => {
|
||||||
|
this.props.onDelete(this.props.status, true);
|
||||||
|
}
|
||||||
|
|
||||||
handlePinClick = () => {
|
handlePinClick = () => {
|
||||||
this.props.onPin(this.props.status);
|
this.props.onPin(this.props.status);
|
||||||
}
|
}
|
||||||
|
@ -159,6 +164,7 @@ export default class StatusActionBar extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
|
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
|
||||||
|
menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });
|
||||||
} else {
|
} else {
|
||||||
menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
|
menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
|
||||||
menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });
|
menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });
|
||||||
|
|
|
@ -33,6 +33,8 @@ import { showAlertForError } from '../actions/alerts';
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
|
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
|
||||||
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
|
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
|
||||||
|
redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
|
||||||
|
redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },
|
||||||
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -91,14 +93,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
onDelete (status) {
|
onDelete (status, withRedraft = false) {
|
||||||
if (!deleteModal) {
|
if (!deleteModal) {
|
||||||
dispatch(deleteStatus(status.get('id')));
|
dispatch(deleteStatus(status.get('id'), withRedraft));
|
||||||
} else {
|
} else {
|
||||||
dispatch(openModal('CONFIRM', {
|
dispatch(openModal('CONFIRM', {
|
||||||
message: intl.formatMessage(messages.deleteMessage),
|
message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
|
||||||
confirm: intl.formatMessage(messages.deleteConfirm),
|
confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
|
||||||
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
onConfirm: () => dispatch(deleteStatus(status.get('id'), withRedraft)),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,8 +3,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import DropdownMenuContainer from '../../../containers/dropdown_menu_container';
|
import DropdownMenuContainer from '../../../containers/dropdown_menu_container';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { defineMessages, injectIntl, FormattedMessage, FormattedNumber } from 'react-intl';
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
import { me } from '../../../initial_state';
|
import { me } from '../../../initial_state';
|
||||||
|
import { shortNumberFormat } from '../../../utils/numbers';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' },
|
mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' },
|
||||||
|
@ -146,17 +147,17 @@ export default class ActionBar extends React.PureComponent {
|
||||||
<div className='account__action-bar-links'>
|
<div className='account__action-bar-links'>
|
||||||
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}`}>
|
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}`}>
|
||||||
<span><FormattedMessage id='account.posts' defaultMessage='Toots' /></span>
|
<span><FormattedMessage id='account.posts' defaultMessage='Toots' /></span>
|
||||||
<strong><FormattedNumber value={account.get('statuses_count')} /></strong>
|
<strong>{shortNumberFormat(account.get('statuses_count'))}</strong>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`}>
|
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/following`}>
|
||||||
<span><FormattedMessage id='account.follows' defaultMessage='Follows' /></span>
|
<span><FormattedMessage id='account.follows' defaultMessage='Follows' /></span>
|
||||||
<strong><FormattedNumber value={account.get('following_count')} /></strong>
|
<strong>{shortNumberFormat(account.get('following_count'))}</strong>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`}>
|
<Link className='account__action-bar__tab' to={`/accounts/${account.get('id')}/followers`}>
|
||||||
<span><FormattedMessage id='account.followers' defaultMessage='Followers' /></span>
|
<span><FormattedMessage id='account.followers' defaultMessage='Followers' /></span>
|
||||||
<strong><FormattedNumber value={account.get('followers_count')} /></strong>
|
<strong>{shortNumberFormat(account.get('followers_count'))}</strong>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
import AccountContainer from '../../../containers/account_container';
|
import AccountContainer from '../../../containers/account_container';
|
||||||
|
@ -11,36 +10,14 @@ export default class SearchResults extends ImmutablePureComponent {
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
results: ImmutablePropTypes.map.isRequired,
|
results: ImmutablePropTypes.map.isRequired,
|
||||||
trends: ImmutablePropTypes.list,
|
|
||||||
fetchTrends: PropTypes.func.isRequired,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount () {
|
|
||||||
const { fetchTrends } = this.props;
|
|
||||||
fetchTrends();
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { results, trends } = this.props;
|
const { results } = this.props;
|
||||||
|
|
||||||
let accounts, statuses, hashtags;
|
let accounts, statuses, hashtags;
|
||||||
let count = 0;
|
let count = 0;
|
||||||
|
|
||||||
if (results.isEmpty()) {
|
|
||||||
return (
|
|
||||||
<div className='search-results'>
|
|
||||||
<div className='trends'>
|
|
||||||
<div className='trends__header'>
|
|
||||||
<i className='fa fa-fire fa-fw' />
|
|
||||||
<FormattedMessage id='trends.header' defaultMessage='Trending now' />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{trends && trends.map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (results.get('accounts') && results.get('accounts').size > 0) {
|
if (results.get('accounts') && results.get('accounts').size > 0) {
|
||||||
count += results.get('accounts').size;
|
count += results.get('accounts').size;
|
||||||
accounts = (
|
accounts = (
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import SearchResults from '../components/search_results';
|
import SearchResults from '../components/search_results';
|
||||||
import { fetchTrends } from '../../../actions/trends';
|
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
const mapStateToProps = state => ({
|
||||||
results: state.getIn(['search', 'results']),
|
results: state.getIn(['search', 'results']),
|
||||||
trends: state.getIn(['trends', 'items']),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
export default connect(mapStateToProps)(SearchResults);
|
||||||
fetchTrends: () => dispatch(fetchTrends()),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(SearchResults);
|
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
import classNames from 'classnames';
|
|
||||||
import React from 'react';
|
|
||||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
||||||
import { FormattedMessage, defineMessages } from 'react-intl';
|
|
||||||
import Hashtag from '../../../components/hashtag';
|
|
||||||
import { Link } from 'react-router-dom';
|
|
||||||
|
|
||||||
const messages = defineMessages({
|
|
||||||
refresh_trends: { id: 'trends.refresh', defaultMessage: 'Refresh' },
|
|
||||||
});
|
|
||||||
|
|
||||||
export default class Trends extends ImmutablePureComponent {
|
|
||||||
|
|
||||||
static defaultProps = {
|
|
||||||
loading: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
static propTypes = {
|
|
||||||
trends: ImmutablePropTypes.list,
|
|
||||||
loading: PropTypes.bool.isRequired,
|
|
||||||
showTrends: PropTypes.bool.isRequired,
|
|
||||||
fetchTrends: PropTypes.func.isRequired,
|
|
||||||
toggleTrends: PropTypes.func.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount () {
|
|
||||||
setTimeout(() => this.props.fetchTrends(), 5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleRefreshTrends = () => {
|
|
||||||
this.props.fetchTrends();
|
|
||||||
}
|
|
||||||
|
|
||||||
handleToggle = () => {
|
|
||||||
this.props.toggleTrends(!this.props.showTrends);
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
|
||||||
const { intl, trends, loading, showTrends } = this.props;
|
|
||||||
|
|
||||||
if (!trends || trends.size < 1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='getting-started__trends'>
|
|
||||||
<div className='column-header__wrapper'>
|
|
||||||
<h1 className='column-header'>
|
|
||||||
<button>
|
|
||||||
<i className='fa fa-fire fa-fw' />
|
|
||||||
<FormattedMessage id='trends.header' defaultMessage='Trending now' />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<div className='column-header__buttons'>
|
|
||||||
{showTrends && <button onClick={this.handleRefreshTrends} className='column-header__button' title={intl.formatMessage(messages.refresh_trends)} aria-label={intl.formatMessage(messages.refresh_trends)} disabled={loading}><i className={classNames('fa', 'fa-refresh', { 'fa-spin': loading })} /></button>}
|
|
||||||
<button onClick={this.handleToggle} className='column-header__button'><i className={classNames('fa', showTrends ? 'fa-chevron-down' : 'fa-chevron-up')} /></button>
|
|
||||||
</div>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{showTrends && <div className='getting-started__scrollable'>
|
|
||||||
{trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
|
|
||||||
<Link to='/trends' className='load-more'><FormattedMessage id='status.load_more' defaultMessage='Load more' /></Link>
|
|
||||||
</div>}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import { injectIntl } from 'react-intl';
|
|
||||||
import { fetchTrends } from '../../../actions/trends';
|
|
||||||
import Trends from '../components/trends';
|
|
||||||
import { changeSetting } from '../../../actions/settings';
|
|
||||||
|
|
||||||
const mapStateToProps = state => ({
|
|
||||||
trends: state.getIn(['trends', 'items']),
|
|
||||||
loading: state.getIn(['trends', 'isLoading']),
|
|
||||||
showTrends: state.getIn(['settings', 'trends', 'show']),
|
|
||||||
});
|
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
|
||||||
fetchTrends: () => dispatch(fetchTrends()),
|
|
||||||
toggleTrends: show => dispatch(changeSetting(['trends', 'show'], show)),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Trends));
|
|
|
@ -12,7 +12,6 @@ import { fetchFollowRequests } from '../../actions/accounts';
|
||||||
import { List as ImmutableList } from 'immutable';
|
import { List as ImmutableList } from 'immutable';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import NavigationBar from '../compose/components/navigation_bar';
|
import NavigationBar from '../compose/components/navigation_bar';
|
||||||
import TrendsContainer from './containers/trends_container';
|
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },
|
home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },
|
||||||
|
@ -132,8 +131,6 @@ export default class GettingStarted extends ImmutablePureComponent {
|
||||||
{navItems}
|
{navItems}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{multiColumn && <TrendsContainer />}
|
|
||||||
|
|
||||||
{!multiColumn && <div className='flex-spacer' />}
|
{!multiColumn && <div className='flex-spacer' />}
|
||||||
|
|
||||||
<div className='getting-started getting-started__footer'>
|
<div className='getting-started getting-started__footer'>
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { me } from '../../../initial_state';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
delete: { id: 'status.delete', defaultMessage: 'Delete' },
|
||||||
|
redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },
|
||||||
direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
|
direct: { id: 'status.direct', defaultMessage: 'Direct message @{name}' },
|
||||||
mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
|
mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },
|
||||||
reply: { id: 'status.reply', defaultMessage: 'Reply' },
|
reply: { id: 'status.reply', defaultMessage: 'Reply' },
|
||||||
|
@ -67,6 +68,10 @@ export default class ActionBar extends React.PureComponent {
|
||||||
this.props.onDelete(this.props.status);
|
this.props.onDelete(this.props.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleRedraftClick = () => {
|
||||||
|
this.props.onDelete(this.props.status, true);
|
||||||
|
}
|
||||||
|
|
||||||
handleDirectClick = () => {
|
handleDirectClick = () => {
|
||||||
this.props.onDirect(this.props.status.get('account'), this.context.router.history);
|
this.props.onDirect(this.props.status.get('account'), this.context.router.history);
|
||||||
}
|
}
|
||||||
|
@ -132,6 +137,7 @@ export default class ActionBar extends React.PureComponent {
|
||||||
menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
|
menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });
|
||||||
menu.push(null);
|
menu.push(null);
|
||||||
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
|
menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });
|
||||||
|
menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });
|
||||||
} else {
|
} else {
|
||||||
menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
|
menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
|
||||||
menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });
|
menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick });
|
||||||
|
|
|
@ -47,6 +47,8 @@ import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
|
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
|
||||||
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
|
deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },
|
||||||
|
redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
|
||||||
|
redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' },
|
||||||
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
|
||||||
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
|
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
|
||||||
hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
|
hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
|
||||||
|
@ -77,9 +79,12 @@ const makeMapStateToProps = () => {
|
||||||
let id = ids.shift();
|
let id = ids.shift();
|
||||||
const replies = state.getIn(['contexts', 'replies', id]);
|
const replies = state.getIn(['contexts', 'replies', id]);
|
||||||
|
|
||||||
|
if (status.get('id') !== id) {
|
||||||
|
mutable.push(id);
|
||||||
|
}
|
||||||
|
|
||||||
if (replies) {
|
if (replies) {
|
||||||
replies.forEach(reply => {
|
replies.reverse().forEach(reply => {
|
||||||
mutable.push(reply);
|
|
||||||
ids.unshift(reply);
|
ids.unshift(reply);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -169,16 +174,16 @@ export default class Status extends ImmutablePureComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDeleteClick = (status) => {
|
handleDeleteClick = (status, withRedraft = false) => {
|
||||||
const { dispatch, intl } = this.props;
|
const { dispatch, intl } = this.props;
|
||||||
|
|
||||||
if (!deleteModal) {
|
if (!deleteModal) {
|
||||||
dispatch(deleteStatus(status.get('id')));
|
dispatch(deleteStatus(status.get('id'), withRedraft));
|
||||||
} else {
|
} else {
|
||||||
dispatch(openModal('CONFIRM', {
|
dispatch(openModal('CONFIRM', {
|
||||||
message: intl.formatMessage(messages.deleteMessage),
|
message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
|
||||||
confirm: intl.formatMessage(messages.deleteConfirm),
|
confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
|
||||||
onConfirm: () => dispatch(deleteStatus(status.get('id'))),
|
onConfirm: () => dispatch(deleteStatus(status.get('id'), withRedraft)),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,12 @@ export default class ReportModal extends ImmutablePureComponent {
|
||||||
this.props.dispatch(submitReport());
|
this.props.dispatch(submitReport());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleKeyDown = e => {
|
||||||
|
if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {
|
||||||
|
this.handleSubmit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
this.props.dispatch(expandAccountTimeline(this.props.account.get('id'), { withReplies: true }));
|
this.props.dispatch(expandAccountTimeline(this.props.account.get('id'), { withReplies: true }));
|
||||||
}
|
}
|
||||||
|
@ -98,6 +104,7 @@ export default class ReportModal extends ImmutablePureComponent {
|
||||||
placeholder={intl.formatMessage(messages.placeholder)}
|
placeholder={intl.formatMessage(messages.placeholder)}
|
||||||
value={comment}
|
value={comment}
|
||||||
onChange={this.handleCommentChange}
|
onChange={this.handleCommentChange}
|
||||||
|
onKeyDown={this.handleKeyDown}
|
||||||
disabled={isSubmitting}
|
disabled={isSubmitting}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,6 @@ import {
|
||||||
Mutes,
|
Mutes,
|
||||||
PinnedStatuses,
|
PinnedStatuses,
|
||||||
Lists,
|
Lists,
|
||||||
Trends,
|
|
||||||
} from './util/async-components';
|
} from './util/async-components';
|
||||||
import { HotKeys } from 'react-hotkeys';
|
import { HotKeys } from 'react-hotkeys';
|
||||||
import { me } from '../../initial_state';
|
import { me } from '../../initial_state';
|
||||||
|
@ -155,7 +154,6 @@ class SwitchingColumnsArea extends React.PureComponent {
|
||||||
<WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />
|
<WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />
|
||||||
|
|
||||||
<WrappedRoute path='/search' component={Compose} content={children} componentParams={{ isSearchPage: true }} />
|
<WrappedRoute path='/search' component={Compose} content={children} componentParams={{ isSearchPage: true }} />
|
||||||
<WrappedRoute path='/trends' component={Trends} content={children} />
|
|
||||||
|
|
||||||
<WrappedRoute path='/statuses/new' component={Compose} content={children} />
|
<WrappedRoute path='/statuses/new' component={Compose} content={children} />
|
||||||
<WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />
|
<WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />
|
||||||
|
|
|
@ -129,7 +129,3 @@ export function EmbedModal () {
|
||||||
export function ListEditor () {
|
export function ListEditor () {
|
||||||
return import(/* webpackChunkName: "features/list_editor" */'../../list_editor');
|
return import(/* webpackChunkName: "features/list_editor" */'../../list_editor');
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Trends () {
|
|
||||||
return import(/* webpackChunkName: "features/trends" */'../../trends');
|
|
||||||
}
|
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "متأكد من أنك تود حظر إسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.",
|
"confirmations.domain_block.message": "متأكد من أنك تود حظر إسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.",
|
||||||
"confirmations.mute.confirm": "أكتم",
|
"confirmations.mute.confirm": "أكتم",
|
||||||
"confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟",
|
"confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
||||||
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
||||||
"embed.instructions": "يمكنكم إدماج هذه الحالة على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
|
"embed.instructions": "يمكنكم إدماج هذه الحالة على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "رَقِّي",
|
"status.reblog": "رَقِّي",
|
||||||
"status.reblog_private": "القيام بالترقية إلى الجمهور الأصلي",
|
"status.reblog_private": "القيام بالترقية إلى الجمهور الأصلي",
|
||||||
"status.reblogged_by": "{name} رقى",
|
"status.reblogged_by": "{name} رقى",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "ردّ",
|
"status.reply": "ردّ",
|
||||||
"status.replyAll": "رُد على الخيط",
|
"status.replyAll": "رُد على الخيط",
|
||||||
"status.report": "إبلِغ عن @{name}",
|
"status.report": "إبلِغ عن @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
||||||
"upload_area.title": "إسحب ثم أفلت للرفع",
|
"upload_area.title": "إسحب ثم أفلت للرفع",
|
||||||
"upload_button.label": "إضافة وسائط",
|
"upload_button.label": "إضافة وسائط",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Споделяне",
|
"status.reblog": "Споделяне",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} сподели",
|
"status.reblogged_by": "{name} сподели",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Отговор",
|
"status.reply": "Отговор",
|
||||||
"status.replyAll": "Reply to thread",
|
"status.replyAll": "Reply to thread",
|
||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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": "Добави медия",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Estàs realment, realment segur que vols blocar totalment {domain}? En la majoria dels casos blocar o silenciar uns pocs objectius és suficient i preferible.",
|
"confirmations.domain_block.message": "Estàs realment, realment segur que vols blocar totalment {domain}? En la majoria dels casos blocar o silenciar uns pocs objectius és suficient i preferible.",
|
||||||
"confirmations.mute.confirm": "Silencia",
|
"confirmations.mute.confirm": "Silencia",
|
||||||
"confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
|
"confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Deixa de seguir",
|
"confirmations.unfollow.confirm": "Deixa de seguir",
|
||||||
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
|
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
|
||||||
"embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
|
"embed.instructions": "Incrusta aquest estat al lloc web copiant el codi a continuació.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Impuls",
|
"status.reblog": "Impuls",
|
||||||
"status.reblog_private": "Impulsar a l'audiència original",
|
"status.reblog_private": "Impulsar a l'audiència original",
|
||||||
"status.reblogged_by": "{name} ha retootejat",
|
"status.reblogged_by": "{name} ha retootejat",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Respondre",
|
"status.reply": "Respondre",
|
||||||
"status.replyAll": "Respondre al tema",
|
"status.replyAll": "Respondre al tema",
|
||||||
"status.report": "Informar sobre @{name}",
|
"status.report": "Informar sobre @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Site sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà.",
|
"confirmations.domain_block.message": "Site sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà.",
|
||||||
"confirmations.mute.confirm": "Piattà",
|
"confirmations.mute.confirm": "Piattà",
|
||||||
"confirmations.mute.message": "Site sicuru·a che vulete piattà @{name}?",
|
"confirmations.mute.message": "Site sicuru·a che vulete piattà @{name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Disabbunassi",
|
"confirmations.unfollow.confirm": "Disabbunassi",
|
||||||
"confirmations.unfollow.message": "Site sicuru·a ch'ùn vulete più siguità @{name}?",
|
"confirmations.unfollow.message": "Site sicuru·a ch'ùn vulete più siguità @{name}?",
|
||||||
"embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.",
|
"embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Sparte",
|
"status.reblog": "Sparte",
|
||||||
"status.reblog_private": "Sparte à l'audienza uriginale",
|
"status.reblog_private": "Sparte à l'audienza uriginale",
|
||||||
"status.reblogged_by": "{name} hà spartutu",
|
"status.reblogged_by": "{name} hà spartutu",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Risponde",
|
"status.reply": "Risponde",
|
||||||
"status.replyAll": "Risponde à tutti",
|
"status.replyAll": "Risponde à tutti",
|
||||||
"status.report": "Palisà @{name}",
|
"status.report": "Palisà @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} verbergen willst? In den meisten Fällen reichen ein paar gezielte Blocks aus.",
|
"confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} verbergen willst? In den meisten Fällen reichen ein paar gezielte Blocks aus.",
|
||||||
"confirmations.mute.confirm": "Stummschalten",
|
"confirmations.mute.confirm": "Stummschalten",
|
||||||
"confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?",
|
"confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Entfolgen",
|
"confirmations.unfollow.confirm": "Entfolgen",
|
||||||
"confirmations.unfollow.message": "Bist du dir sicher, dass du {name} entfolgen möchtest?",
|
"confirmations.unfollow.message": "Bist du dir sicher, dass du {name} entfolgen möchtest?",
|
||||||
"embed.instructions": "Du kannst diesen Beitrag auf deiner Webseite einbetten, indem du den folgenden Code einfügst.",
|
"embed.instructions": "Du kannst diesen Beitrag auf deiner Webseite einbetten, indem du den folgenden Code einfügst.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Teilen",
|
"status.reblog": "Teilen",
|
||||||
"status.reblog_private": "An das eigentliche Publikum teilen",
|
"status.reblog_private": "An das eigentliche Publikum teilen",
|
||||||
"status.reblogged_by": "{name} teilte",
|
"status.reblogged_by": "{name} teilte",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Antworten",
|
"status.reply": "Antworten",
|
||||||
"status.replyAll": "Auf Thread antworten",
|
"status.replyAll": "Auf Thread antworten",
|
||||||
"status.report": "@{name} melden",
|
"status.report": "@{name} melden",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -219,6 +219,10 @@
|
||||||
"defaultMessage": "Delete",
|
"defaultMessage": "Delete",
|
||||||
"id": "status.delete"
|
"id": "status.delete"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Delete & re-draft",
|
||||||
|
"id": "status.redraft"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "Direct message @{name}",
|
"defaultMessage": "Direct message @{name}",
|
||||||
"id": "status.direct"
|
"id": "status.direct"
|
||||||
|
@ -377,6 +381,14 @@
|
||||||
"defaultMessage": "Are you sure you want to delete this status?",
|
"defaultMessage": "Are you sure you want to delete this status?",
|
||||||
"id": "confirmations.delete.message"
|
"id": "confirmations.delete.message"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Delete & redraft",
|
||||||
|
"id": "confirmations.redraft.confirm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
|
"id": "confirmations.redraft.message"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "Block",
|
"defaultMessage": "Block",
|
||||||
"id": "confirmations.block.confirm"
|
"id": "confirmations.block.confirm"
|
||||||
|
@ -804,10 +816,6 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"descriptors": [
|
"descriptors": [
|
||||||
{
|
|
||||||
"defaultMessage": "Trending now",
|
|
||||||
"id": "trends.header"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"defaultMessage": "People",
|
"defaultMessage": "People",
|
||||||
"id": "search_results.accounts"
|
"id": "search_results.accounts"
|
||||||
|
@ -1036,23 +1044,6 @@
|
||||||
],
|
],
|
||||||
"path": "app/javascript/mastodon/features/follow_requests/index.json"
|
"path": "app/javascript/mastodon/features/follow_requests/index.json"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"descriptors": [
|
|
||||||
{
|
|
||||||
"defaultMessage": "Refresh",
|
|
||||||
"id": "trends.refresh"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"defaultMessage": "Trending now",
|
|
||||||
"id": "trends.header"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"defaultMessage": "Load more",
|
|
||||||
"id": "status.load_more"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"path": "app/javascript/mastodon/features/getting_started/components/trends.json"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"descriptors": [
|
"descriptors": [
|
||||||
{
|
{
|
||||||
|
@ -1507,6 +1498,10 @@
|
||||||
"defaultMessage": "Delete",
|
"defaultMessage": "Delete",
|
||||||
"id": "status.delete"
|
"id": "status.delete"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Delete & re-draft",
|
||||||
|
"id": "status.redraft"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "Direct message @{name}",
|
"defaultMessage": "Direct message @{name}",
|
||||||
"id": "status.direct"
|
"id": "status.direct"
|
||||||
|
@ -1588,6 +1583,14 @@
|
||||||
"defaultMessage": "Are you sure you want to delete this status?",
|
"defaultMessage": "Are you sure you want to delete this status?",
|
||||||
"id": "confirmations.delete.message"
|
"id": "confirmations.delete.message"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Delete & redraft",
|
||||||
|
"id": "confirmations.redraft.confirm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"defaultMessage": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
|
"id": "confirmations.redraft.message"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"defaultMessage": "Block",
|
"defaultMessage": "Block",
|
||||||
"id": "confirmations.block.confirm"
|
"id": "confirmations.block.confirm"
|
||||||
|
@ -1607,19 +1610,6 @@
|
||||||
],
|
],
|
||||||
"path": "app/javascript/mastodon/features/status/index.json"
|
"path": "app/javascript/mastodon/features/status/index.json"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"descriptors": [
|
|
||||||
{
|
|
||||||
"defaultMessage": "Trending now",
|
|
||||||
"id": "trends.header"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"defaultMessage": "Refresh trends",
|
|
||||||
"id": "trends.refresh"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"path": "app/javascript/mastodon/features/trends/index.json"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"descriptors": [
|
"descriptors": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Σίγουρα θες να μπλοκάρεις ολόκληρο το {domain}; Συνήθως μερικά εστιασμένα μπλοκ ή αποσιωπήσεις επαρκούν και προτιμούνται.",
|
"confirmations.domain_block.message": "Σίγουρα θες να μπλοκάρεις ολόκληρο το {domain}; Συνήθως μερικά εστιασμένα μπλοκ ή αποσιωπήσεις επαρκούν και προτιμούνται.",
|
||||||
"confirmations.mute.confirm": "Αποσιώπηση",
|
"confirmations.mute.confirm": "Αποσιώπηση",
|
||||||
"confirmations.mute.message": "Σίγουρα θες να αποσιωπήσεις τον/την {name};",
|
"confirmations.mute.message": "Σίγουρα θες να αποσιωπήσεις τον/την {name};",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Διακοπή παρακολούθησης",
|
"confirmations.unfollow.confirm": "Διακοπή παρακολούθησης",
|
||||||
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
|
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
|
||||||
"embed.instructions": "Ενσωματώστε αυτή την κατάσταση στην ιστοσελίδα σας αντιγράφοντας τον παρακάτω κώδικα.",
|
"embed.instructions": "Ενσωματώστε αυτή την κατάσταση στην ιστοσελίδα σας αντιγράφοντας τον παρακάτω κώδικα.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} boosted",
|
"status.reblogged_by": "{name} boosted",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Reply",
|
"status.reply": "Reply",
|
||||||
"status.replyAll": "Reply to thread",
|
"status.replyAll": "Reply to thread",
|
||||||
"status.report": "Καταγγελία @{name}",
|
"status.report": "Καταγγελία @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -87,6 +87,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -269,6 +271,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} boosted",
|
"status.reblogged_by": "{name} boosted",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Reply",
|
"status.reply": "Reply",
|
||||||
"status.replyAll": "Reply to thread",
|
"status.replyAll": "Reply to thread",
|
||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
|
@ -289,8 +292,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas.",
|
"confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas.",
|
||||||
"confirmations.mute.confirm": "Silentigi",
|
"confirmations.mute.confirm": "Silentigi",
|
||||||
"confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?",
|
"confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Ne plu sekvi",
|
"confirmations.unfollow.confirm": "Ne plu sekvi",
|
||||||
"confirmations.unfollow.message": "Ĉu vi certas, ke vi volas ĉesi sekvi {name}?",
|
"confirmations.unfollow.message": "Ĉu vi certas, ke vi volas ĉesi sekvi {name}?",
|
||||||
"embed.instructions": "Enkorpigu ĉi tiun mesaĝon en vian retejon per kopio de la suba kodo.",
|
"embed.instructions": "Enkorpigu ĉi tiun mesaĝon en vian retejon per kopio de la suba kodo.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Diskonigi",
|
"status.reblog": "Diskonigi",
|
||||||
"status.reblog_private": "Diskonigi al la originala atentaro",
|
"status.reblog_private": "Diskonigi al la originala atentaro",
|
||||||
"status.reblogged_by": "{name} diskonigis",
|
"status.reblogged_by": "{name} diskonigis",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Respondi",
|
"status.reply": "Respondi",
|
||||||
"status.replyAll": "Respondi al la fadeno",
|
"status.replyAll": "Respondi al la fadeno",
|
||||||
"status.report": "Signali @{name}",
|
"status.report": "Signali @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Aŭdovidaĵoj",
|
"timeline.media": "Aŭdovidaĵoj",
|
||||||
"timeline.posts": "Mesaĝoj",
|
"timeline.posts": "Mesaĝoj",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, pluraj, unu {person} alia(j) {people}} parolas",
|
"trends.count_by_accounts": "{count} {rawCount, pluraj, unu {person} alia(j) {people}} parolas",
|
||||||
"trends.header": "Nun furoras",
|
|
||||||
"trends.refresh": "Aktualigi",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio entero? En algunos casos es preferible bloquear o silenciar objetivos determinados.",
|
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio entero? En algunos casos es preferible bloquear o silenciar objetivos determinados.",
|
||||||
"confirmations.mute.confirm": "Silenciar",
|
"confirmations.mute.confirm": "Silenciar",
|
||||||
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
|
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||||
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
|
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
|
||||||
"embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
|
"embed.instructions": "Añade este toot a tu sitio web con el siguiente código.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Retootear",
|
"status.reblog": "Retootear",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "Retooteado por {name}",
|
"status.reblogged_by": "Retooteado por {name}",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Responder",
|
"status.reply": "Responder",
|
||||||
"status.replyAll": "Responder al hilo",
|
"status.replyAll": "Responder al hilo",
|
||||||
"status.report": "Reportar",
|
"status.report": "Reportar",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -13,14 +13,14 @@
|
||||||
"account.follows_you": "Jarraitzen dizu",
|
"account.follows_you": "Jarraitzen dizu",
|
||||||
"account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
|
"account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak",
|
||||||
"account.media": "Media",
|
"account.media": "Media",
|
||||||
"account.mention": "@{name} aipatu",
|
"account.mention": "Aipatu @{name}",
|
||||||
"account.moved_to": "{name} hona lekualdatu da:",
|
"account.moved_to": "{name} hona lekualdatu da:",
|
||||||
"account.mute": "Mututu @{name}",
|
"account.mute": "Mututu @{name}",
|
||||||
"account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
|
"account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
|
||||||
"account.muted": "Mutututa",
|
"account.muted": "Mutututa",
|
||||||
"account.posts": "Toot-ak",
|
"account.posts": "Toot-ak",
|
||||||
"account.posts_with_replies": "Toot eta erantzunak",
|
"account.posts_with_replies": "Toot eta erantzunak",
|
||||||
"account.report": "@{name} salatu",
|
"account.report": "Salatu @{name}",
|
||||||
"account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
|
"account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
|
||||||
"account.share": "@{name}(e)ren profila elkarbanatu",
|
"account.share": "@{name}(e)ren profila elkarbanatu",
|
||||||
"account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
|
"account.show_reblogs": "Erakutsi @{name}(r)en bultzadak",
|
||||||
|
@ -67,8 +67,8 @@
|
||||||
"compose_form.placeholder": "Zer duzu buruan?",
|
"compose_form.placeholder": "Zer duzu buruan?",
|
||||||
"compose_form.publish": "Toot",
|
"compose_form.publish": "Toot",
|
||||||
"compose_form.publish_loud": "{publish}!",
|
"compose_form.publish_loud": "{publish}!",
|
||||||
"compose_form.sensitive.marked": "Multimedia mingarri gisa markatu da",
|
"compose_form.sensitive.marked": "Multimedia edukia hunkigarri gisa markatu da",
|
||||||
"compose_form.sensitive.unmarked": "Multimedia ez da mingarri gisa markatu",
|
"compose_form.sensitive.unmarked": "Multimedia edukia ez da hunkigarri gisa markatu",
|
||||||
"compose_form.spoiler.marked": "Testua abisu batek ezkutatzen du",
|
"compose_form.spoiler.marked": "Testua abisu batek ezkutatzen du",
|
||||||
"compose_form.spoiler.unmarked": "Testua ez dago ezkutatuta",
|
"compose_form.spoiler.unmarked": "Testua ez dago ezkutatuta",
|
||||||
"compose_form.spoiler_placeholder": "Idatzi zure abisua hemen",
|
"compose_form.spoiler_placeholder": "Idatzi zure abisua hemen",
|
||||||
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Ziur, erabat ziur, {domain} domeinu osoa blokeatu nahi duzula? Gehienetan gutxi batzuk blokeatu edo mututzearekin nahikoa da.",
|
"confirmations.domain_block.message": "Ziur, erabat ziur, {domain} domeinu osoa blokeatu nahi duzula? Gehienetan gutxi batzuk blokeatu edo mututzearekin nahikoa da.",
|
||||||
"confirmations.mute.confirm": "Mututu",
|
"confirmations.mute.confirm": "Mututu",
|
||||||
"confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
|
"confirmations.mute.message": "Ziur {name} mututu nahi duzula?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Utzi jarraitzeari",
|
"confirmations.unfollow.confirm": "Utzi jarraitzeari",
|
||||||
"confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
|
"confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
|
||||||
"embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.",
|
"embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.",
|
||||||
|
@ -264,11 +266,12 @@
|
||||||
"status.reblog": "Bultzada",
|
"status.reblog": "Bultzada",
|
||||||
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
|
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
|
||||||
"status.reblogged_by": "{name}(r)en bultzada",
|
"status.reblogged_by": "{name}(r)en bultzada",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Erantzun",
|
"status.reply": "Erantzun",
|
||||||
"status.replyAll": "Erantzun harian",
|
"status.replyAll": "Erantzun harian",
|
||||||
"status.report": "Salatu @{name}",
|
"status.report": "Salatu @{name}",
|
||||||
"status.sensitive_toggle": "Egin klik ikusteko",
|
"status.sensitive_toggle": "Egin klik ikusteko",
|
||||||
"status.sensitive_warning": "Eduki mingarria",
|
"status.sensitive_warning": "Eduki hunkigarria",
|
||||||
"status.share": "Partekatu",
|
"status.share": "Partekatu",
|
||||||
"status.show_less": "Erakutsi gutxiago",
|
"status.show_less": "Erakutsi gutxiago",
|
||||||
"status.show_less_all": "Erakutsi denetarik gutxiago",
|
"status.show_less_all": "Erakutsi denetarik gutxiago",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toot-ak",
|
"timeline.posts": "Toot-ak",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten",
|
||||||
"trends.header": "Joera orain",
|
|
||||||
"trends.refresh": "Freskatu",
|
|
||||||
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
|
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
|
||||||
"upload_area.title": "Arrastatu eta jaregin igotzeko",
|
"upload_area.title": "Arrastatu eta jaregin igotzeko",
|
||||||
"upload_button.label": "Gehitu multimedia",
|
"upload_button.label": "Gehitu multimedia",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "آیا جدی جدی میخواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقتها مسدودکردن یا بیصداکردن چند حساب کاربری خاص کافی است و توصیه میشود.",
|
"confirmations.domain_block.message": "آیا جدی جدی میخواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقتها مسدودکردن یا بیصداکردن چند حساب کاربری خاص کافی است و توصیه میشود.",
|
||||||
"confirmations.mute.confirm": "بیصدا کن",
|
"confirmations.mute.confirm": "بیصدا کن",
|
||||||
"confirmations.mute.message": "آیا واقعاً میخواهید {name} را بیصدا کنید؟",
|
"confirmations.mute.message": "آیا واقعاً میخواهید {name} را بیصدا کنید؟",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "لغو پیگیری",
|
"confirmations.unfollow.confirm": "لغو پیگیری",
|
||||||
"confirmations.unfollow.message": "آیا واقعاً میخواهید به پیگیری از {name} پایان دهید؟",
|
"confirmations.unfollow.message": "آیا واقعاً میخواهید به پیگیری از {name} پایان دهید؟",
|
||||||
"embed.instructions": "برای جاگذاری این نوشته در سایت خودتان، کد زیر را کپی کنید.",
|
"embed.instructions": "برای جاگذاری این نوشته در سایت خودتان، کد زیر را کپی کنید.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "بازبوقیدن",
|
"status.reblog": "بازبوقیدن",
|
||||||
"status.reblog_private": "بازبوق به مخاطبان اولیه",
|
"status.reblog_private": "بازبوق به مخاطبان اولیه",
|
||||||
"status.reblogged_by": "{name} بازبوقید",
|
"status.reblogged_by": "{name} بازبوقید",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "پاسخ",
|
"status.reply": "پاسخ",
|
||||||
"status.replyAll": "به نوشته پاسخ دهید",
|
"status.replyAll": "به نوشته پاسخ دهید",
|
||||||
"status.report": "گزارش دادن @{name}",
|
"status.report": "گزارش دادن @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "عکس و ویدیو",
|
"timeline.media": "عکس و ویدیو",
|
||||||
"timeline.posts": "بوقها",
|
"timeline.posts": "بوقها",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشتهاند}}",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشتهاند}}",
|
||||||
"trends.header": "موضوعات داغ",
|
|
||||||
"trends.refresh": "بهروزرسانی",
|
|
||||||
"ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.",
|
"ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.",
|
||||||
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
||||||
"upload_button.label": "افزودن تصویر",
|
"upload_button.label": "افزودن تصویر",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.",
|
"confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.",
|
||||||
"confirmations.mute.confirm": "Mykistä",
|
"confirmations.mute.confirm": "Mykistä",
|
||||||
"confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?",
|
"confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Lakkaa seuraamasta",
|
"confirmations.unfollow.confirm": "Lakkaa seuraamasta",
|
||||||
"confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?",
|
"confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?",
|
||||||
"embed.instructions": "Upota statuspäivitys sivullesi kopioimalla alla oleva koodi.",
|
"embed.instructions": "Upota statuspäivitys sivullesi kopioimalla alla oleva koodi.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Buustaa",
|
"status.reblog": "Buustaa",
|
||||||
"status.reblog_private": "Buustaa alkuperäiselle yleisölle",
|
"status.reblog_private": "Buustaa alkuperäiselle yleisölle",
|
||||||
"status.reblogged_by": "{name} buustasi",
|
"status.reblogged_by": "{name} buustasi",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Vastaa",
|
"status.reply": "Vastaa",
|
||||||
"status.replyAll": "Vastaa ketjuun",
|
"status.replyAll": "Vastaa ketjuun",
|
||||||
"status.report": "Raportoi @{name}",
|
"status.report": "Raportoi @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables.",
|
"confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables.",
|
||||||
"confirmations.mute.confirm": "Masquer",
|
"confirmations.mute.confirm": "Masquer",
|
||||||
"confirmations.mute.message": "Confirmez-vous le masquage de {name} ?",
|
"confirmations.mute.message": "Confirmez-vous le masquage de {name} ?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Ne plus suivre",
|
"confirmations.unfollow.confirm": "Ne plus suivre",
|
||||||
"confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?",
|
"confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?",
|
||||||
"embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
|
"embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Partager",
|
"status.reblog": "Partager",
|
||||||
"status.reblog_private": "Booster vers l'audience originale",
|
"status.reblog_private": "Booster vers l'audience originale",
|
||||||
"status.reblogged_by": "{name} a partagé :",
|
"status.reblogged_by": "{name} a partagé :",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Répondre",
|
"status.reply": "Répondre",
|
||||||
"status.replyAll": "Répondre au fil",
|
"status.replyAll": "Répondre au fil",
|
||||||
"status.report": "Signaler @{name}",
|
"status.report": "Signaler @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Pouets",
|
"timeline.posts": "Pouets",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Realmente está segura de que quere bloquear por completo o dominio {domain}? Normalmente é suficiente, e preferible, bloquear de xeito selectivo varios elementos.",
|
"confirmations.domain_block.message": "Realmente está segura de que quere bloquear por completo o dominio {domain}? Normalmente é suficiente, e preferible, bloquear de xeito selectivo varios elementos.",
|
||||||
"confirmations.mute.confirm": "Acalar",
|
"confirmations.mute.confirm": "Acalar",
|
||||||
"confirmations.mute.message": "Está segura de que quere acalar a {name}?",
|
"confirmations.mute.message": "Está segura de que quere acalar a {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "Quere deixar de seguir a {name}?",
|
"confirmations.unfollow.message": "Quere deixar de seguir a {name}?",
|
||||||
"embed.instructions": "Copie o código inferior para incrustar no seu sitio web este estado.",
|
"embed.instructions": "Copie o código inferior para incrustar no seu sitio web este estado.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Promover",
|
"status.reblog": "Promover",
|
||||||
"status.reblog_private": "Promover a audiencia orixinal",
|
"status.reblog_private": "Promover a audiencia orixinal",
|
||||||
"status.reblogged_by": "{name} promoveu",
|
"status.reblogged_by": "{name} promoveu",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Resposta",
|
"status.reply": "Resposta",
|
||||||
"status.replyAll": "Resposta a conversa",
|
"status.replyAll": "Resposta a conversa",
|
||||||
"status.report": "Informar @{name}",
|
"status.report": "Informar @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "באמת באמת לחסום את כל קהילת {domain}? ברב המקרים השתקות נבחרות של מספר משתמשים מסויימים צריכה להספיק.",
|
"confirmations.domain_block.message": "באמת באמת לחסום את כל קהילת {domain}? ברב המקרים השתקות נבחרות של מספר משתמשים מסויימים צריכה להספיק.",
|
||||||
"confirmations.mute.confirm": "להשתיק",
|
"confirmations.mute.confirm": "להשתיק",
|
||||||
"confirmations.mute.message": "להשתיק את {name}?",
|
"confirmations.mute.message": "להשתיק את {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "להפסיק מעקב",
|
"confirmations.unfollow.confirm": "להפסיק מעקב",
|
||||||
"confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?",
|
"confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?",
|
||||||
"embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.",
|
"embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "הדהוד",
|
"status.reblog": "הדהוד",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "הודהד על ידי {name}",
|
"status.reblogged_by": "הודהד על ידי {name}",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "תגובה",
|
"status.reply": "תגובה",
|
||||||
"status.replyAll": "תגובה לכולם",
|
"status.replyAll": "תגובה לכולם",
|
||||||
"status.report": "דיווח על @{name}",
|
"status.report": "דיווח על @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
||||||
"upload_area.title": "ניתן להעלות על ידי Drag & drop",
|
"upload_area.title": "ניתן להעלות על ידי Drag & drop",
|
||||||
"upload_button.label": "הוספת מדיה",
|
"upload_button.label": "הוספת מדיה",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Utišaj",
|
"confirmations.mute.confirm": "Utišaj",
|
||||||
"confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?",
|
"confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Podigni",
|
"status.reblog": "Podigni",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} je podigao",
|
"status.reblogged_by": "{name} je podigao",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Odgovori",
|
"status.reply": "Odgovori",
|
||||||
"status.replyAll": "Odgovori na temu",
|
"status.replyAll": "Odgovori na temu",
|
||||||
"status.report": "Prijavi @{name}",
|
"status.report": "Prijavi @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Nagyon biztos abban, hogy le szeretné tiltani az egész {domain}-t? A legtöbb esetben néhány célszerű tiltás vagy némítás elegendő és kívánatosabb megoldás.",
|
"confirmations.domain_block.message": "Nagyon biztos abban, hogy le szeretné tiltani az egész {domain}-t? A legtöbb esetben néhány célszerű tiltás vagy némítás elegendő és kívánatosabb megoldás.",
|
||||||
"confirmations.mute.confirm": "Némít",
|
"confirmations.mute.confirm": "Némít",
|
||||||
"confirmations.mute.message": "Biztos benne, hogy némítani szeretné {name}?",
|
"confirmations.mute.message": "Biztos benne, hogy némítani szeretné {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Követés visszavonása",
|
"confirmations.unfollow.confirm": "Követés visszavonása",
|
||||||
"confirmations.unfollow.message": "Biztos benne, hogy vissza szeretné vonni {name} követését?",
|
"confirmations.unfollow.message": "Biztos benne, hogy vissza szeretné vonni {name} követését?",
|
||||||
"embed.instructions": "Ágyazza be ezen státuszt weboldalába az alábbi kód másolásával.",
|
"embed.instructions": "Ágyazza be ezen státuszt weboldalába az alábbi kód másolásával.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Reblog",
|
"status.reblog": "Reblog",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} reblogolta",
|
"status.reblogged_by": "{name} reblogolta",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Válasz",
|
"status.reply": "Válasz",
|
||||||
"status.replyAll": "Válaszolj a beszélgetésre",
|
"status.replyAll": "Válaszolj a beszélgetésre",
|
||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։",
|
"confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։",
|
||||||
"confirmations.mute.confirm": "Լռեցնել",
|
"confirmations.mute.confirm": "Լռեցնել",
|
||||||
"confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։",
|
"confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Ապահետեւել",
|
"confirmations.unfollow.confirm": "Ապահետեւել",
|
||||||
"confirmations.unfollow.message": "Վստա՞հ ես, որ ուզում ես այլեւս չհետեւել {name}֊ին։",
|
"confirmations.unfollow.message": "Վստա՞հ ես, որ ուզում ես այլեւս չհետեւել {name}֊ին։",
|
||||||
"embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճենել ներքոհիշյալ կոդը։",
|
"embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճենել ներքոհիշյալ կոդը։",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Տարածել",
|
"status.reblog": "Տարածել",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} տարածել է",
|
"status.reblogged_by": "{name} տարածել է",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Պատասխանել",
|
"status.reply": "Պատասխանել",
|
||||||
"status.replyAll": "Պատասխանել թելին",
|
"status.replyAll": "Պատասխանել թելին",
|
||||||
"status.report": "Բողոքել @{name}֊ից",
|
"status.report": "Բողոքել @{name}֊ից",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
||||||
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
|
"upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար",
|
||||||
"upload_button.label": "Ավելացնել մեդիա",
|
"upload_button.label": "Ավելացնել մեդիա",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Apakah anda benar benar yakin untuk memblokir keseluruhan {domain}? Dalam kasus tertentu beberapa pemblokiran atau penyembunyian lebih baik.",
|
"confirmations.domain_block.message": "Apakah anda benar benar yakin untuk memblokir keseluruhan {domain}? Dalam kasus tertentu beberapa pemblokiran atau penyembunyian lebih baik.",
|
||||||
"confirmations.mute.confirm": "Bisukan",
|
"confirmations.mute.confirm": "Bisukan",
|
||||||
"confirmations.mute.message": "Apa anda yakin ingin membisukan {name}?",
|
"confirmations.mute.message": "Apa anda yakin ingin membisukan {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Berhenti mengikuti",
|
"confirmations.unfollow.confirm": "Berhenti mengikuti",
|
||||||
"confirmations.unfollow.message": "Apakah anda ingin berhenti mengikuti {name}?",
|
"confirmations.unfollow.message": "Apakah anda ingin berhenti mengikuti {name}?",
|
||||||
"embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.",
|
"embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "di-boost {name}",
|
"status.reblogged_by": "di-boost {name}",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Balas",
|
"status.reply": "Balas",
|
||||||
"status.replyAll": "Balas ke semua",
|
"status.replyAll": "Balas ke semua",
|
||||||
"status.report": "Laporkan @{name}",
|
"status.report": "Laporkan @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Repetar",
|
"status.reblog": "Repetar",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} repetita",
|
"status.reblogged_by": "{name} repetita",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Respondar",
|
"status.reply": "Respondar",
|
||||||
"status.replyAll": "Respondar a filo",
|
"status.replyAll": "Respondar a filo",
|
||||||
"status.report": "Denuncar @{name}",
|
"status.report": "Denuncar @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Sei davvero sicuro che vuoi bloccare l'intero {domain}? Nella maggior parte dei casi, pochi blocchi o silenziamenti mirati sono sufficienti e preferibili.",
|
"confirmations.domain_block.message": "Sei davvero sicuro che vuoi bloccare l'intero {domain}? Nella maggior parte dei casi, pochi blocchi o silenziamenti mirati sono sufficienti e preferibili.",
|
||||||
"confirmations.mute.confirm": "Silenzia",
|
"confirmations.mute.confirm": "Silenzia",
|
||||||
"confirmations.mute.message": "Sei sicuro di voler silenziare {name}?",
|
"confirmations.mute.message": "Sei sicuro di voler silenziare {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Smetti di seguire",
|
"confirmations.unfollow.confirm": "Smetti di seguire",
|
||||||
"confirmations.unfollow.message": "Sei sicuro che non vuoi più seguire {name}?",
|
"confirmations.unfollow.message": "Sei sicuro che non vuoi più seguire {name}?",
|
||||||
"embed.instructions": "Inserisci questo status nel tuo sito copiando il codice qui sotto.",
|
"embed.instructions": "Inserisci questo status nel tuo sito copiando il codice qui sotto.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Condividi",
|
"status.reblog": "Condividi",
|
||||||
"status.reblog_private": "Condividi con i destinatari iniziali",
|
"status.reblog_private": "Condividi con i destinatari iniziali",
|
||||||
"status.reblogged_by": "{name} ha condiviso",
|
"status.reblogged_by": "{name} ha condiviso",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Rispondi",
|
"status.reply": "Rispondi",
|
||||||
"status.replyAll": "Rispondi alla conversazione",
|
"status.replyAll": "Rispondi alla conversazione",
|
||||||
"status.report": "Segnala @{name}",
|
"status.report": "Segnala @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -87,6 +87,8 @@
|
||||||
"confirmations.domain_block.message": "本当に{domain}全体を非表示にしますか? 多くの場合は個別にブロックやミュートするだけで充分であり、また好ましいです。",
|
"confirmations.domain_block.message": "本当に{domain}全体を非表示にしますか? 多くの場合は個別にブロックやミュートするだけで充分であり、また好ましいです。",
|
||||||
"confirmations.mute.confirm": "ミュート",
|
"confirmations.mute.confirm": "ミュート",
|
||||||
"confirmations.mute.message": "本当に{name}さんをミュートしますか?",
|
"confirmations.mute.message": "本当に{name}さんをミュートしますか?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "フォロー解除",
|
"confirmations.unfollow.confirm": "フォロー解除",
|
||||||
"confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?",
|
"confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?",
|
||||||
"embed.instructions": "下記のコードをコピーしてウェブサイトに埋め込みます。",
|
"embed.instructions": "下記のコードをコピーしてウェブサイトに埋め込みます。",
|
||||||
|
@ -269,6 +271,7 @@
|
||||||
"status.reblog": "ブースト",
|
"status.reblog": "ブースト",
|
||||||
"status.reblog_private": "ブースト",
|
"status.reblog_private": "ブースト",
|
||||||
"status.reblogged_by": "{name}さんがブースト",
|
"status.reblogged_by": "{name}さんがブースト",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "返信",
|
"status.reply": "返信",
|
||||||
"status.replyAll": "全員に返信",
|
"status.replyAll": "全員に返信",
|
||||||
"status.report": "@{name}さんを通報",
|
"status.report": "@{name}さんを通報",
|
||||||
|
@ -289,8 +292,6 @@
|
||||||
"timeline.media": "メディア",
|
"timeline.media": "メディア",
|
||||||
"timeline.posts": "投稿",
|
"timeline.posts": "投稿",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {人} other {人}} がトゥート",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {人} other {人}} がトゥート",
|
||||||
"trends.header": "トレンドタグ",
|
|
||||||
"trends.refresh": "更新",
|
|
||||||
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
|
||||||
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
"upload_area.title": "ドラッグ&ドロップでアップロード",
|
||||||
"upload_button.label": "メディアを追加",
|
"upload_button.label": "メディアを追加",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "정말로 {domain} 전체를 숨기시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다.",
|
"confirmations.domain_block.message": "정말로 {domain} 전체를 숨기시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다.",
|
||||||
"confirmations.mute.confirm": "뮤트",
|
"confirmations.mute.confirm": "뮤트",
|
||||||
"confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
|
"confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "언팔로우",
|
"confirmations.unfollow.confirm": "언팔로우",
|
||||||
"confirmations.unfollow.message": "정말로 {name}를 언팔로우하시겠습니까?",
|
"confirmations.unfollow.message": "정말로 {name}를 언팔로우하시겠습니까?",
|
||||||
"embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",
|
"embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "부스트",
|
"status.reblog": "부스트",
|
||||||
"status.reblog_private": "원래의 수신자들에게 부스트",
|
"status.reblog_private": "원래의 수신자들에게 부스트",
|
||||||
"status.reblogged_by": "{name}님이 부스트 했습니다",
|
"status.reblogged_by": "{name}님이 부스트 했습니다",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "답장",
|
"status.reply": "답장",
|
||||||
"status.replyAll": "전원에게 답장",
|
"status.replyAll": "전원에게 답장",
|
||||||
"status.report": "신고",
|
"status.report": "신고",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
||||||
"upload_area.title": "드래그 & 드롭으로 업로드",
|
"upload_area.title": "드래그 & 드롭으로 업로드",
|
||||||
"upload_button.label": "미디어 추가",
|
"upload_button.label": "미디어 추가",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Weet je het echt heel erg zeker dat je alles van {domain} wil negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en gepaster.",
|
"confirmations.domain_block.message": "Weet je het echt heel erg zeker dat je alles van {domain} wil negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en gepaster.",
|
||||||
"confirmations.mute.confirm": "Negeren",
|
"confirmations.mute.confirm": "Negeren",
|
||||||
"confirmations.mute.message": "Weet je het zeker dat je {name} wilt negeren?",
|
"confirmations.mute.message": "Weet je het zeker dat je {name} wilt negeren?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Ontvolgen",
|
"confirmations.unfollow.confirm": "Ontvolgen",
|
||||||
"confirmations.unfollow.message": "Weet je het zeker dat je {name} wilt ontvolgen?",
|
"confirmations.unfollow.message": "Weet je het zeker dat je {name} wilt ontvolgen?",
|
||||||
"embed.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.",
|
"embed.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
|
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
|
||||||
"status.reblogged_by": "{name} boostte",
|
"status.reblogged_by": "{name} boostte",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Reageren",
|
"status.reply": "Reageren",
|
||||||
"status.replyAll": "Reageer op iedereen",
|
"status.replyAll": "Reageer op iedereen",
|
||||||
"status.report": "Rapporteer @{name}",
|
"status.report": "Rapporteer @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
|
||||||
"trends.header": "Trends",
|
|
||||||
"trends.refresh": "Vernieuwen",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Er du sikker på at du vil skjule hele domenet {domain}? I de fleste tilfeller er det bedre med målrettet blokkering eller demping.",
|
"confirmations.domain_block.message": "Er du sikker på at du vil skjule hele domenet {domain}? I de fleste tilfeller er det bedre med målrettet blokkering eller demping.",
|
||||||
"confirmations.mute.confirm": "Demp",
|
"confirmations.mute.confirm": "Demp",
|
||||||
"confirmations.mute.message": "Er du sikker på at du vil dempe {name}?",
|
"confirmations.mute.message": "Er du sikker på at du vil dempe {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Slutt å følge",
|
"confirmations.unfollow.confirm": "Slutt å følge",
|
||||||
"confirmations.unfollow.message": "Er du sikker på at du vil slutte å følge {name}?",
|
"confirmations.unfollow.message": "Er du sikker på at du vil slutte å følge {name}?",
|
||||||
"embed.instructions": "Kopier koden under for å bygge inn denne statusen på hjemmesiden din.",
|
"embed.instructions": "Kopier koden under for å bygge inn denne statusen på hjemmesiden din.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Fremhev",
|
"status.reblog": "Fremhev",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "Fremhevd av {name}",
|
"status.reblogged_by": "Fremhevd av {name}",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Svar",
|
"status.reply": "Svar",
|
||||||
"status.replyAll": "Svar til samtale",
|
"status.replyAll": "Svar til samtale",
|
||||||
"status.report": "Rapporter @{name}",
|
"status.report": "Rapporter @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Volètz vertadièrament blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.",
|
"confirmations.domain_block.message": "Volètz vertadièrament blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.",
|
||||||
"confirmations.mute.confirm": "Rescondre",
|
"confirmations.mute.confirm": "Rescondre",
|
||||||
"confirmations.mute.message": "Sètz segur de voler rescondre {name} ?",
|
"confirmations.mute.message": "Sètz segur de voler rescondre {name} ?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Quitar de sègre",
|
"confirmations.unfollow.confirm": "Quitar de sègre",
|
||||||
"confirmations.unfollow.message": "Volètz vertadièrament quitar de sègre {name} ?",
|
"confirmations.unfollow.message": "Volètz vertadièrament quitar de sègre {name} ?",
|
||||||
"embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
|
"embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Partejar",
|
"status.reblog": "Partejar",
|
||||||
"status.reblog_private": "Partejar a l’audiéncia d’origina",
|
"status.reblog_private": "Partejar a l’audiéncia d’origina",
|
||||||
"status.reblogged_by": "{name} a partejat",
|
"status.reblogged_by": "{name} a partejat",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Respondre",
|
"status.reply": "Respondre",
|
||||||
"status.replyAll": "Respondre a la conversacion",
|
"status.replyAll": "Respondre a la conversacion",
|
||||||
"status.report": "Senhalar @{name}",
|
"status.report": "Senhalar @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Tuts",
|
"timeline.posts": "Tuts",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran",
|
||||||
"trends.header": "Tendéncia actuala",
|
|
||||||
"trends.refresh": "Actualizar",
|
|
||||||
"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",
|
||||||
|
|
|
@ -87,6 +87,8 @@
|
||||||
"confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.",
|
"confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.",
|
||||||
"confirmations.mute.confirm": "Wycisz",
|
"confirmations.mute.confirm": "Wycisz",
|
||||||
"confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?",
|
"confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Usuń i przeredaguj",
|
||||||
|
"confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Utracisz wszystkie odpowiedzi, podbicia i polubienia dotyczące go.",
|
||||||
"confirmations.unfollow.confirm": "Przestań śledzić",
|
"confirmations.unfollow.confirm": "Przestań śledzić",
|
||||||
"confirmations.unfollow.message": "Czy na pewno zamierzasz przestać śledzić {name}?",
|
"confirmations.unfollow.message": "Czy na pewno zamierzasz przestać śledzić {name}?",
|
||||||
"embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.",
|
"embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.",
|
||||||
|
@ -269,6 +271,7 @@
|
||||||
"status.reblog": "Podbij",
|
"status.reblog": "Podbij",
|
||||||
"status.reblog_private": "Podbij dla odbiorców oryginalnego wpisu",
|
"status.reblog_private": "Podbij dla odbiorców oryginalnego wpisu",
|
||||||
"status.reblogged_by": "{name} podbił",
|
"status.reblogged_by": "{name} podbił",
|
||||||
|
"status.redraft": "Usuń i przeredaguj",
|
||||||
"status.reply": "Odpowiedz",
|
"status.reply": "Odpowiedz",
|
||||||
"status.replyAll": "Odpowiedz na wątek",
|
"status.replyAll": "Odpowiedz na wątek",
|
||||||
"status.report": "Zgłoś @{name}",
|
"status.report": "Zgłoś @{name}",
|
||||||
|
@ -289,8 +292,6 @@
|
||||||
"timeline.media": "Zawartość multimedialna",
|
"timeline.media": "Zawartość multimedialna",
|
||||||
"timeline.posts": "Wpisy",
|
"timeline.posts": "Wpisy",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym",
|
||||||
"trends.header": "Na czasie",
|
|
||||||
"trends.refresh": "Odśwież",
|
|
||||||
"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ą",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Você quer mesmo bloquear {domain} inteiro? Na maioria dos casos, silenciar ou bloquear alguns usuários é o suficiente e o recomendado.",
|
"confirmations.domain_block.message": "Você quer mesmo bloquear {domain} inteiro? Na maioria dos casos, silenciar ou bloquear alguns usuários é o suficiente e o recomendado.",
|
||||||
"confirmations.mute.confirm": "Silenciar",
|
"confirmations.mute.confirm": "Silenciar",
|
||||||
"confirmations.mute.message": "Você tem certeza de que quer silenciar {name}?",
|
"confirmations.mute.message": "Você tem certeza de que quer silenciar {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "Você tem certeza de que quer deixar de seguir {name}?",
|
"confirmations.unfollow.message": "Você tem certeza de que quer deixar de seguir {name}?",
|
||||||
"embed.instructions": "Incorpore esta postagem em seu site copiando o código abaixo.",
|
"embed.instructions": "Incorpore esta postagem em seu site copiando o código abaixo.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Compartilhar",
|
"status.reblog": "Compartilhar",
|
||||||
"status.reblog_private": "Compartilhar com a audiência original",
|
"status.reblog_private": "Compartilhar com a audiência original",
|
||||||
"status.reblogged_by": "{name} compartilhou",
|
"status.reblogged_by": "{name} compartilhou",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Responder",
|
"status.reply": "Responder",
|
||||||
"status.replyAll": "Responder à sequência",
|
"status.replyAll": "Responder à sequência",
|
||||||
"status.report": "Denunciar @{name}",
|
"status.report": "Denunciar @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre",
|
||||||
"trends.header": "Hashtags do momento",
|
|
||||||
"trends.refresh": "Atualizar",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "De certeza que queres bloquear por completo o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é o suficiente e o recomendado.",
|
"confirmations.domain_block.message": "De certeza que queres bloquear por completo o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é o suficiente e o recomendado.",
|
||||||
"confirmations.mute.confirm": "Silenciar",
|
"confirmations.mute.confirm": "Silenciar",
|
||||||
"confirmations.mute.message": "De certeza que queres silenciar {name}?",
|
"confirmations.mute.message": "De certeza que queres silenciar {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?",
|
"confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?",
|
||||||
"embed.instructions": "Publicar este post num outro site copiando o código abaixo.",
|
"embed.instructions": "Publicar este post num outro site copiando o código abaixo.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Partilhar",
|
"status.reblog": "Partilhar",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} partilhou",
|
"status.reblogged_by": "{name} partilhou",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Responder",
|
"status.reply": "Responder",
|
||||||
"status.replyAll": "Responder à conversa",
|
"status.replyAll": "Responder à conversa",
|
||||||
"status.report": "Denunciar @{name}",
|
"status.report": "Denunciar @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Вы на самом деле уверены, что хотите блокировать весь {domain}? В большинстве случаев нескольких отдельных блокировок или глушений достаточно.",
|
"confirmations.domain_block.message": "Вы на самом деле уверены, что хотите блокировать весь {domain}? В большинстве случаев нескольких отдельных блокировок или глушений достаточно.",
|
||||||
"confirmations.mute.confirm": "Заглушить",
|
"confirmations.mute.confirm": "Заглушить",
|
||||||
"confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?",
|
"confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Отписаться",
|
"confirmations.unfollow.confirm": "Отписаться",
|
||||||
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
"confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?",
|
||||||
"embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.",
|
"embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Продвинуть",
|
"status.reblog": "Продвинуть",
|
||||||
"status.reblog_private": "Продвинуть для своей аудитории",
|
"status.reblog_private": "Продвинуть для своей аудитории",
|
||||||
"status.reblogged_by": "{name} продвинул(а)",
|
"status.reblogged_by": "{name} продвинул(а)",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Ответить",
|
"status.reply": "Ответить",
|
||||||
"status.replyAll": "Ответить на тред",
|
"status.replyAll": "Ответить на тред",
|
||||||
"status.report": "Пожаловаться",
|
"status.report": "Пожаловаться",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
"ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.",
|
||||||
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
"upload_area.title": "Перетащите сюда, чтобы загрузить",
|
||||||
"upload_button.label": "Добавить медиаконтент",
|
"upload_button.label": "Добавить медиаконтент",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Ste si naozaj istý, že chcete blokovať celú {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať daných používateľov, čiže to sa doporučuje.",
|
"confirmations.domain_block.message": "Ste si naozaj istý, že chcete blokovať celú {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať daných používateľov, čiže to sa doporučuje.",
|
||||||
"confirmations.mute.confirm": "Ignoruj",
|
"confirmations.mute.confirm": "Ignoruj",
|
||||||
"confirmations.mute.message": "Naozaj chcete ignorovať {name}?",
|
"confirmations.mute.message": "Naozaj chcete ignorovať {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Nesledovať",
|
"confirmations.unfollow.confirm": "Nesledovať",
|
||||||
"confirmations.unfollow.message": "Naozaj chcete prestať sledovať {name}?",
|
"confirmations.unfollow.message": "Naozaj chcete prestať sledovať {name}?",
|
||||||
"embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.",
|
"embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Povýšiť",
|
"status.reblog": "Povýšiť",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} povýšil/a",
|
"status.reblogged_by": "{name} povýšil/a",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Odpovedať",
|
"status.reply": "Odpovedať",
|
||||||
"status.replyAll": "Odpovedať na diskusiu",
|
"status.replyAll": "Odpovedať na diskusiu",
|
||||||
"status.report": "Nahlásiť @{name}",
|
"status.report": "Nahlásiť @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Príspevky",
|
"timeline.posts": "Príspevky",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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á",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše.",
|
"confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše.",
|
||||||
"confirmations.mute.confirm": "Utišanje",
|
"confirmations.mute.confirm": "Utišanje",
|
||||||
"confirmations.mute.message": "Ali ste prepričani, da želite utišati {name}?",
|
"confirmations.mute.message": "Ali ste prepričani, da želite utišati {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Prenehaj slediti",
|
"confirmations.unfollow.confirm": "Prenehaj slediti",
|
||||||
"confirmations.unfollow.message": "Ali ste prepričani, da ne želite več slediti {name}?",
|
"confirmations.unfollow.message": "Ali ste prepričani, da ne želite več slediti {name}?",
|
||||||
"embed.instructions": "Vstavi ta status na svojo spletno stran tako, da kopirate spodnjo kodo.",
|
"embed.instructions": "Vstavi ta status na svojo spletno stran tako, da kopirate spodnjo kodo.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Suni",
|
"status.reblog": "Suni",
|
||||||
"status.reblog_private": "Suni v prvotno občinstvo",
|
"status.reblog_private": "Suni v prvotno občinstvo",
|
||||||
"status.reblogged_by": "{name} sunjen",
|
"status.reblogged_by": "{name} sunjen",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Odgovori",
|
"status.reply": "Odgovori",
|
||||||
"status.replyAll": "Odgovori na objavo",
|
"status.replyAll": "Odgovori na objavo",
|
||||||
"status.report": "Prijavi @{name}",
|
"status.report": "Prijavi @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Da li ste stvarno, stvarno sigurno da želite da blokirate ceo domen {domain}? U većini slučajeva, par dobrih blokiranja ili ućutkavanja su dovoljna i preporučljiva.",
|
"confirmations.domain_block.message": "Da li ste stvarno, stvarno sigurno da želite da blokirate ceo domen {domain}? U većini slučajeva, par dobrih blokiranja ili ućutkavanja su dovoljna i preporučljiva.",
|
||||||
"confirmations.mute.confirm": "Ućutkaj",
|
"confirmations.mute.confirm": "Ućutkaj",
|
||||||
"confirmations.mute.message": "Da li stvarno želite da ućutkate korisnika {name}?",
|
"confirmations.mute.message": "Da li stvarno želite da ućutkate korisnika {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Otprati",
|
"confirmations.unfollow.confirm": "Otprati",
|
||||||
"confirmations.unfollow.message": "Da li ste sigurni da želite da otpratite korisnika {name}?",
|
"confirmations.unfollow.message": "Da li ste sigurni da želite da otpratite korisnika {name}?",
|
||||||
"embed.instructions": "Ugradi ovaj status na Vaš veb sajt kopiranjem koda ispod.",
|
"embed.instructions": "Ugradi ovaj status na Vaš veb sajt kopiranjem koda ispod.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Podrži",
|
"status.reblog": "Podrži",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} podržao(la)",
|
"status.reblogged_by": "{name} podržao(la)",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Odgovori",
|
"status.reply": "Odgovori",
|
||||||
"status.replyAll": "Odgovori na diskusiju",
|
"status.replyAll": "Odgovori na diskusiju",
|
||||||
"status.report": "Prijavi korisnika @{name}",
|
"status.report": "Prijavi korisnika @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Да ли сте стварно, стварно сигурно да желите да блокирате цео домен {domain}? У већини случајева, пар добрих блокирања или ућуткавања су довољна и препоручљива.",
|
"confirmations.domain_block.message": "Да ли сте стварно, стварно сигурно да желите да блокирате цео домен {domain}? У већини случајева, пар добрих блокирања или ућуткавања су довољна и препоручљива.",
|
||||||
"confirmations.mute.confirm": "Ућуткај",
|
"confirmations.mute.confirm": "Ућуткај",
|
||||||
"confirmations.mute.message": "Да ли стварно желите да ућуткате корисника {name}?",
|
"confirmations.mute.message": "Да ли стварно желите да ућуткате корисника {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Отпрати",
|
"confirmations.unfollow.confirm": "Отпрати",
|
||||||
"confirmations.unfollow.message": "Да ли сте сигурни да желите да отпратите корисника {name}?",
|
"confirmations.unfollow.message": "Да ли сте сигурни да желите да отпратите корисника {name}?",
|
||||||
"embed.instructions": "Угради овај статус на Ваш веб сајт копирањем кода испод.",
|
"embed.instructions": "Угради овај статус на Ваш веб сајт копирањем кода испод.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Подржи",
|
"status.reblog": "Подржи",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} подржао(ла)",
|
"status.reblogged_by": "{name} подржао(ла)",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Одговори",
|
"status.reply": "Одговори",
|
||||||
"status.replyAll": "Одговори на дискусију",
|
"status.replyAll": "Одговори на дискусију",
|
||||||
"status.report": "Пријави корисника @{name}",
|
"status.report": "Пријави корисника @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
|
"ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.",
|
||||||
"upload_area.title": "Превуците овде да отпремите",
|
"upload_area.title": "Превуците овде да отпремите",
|
||||||
"upload_button.label": "Додај мултимедију",
|
"upload_button.label": "Додај мултимедију",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade tillräckligt och föredras.",
|
"confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade tillräckligt och föredras.",
|
||||||
"confirmations.mute.confirm": "Tysta",
|
"confirmations.mute.confirm": "Tysta",
|
||||||
"confirmations.mute.message": "Är du säker du vill tysta ner {name}?",
|
"confirmations.mute.message": "Är du säker du vill tysta ner {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Sluta följa",
|
"confirmations.unfollow.confirm": "Sluta följa",
|
||||||
"confirmations.unfollow.message": "Är du säker på att du vill sluta följa {name}?",
|
"confirmations.unfollow.message": "Är du säker på att du vill sluta följa {name}?",
|
||||||
"embed.instructions": "Bädda in den här statusen på din webbplats genom att kopiera koden nedan.",
|
"embed.instructions": "Bädda in den här statusen på din webbplats genom att kopiera koden nedan.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Knuff",
|
"status.reblog": "Knuff",
|
||||||
"status.reblog_private": "Knuffa till de ursprungliga åhörarna",
|
"status.reblog_private": "Knuffa till de ursprungliga åhörarna",
|
||||||
"status.reblogged_by": "{name} knuffade",
|
"status.reblogged_by": "{name} knuffade",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Svara",
|
"status.reply": "Svara",
|
||||||
"status.replyAll": "Svara på tråden",
|
"status.replyAll": "Svara på tråden",
|
||||||
"status.report": "Rapportera @{name}",
|
"status.report": "Rapportera @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} boosted",
|
"status.reblogged_by": "{name} boosted",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Reply",
|
"status.reply": "Reply",
|
||||||
"status.replyAll": "Reply to thread",
|
"status.replyAll": "Reply to thread",
|
||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost",
|
"status.reblog": "Boost",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} boosted",
|
"status.reblogged_by": "{name} boosted",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Reply",
|
"status.reply": "Reply",
|
||||||
"status.replyAll": "Reply to thread",
|
"status.replyAll": "Reply to thread",
|
||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||||
"confirmations.mute.confirm": "Sessize al",
|
"confirmations.mute.confirm": "Sessize al",
|
||||||
"confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?",
|
"confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Boost'la",
|
"status.reblog": "Boost'la",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} boost etti",
|
"status.reblogged_by": "{name} boost etti",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Cevapla",
|
"status.reply": "Cevapla",
|
||||||
"status.replyAll": "Konuşmayı cevapla",
|
"status.replyAll": "Konuşmayı cevapla",
|
||||||
"status.report": "@{name}'i raporla",
|
"status.report": "@{name}'i raporla",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів.",
|
"confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів.",
|
||||||
"confirmations.mute.confirm": "Заглушити",
|
"confirmations.mute.confirm": "Заглушити",
|
||||||
"confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?",
|
"confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "Передмухнути",
|
"status.reblog": "Передмухнути",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} передмухнув(-ла)",
|
"status.reblogged_by": "{name} передмухнув(-ла)",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "Відповісти",
|
"status.reply": "Відповісти",
|
||||||
"status.replyAll": "Відповісти на тред",
|
"status.replyAll": "Відповісти на тред",
|
||||||
"status.report": "Поскаржитися",
|
"status.report": "Поскаржитися",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"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": "Додати медіаконтент",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "你真的确定要隐藏所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户应该就能满足你的需要了。",
|
"confirmations.domain_block.message": "你真的确定要隐藏所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户应该就能满足你的需要了。",
|
||||||
"confirmations.mute.confirm": "隐藏",
|
"confirmations.mute.confirm": "隐藏",
|
||||||
"confirmations.mute.message": "你确定要隐藏 {name} 吗?",
|
"confirmations.mute.message": "你确定要隐藏 {name} 吗?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "取消关注",
|
"confirmations.unfollow.confirm": "取消关注",
|
||||||
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
|
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
|
||||||
"embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
|
"embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "转嘟",
|
"status.reblog": "转嘟",
|
||||||
"status.reblog_private": "转嘟给原有关注者",
|
"status.reblog_private": "转嘟给原有关注者",
|
||||||
"status.reblogged_by": "{name} 转嘟了",
|
"status.reblogged_by": "{name} 转嘟了",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "回复",
|
"status.reply": "回复",
|
||||||
"status.replyAll": "回复所有人",
|
"status.replyAll": "回复所有人",
|
||||||
"status.report": "举报 @{name}",
|
"status.report": "举报 @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "媒体",
|
"timeline.media": "媒体",
|
||||||
"timeline.posts": "嘟文",
|
"timeline.posts": "嘟文",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
|
"ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。",
|
||||||
"upload_area.title": "将文件拖放到此处开始上传",
|
"upload_area.title": "将文件拖放到此处开始上传",
|
||||||
"upload_button.label": "上传媒体文件",
|
"upload_button.label": "上传媒体文件",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或靜音幾個特定目標就好。",
|
"confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或靜音幾個特定目標就好。",
|
||||||
"confirmations.mute.confirm": "靜音",
|
"confirmations.mute.confirm": "靜音",
|
||||||
"confirmations.mute.message": "你確定要將{name}靜音嗎?",
|
"confirmations.mute.message": "你確定要將{name}靜音嗎?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "取消關注",
|
"confirmations.unfollow.confirm": "取消關注",
|
||||||
"confirmations.unfollow.message": "真的不要繼續關注 {name} 了嗎?",
|
"confirmations.unfollow.message": "真的不要繼續關注 {name} 了嗎?",
|
||||||
"embed.instructions": "要內嵌此文章,請將以下代碼貼進你的網站。",
|
"embed.instructions": "要內嵌此文章,請將以下代碼貼進你的網站。",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "轉推",
|
"status.reblog": "轉推",
|
||||||
"status.reblog_private": "轉推到原讀者",
|
"status.reblog_private": "轉推到原讀者",
|
||||||
"status.reblogged_by": "{name} 轉推",
|
"status.reblogged_by": "{name} 轉推",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "回應",
|
"status.reply": "回應",
|
||||||
"status.replyAll": "回應所有人",
|
"status.replyAll": "回應所有人",
|
||||||
"status.report": "舉報 @{name}",
|
"status.report": "舉報 @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "文章",
|
"timeline.posts": "文章",
|
||||||
"trends.count_by_accounts": "{count} 位用戶在討論",
|
"trends.count_by_accounts": "{count} 位用戶在討論",
|
||||||
"trends.header": "現時趨勢",
|
|
||||||
"trends.refresh": "重新載入",
|
|
||||||
"ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
|
"ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。",
|
||||||
"upload_area.title": "將檔案拖放至此上載",
|
"upload_area.title": "將檔案拖放至此上載",
|
||||||
"upload_button.label": "上載媒體檔案",
|
"upload_button.label": "上載媒體檔案",
|
||||||
|
|
|
@ -83,6 +83,8 @@
|
||||||
"confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或消音幾個特定目標就好。",
|
"confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或消音幾個特定目標就好。",
|
||||||
"confirmations.mute.confirm": "消音",
|
"confirmations.mute.confirm": "消音",
|
||||||
"confirmations.mute.message": "你確定要消音 {name} ?",
|
"confirmations.mute.message": "你確定要消音 {name} ?",
|
||||||
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||||
"confirmations.unfollow.confirm": "取消關注",
|
"confirmations.unfollow.confirm": "取消關注",
|
||||||
"confirmations.unfollow.message": "真的不要繼續關注 {name} 了嗎?",
|
"confirmations.unfollow.message": "真的不要繼續關注 {name} 了嗎?",
|
||||||
"embed.instructions": "要內嵌此貼文,請將以下代碼貼進你的網站。",
|
"embed.instructions": "要內嵌此貼文,請將以下代碼貼進你的網站。",
|
||||||
|
@ -264,6 +266,7 @@
|
||||||
"status.reblog": "轉推",
|
"status.reblog": "轉推",
|
||||||
"status.reblog_private": "Boost to original audience",
|
"status.reblog_private": "Boost to original audience",
|
||||||
"status.reblogged_by": "{name} 轉推了",
|
"status.reblogged_by": "{name} 轉推了",
|
||||||
|
"status.redraft": "Delete & re-draft",
|
||||||
"status.reply": "回應",
|
"status.reply": "回應",
|
||||||
"status.replyAll": "回應這串",
|
"status.replyAll": "回應這串",
|
||||||
"status.report": "通報 @{name}",
|
"status.report": "通報 @{name}",
|
||||||
|
@ -284,8 +287,6 @@
|
||||||
"timeline.media": "Media",
|
"timeline.media": "Media",
|
||||||
"timeline.posts": "Toots",
|
"timeline.posts": "Toots",
|
||||||
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
|
||||||
"trends.header": "Trending now",
|
|
||||||
"trends.refresh": "Refresh",
|
|
||||||
"ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
|
"ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。",
|
||||||
"upload_area.title": "拖放來上傳",
|
"upload_area.title": "拖放來上傳",
|
||||||
"upload_button.label": "增加媒體",
|
"upload_button.label": "增加媒體",
|
||||||
|
|
|
@ -32,9 +32,11 @@ import {
|
||||||
} from '../actions/compose';
|
} from '../actions/compose';
|
||||||
import { TIMELINE_DELETE } from '../actions/timelines';
|
import { TIMELINE_DELETE } from '../actions/timelines';
|
||||||
import { STORE_HYDRATE } from '../actions/store';
|
import { STORE_HYDRATE } from '../actions/store';
|
||||||
|
import { REDRAFT } from '../actions/statuses';
|
||||||
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
|
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
|
||||||
import uuid from '../uuid';
|
import uuid from '../uuid';
|
||||||
import { me } from '../initial_state';
|
import { me } from '../initial_state';
|
||||||
|
import { unescapeHTML } from '../utils/html';
|
||||||
|
|
||||||
const initialState = ImmutableMap({
|
const initialState = ImmutableMap({
|
||||||
mounted: 0,
|
mounted: 0,
|
||||||
|
@ -170,6 +172,18 @@ const hydrate = (state, hydratedState) => {
|
||||||
return state;
|
return state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const domParser = new DOMParser();
|
||||||
|
|
||||||
|
const expandMentions = status => {
|
||||||
|
const fragment = domParser.parseFromString(status.get('content'), 'text/html').documentElement;
|
||||||
|
|
||||||
|
status.get('mentions').forEach(mention => {
|
||||||
|
fragment.querySelector(`a[href="${mention.get('url')}"]`).textContent = `@${mention.get('acct')}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
return fragment.innerHTML;
|
||||||
|
};
|
||||||
|
|
||||||
export default function compose(state = initialState, action) {
|
export default function compose(state = initialState, action) {
|
||||||
switch(action.type) {
|
switch(action.type) {
|
||||||
case STORE_HYDRATE:
|
case STORE_HYDRATE:
|
||||||
|
@ -301,6 +315,24 @@ export default function compose(state = initialState, action) {
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}));
|
}));
|
||||||
|
case REDRAFT:
|
||||||
|
return state.withMutations(map => {
|
||||||
|
map.set('text', unescapeHTML(expandMentions(action.status)));
|
||||||
|
map.set('in_reply_to', action.status.get('in_reply_to_id'));
|
||||||
|
map.set('privacy', action.status.get('visibility'));
|
||||||
|
map.set('media_attachments', action.status.get('media_attachments'));
|
||||||
|
map.set('focusDate', new Date());
|
||||||
|
map.set('caretPosition', null);
|
||||||
|
map.set('idempotencyKey', uuid());
|
||||||
|
|
||||||
|
if (action.status.get('spoiler_text').length > 0) {
|
||||||
|
map.set('spoiler', true);
|
||||||
|
map.set('spoiler_text', action.status.get('spoiler_text'));
|
||||||
|
} else {
|
||||||
|
map.set('spoiler', false);
|
||||||
|
map.set('spoiler_text', '');
|
||||||
|
}
|
||||||
|
});
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import height_cache from './height_cache';
|
||||||
import custom_emojis from './custom_emojis';
|
import custom_emojis from './custom_emojis';
|
||||||
import lists from './lists';
|
import lists from './lists';
|
||||||
import listEditor from './list_editor';
|
import listEditor from './list_editor';
|
||||||
import trends from './trends';
|
|
||||||
|
|
||||||
const reducers = {
|
const reducers = {
|
||||||
dropdown_menu,
|
dropdown_menu,
|
||||||
|
@ -56,7 +55,6 @@ const reducers = {
|
||||||
custom_emojis,
|
custom_emojis,
|
||||||
lists,
|
lists,
|
||||||
listEditor,
|
listEditor,
|
||||||
trends,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default combineReducers(reducers);
|
export default combineReducers(reducers);
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
import { TRENDS_FETCH_REQUEST, TRENDS_FETCH_SUCCESS, TRENDS_FETCH_FAIL } from '../actions/trends';
|
|
||||||
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
|
|
||||||
|
|
||||||
const initialState = ImmutableMap({
|
|
||||||
items: ImmutableList(),
|
|
||||||
isLoading: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default function trendsReducer(state = initialState, action) {
|
|
||||||
switch(action.type) {
|
|
||||||
case TRENDS_FETCH_REQUEST:
|
|
||||||
return state.set('isLoading', true);
|
|
||||||
case TRENDS_FETCH_SUCCESS:
|
|
||||||
return state.withMutations(map => {
|
|
||||||
map.set('items', fromJS(action.trends));
|
|
||||||
map.set('isLoading', false);
|
|
||||||
});
|
|
||||||
case TRENDS_FETCH_FAIL:
|
|
||||||
return state.set('isLoading', false);
|
|
||||||
default:
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,6 +1,5 @@
|
||||||
export const unescapeHTML = (html) => {
|
export const unescapeHTML = (html) => {
|
||||||
const wrapper = document.createElement('div');
|
const wrapper = document.createElement('div');
|
||||||
html = html.replace(/<br \/>|<br>|\n/g, ' ');
|
wrapper.innerHTML = html.replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n').replace(/<[^>]*>/g, '');
|
||||||
wrapper.innerHTML = html;
|
|
||||||
return wrapper.textContent;
|
return wrapper.textContent;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
import React, { Fragment } from 'react';
|
||||||
|
import { FormattedNumber } from 'react-intl';
|
||||||
|
|
||||||
|
export const shortNumberFormat = number => {
|
||||||
|
if (number < 1000) {
|
||||||
|
return <FormattedNumber value={number} />;
|
||||||
|
} else {
|
||||||
|
return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>;
|
||||||
|
}
|
||||||
|
};
|
|
@ -26,20 +26,20 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.compose-form .compose-form__modifiers .compose-form__upload__actions .icon-button {
|
.compose-form .compose-form__modifiers .compose-form__upload__actions .icon-button {
|
||||||
color: $ui-base-color;
|
color: lighten($white, 7%);
|
||||||
|
|
||||||
&:active,
|
&:active,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:hover {
|
&:hover {
|
||||||
color: darken($ui-base-color, 7%);
|
color: $white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.compose-form .compose-form__modifiers .compose-form__upload-description input {
|
.compose-form .compose-form__modifiers .compose-form__upload-description input {
|
||||||
color: $ui-base-color;
|
color: lighten($white, 7%);
|
||||||
|
|
||||||
&::placeholder {
|
&::placeholder {
|
||||||
color: $ui-base-color;
|
color: lighten($white, 7%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
.dropdown-menu__item {
|
.dropdown-menu__item {
|
||||||
a {
|
a {
|
||||||
background: $ui-base-color;
|
background: $ui-base-color;
|
||||||
color: $ui-secondary-color;
|
color: $darker-text-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,17 +189,18 @@
|
||||||
// Change the default colors used on some parts of the profile pages
|
// Change the default colors used on some parts of the profile pages
|
||||||
.activity-stream-tabs {
|
.activity-stream-tabs {
|
||||||
background: $account-background-color;
|
background: $account-background-color;
|
||||||
|
border-bottom-color: lighten($ui-base-color, 8%);
|
||||||
a {
|
|
||||||
&.active {
|
|
||||||
color: $ui-primary-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.activity-stream {
|
.activity-stream {
|
||||||
.entry {
|
.entry {
|
||||||
background: $account-background-color;
|
background: $account-background-color;
|
||||||
|
|
||||||
|
.detailed-status.light,
|
||||||
|
.more.light,
|
||||||
|
.status.light {
|
||||||
|
border-bottom-color: lighten($ui-base-color, 8%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status.light {
|
.status.light {
|
||||||
|
@ -219,7 +220,7 @@
|
||||||
.account-grid-card {
|
.account-grid-card {
|
||||||
.controls {
|
.controls {
|
||||||
.icon-button {
|
.icon-button {
|
||||||
color: $ui-secondary-color;
|
color: $darker-text-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +231,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.username {
|
.username {
|
||||||
color: $ui-secondary-color;
|
color: $darker-text-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.account__header__content {
|
.account__header__content {
|
||||||
|
|
|
@ -195,6 +195,7 @@ a.table-action-link {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
background: linear-gradient(to right, orange , yellow, green, cyan, blue, violet,orange , yellow, green, cyan, blue, violet);
|
background: linear-gradient(to right, orange , yellow, green, cyan, blue, violet,orange , yellow, green, cyan, blue, violet);
|
||||||
background-size: 200% 100%;
|
background-size: 200% 100%;
|
||||||
|
-webkit-background-clip: text;
|
||||||
background-clip: text;
|
background-clip: text;
|
||||||
color: transparent;
|
color: transparent;
|
||||||
animation: Swag 2s linear 0s infinite;
|
animation: Swag 2s linear 0s infinite;
|
||||||
|
|
|
@ -24,15 +24,18 @@ module Remotable
|
||||||
Request.new(:get, url).perform do |response|
|
Request.new(:get, url).perform do |response|
|
||||||
next if response.code != 200
|
next if response.code != 200
|
||||||
|
|
||||||
matches = response.headers['content-disposition']&.match(/filename="([^"]*)"/)
|
content_type = parse_content_type(response.headers.get('content-type').last)
|
||||||
|
extname = detect_extname_from_content_type(content_type)
|
||||||
|
|
||||||
|
if extname.nil?
|
||||||
|
disposition = response.headers.get('content-disposition').last
|
||||||
|
matches = disposition&.match(/filename="([^"]*)"/)
|
||||||
filename = matches.nil? ? parsed_url.path.split('/').last : matches[1]
|
filename = matches.nil? ? parsed_url.path.split('/').last : matches[1]
|
||||||
basename = SecureRandom.hex(8)
|
extname = filename.nil? ? '' : File.extname(filename)
|
||||||
extname = if filename.nil?
|
|
||||||
''
|
|
||||||
else
|
|
||||||
File.extname(filename)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
basename = SecureRandom.hex(8)
|
||||||
|
|
||||||
send("#{attachment_name}=", StringIO.new(response.body_with_limit(limit)))
|
send("#{attachment_name}=", StringIO.new(response.body_with_limit(limit)))
|
||||||
send("#{attachment_name}_file_name=", basename + extname)
|
send("#{attachment_name}_file_name=", basename + extname)
|
||||||
|
|
||||||
|
@ -57,4 +60,26 @@ module Remotable
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def detect_extname_from_content_type(content_type)
|
||||||
|
return if content_type.nil?
|
||||||
|
|
||||||
|
type = MIME::Types[content_type].first
|
||||||
|
|
||||||
|
return if type.nil?
|
||||||
|
|
||||||
|
extname = type.extensions.first
|
||||||
|
|
||||||
|
return if extname.nil?
|
||||||
|
|
||||||
|
".#{extname}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_content_type(content_type)
|
||||||
|
return if content_type.nil?
|
||||||
|
|
||||||
|
content_type.split(/\s*;\s*/).first
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -51,12 +51,16 @@ module StatusThreadingConcern
|
||||||
end
|
end
|
||||||
|
|
||||||
def descendant_statuses(limit, max_child_id, since_child_id, depth)
|
def descendant_statuses(limit, max_child_id, since_child_id, depth)
|
||||||
Status.find_by_sql([<<-SQL.squish, id: id, limit: limit, max_child_id: max_child_id, since_child_id: since_child_id, depth: depth])
|
# use limit + 1 and depth + 1 because 'self' is included
|
||||||
|
depth += 1 if depth.present?
|
||||||
|
limit += 1 if limit.present?
|
||||||
|
|
||||||
|
descendants_with_self = Status.find_by_sql([<<-SQL.squish, id: id, limit: limit, max_child_id: max_child_id, since_child_id: since_child_id, depth: depth])
|
||||||
WITH RECURSIVE search_tree(id, path)
|
WITH RECURSIVE search_tree(id, path)
|
||||||
AS (
|
AS (
|
||||||
SELECT id, ARRAY[id]
|
SELECT id, ARRAY[id]
|
||||||
FROM statuses
|
FROM statuses
|
||||||
WHERE in_reply_to_id = :id AND COALESCE(id < :max_child_id, TRUE) AND COALESCE(id > :since_child_id, TRUE)
|
WHERE id = :id AND COALESCE(id < :max_child_id, TRUE) AND COALESCE(id > :since_child_id, TRUE)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT statuses.id, path || statuses.id
|
SELECT statuses.id, path || statuses.id
|
||||||
FROM search_tree
|
FROM search_tree
|
||||||
|
@ -68,6 +72,8 @@ module StatusThreadingConcern
|
||||||
ORDER BY path
|
ORDER BY path
|
||||||
LIMIT :limit
|
LIMIT :limit
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
|
descendants_with_self - [self]
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_statuses_from_tree_path(ids, account)
|
def find_statuses_from_tree_path(ids, account)
|
||||||
|
|
|
@ -67,7 +67,7 @@ class Glitch::KeywordMute < ApplicationRecord
|
||||||
|
|
||||||
def matches?(str, required_scope)
|
def matches?(str, required_scope)
|
||||||
((required_scope & scope) == required_scope) && \
|
((required_scope & scope) == required_scope) && \
|
||||||
str =~ (whole_word ? boundary_regex_for_keyword : /#{keyword}/i)
|
str =~ (whole_word ? boundary_regex_for_keyword : /#{Regexp.escape(keyword)}/i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ class Status < ApplicationRecord
|
||||||
has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy
|
has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy
|
||||||
has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread
|
has_many :replies, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :thread
|
||||||
has_many :mentions, dependent: :destroy
|
has_many :mentions, dependent: :destroy
|
||||||
has_many :media_attachments, dependent: :destroy
|
has_many :media_attachments, dependent: :nullify
|
||||||
|
|
||||||
has_and_belongs_to_many :tags
|
has_and_belongs_to_many :tags
|
||||||
has_and_belongs_to_many :preview_cards
|
has_and_belongs_to_many :preview_cards
|
||||||
|
@ -194,7 +194,6 @@ class Status < ApplicationRecord
|
||||||
before_validation :set_reblog
|
before_validation :set_reblog
|
||||||
before_validation :set_visibility
|
before_validation :set_visibility
|
||||||
before_validation :set_conversation
|
before_validation :set_conversation
|
||||||
before_validation :set_sensitivity
|
|
||||||
before_validation :set_local
|
before_validation :set_local
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
@ -317,7 +316,11 @@ class Status < ApplicationRecord
|
||||||
# non-followers can see everything that isn't private/direct, but can see stuff they are mentioned in.
|
# non-followers can see everything that isn't private/direct, but can see stuff they are mentioned in.
|
||||||
visibility.push(:private) if account.following?(target_account)
|
visibility.push(:private) if account.following?(target_account)
|
||||||
|
|
||||||
where(visibility: visibility).or(where(id: account.mentions.select(:status_id)))
|
scope = left_outer_joins(:reblog)
|
||||||
|
|
||||||
|
scope.where(visibility: visibility)
|
||||||
|
.or(scope.where(id: account.mentions.select(:status_id)))
|
||||||
|
.merge(scope.where(reblog_of_id: nil).or(scope.where.not(reblogs_statuses: { account_id: account.excluded_from_timeline_account_ids })))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -388,10 +391,6 @@ class Status < ApplicationRecord
|
||||||
self.sensitive = false if sensitive.nil?
|
self.sensitive = false if sensitive.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_sensitivity
|
|
||||||
self.sensitive = sensitive || spoiler_text.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_locality
|
def set_locality
|
||||||
if account.domain.nil? && !attribute_changed?(:local_only)
|
if account.domain.nil? && !attribute_changed?(:local_only)
|
||||||
self.local_only = marked_local_only?
|
self.local_only = marked_local_only?
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class TrendingTags
|
class TrendingTags
|
||||||
KEY = 'trending_tags'
|
|
||||||
EXPIRE_HISTORY_AFTER = 7.days.seconds
|
EXPIRE_HISTORY_AFTER = 7.days.seconds
|
||||||
THRESHOLD = 5
|
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def record_use!(tag, account, at_time = Time.now.utc)
|
def record_use!(tag, account, at_time = Time.now.utc)
|
||||||
|
@ -11,30 +9,10 @@ class TrendingTags
|
||||||
|
|
||||||
increment_historical_use!(tag.id, at_time)
|
increment_historical_use!(tag.id, at_time)
|
||||||
increment_unique_use!(tag.id, account.id, at_time)
|
increment_unique_use!(tag.id, account.id, at_time)
|
||||||
increment_vote!(tag.id, at_time)
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(limit)
|
|
||||||
tag_ids = redis.zrevrange(KEY, 0, limit).map(&:to_i)
|
|
||||||
tags = Tag.where(id: tag_ids).to_a.map { |tag| [tag.id, tag] }.to_h
|
|
||||||
tag_ids.map { |tag_id| tags[tag_id] }.compact
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def increment_vote!(tag_id, at_time)
|
|
||||||
expected = redis.pfcount("activity:tags:#{tag_id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts").to_f
|
|
||||||
expected = 1.0 if expected.zero?
|
|
||||||
observed = redis.pfcount("activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}:accounts").to_f
|
|
||||||
|
|
||||||
if expected > observed || observed < THRESHOLD
|
|
||||||
redis.zrem(KEY, tag_id.to_s)
|
|
||||||
else
|
|
||||||
score = ((observed - expected)**2) / expected
|
|
||||||
redis.zadd(KEY, score, tag_id.to_s)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def increment_historical_use!(tag_id, at_time)
|
def increment_historical_use!(tag_id, at_time)
|
||||||
key = "activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}"
|
key = "activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}"
|
||||||
redis.incrby(key, 1)
|
redis.incrby(key, 1)
|
||||||
|
|
|
@ -40,7 +40,7 @@ class FetchLinkCardService < BaseService
|
||||||
@card ||= PreviewCard.new(url: @url)
|
@card ||= PreviewCard.new(url: @url)
|
||||||
|
|
||||||
failed = Request.new(:head, @url).perform do |res|
|
failed = Request.new(:head, @url).perform do |res|
|
||||||
res.code != 405 && (res.code != 200 || res.mime_type != 'text/html')
|
res.code != 405 && res.code != 501 && (res.code != 200 || res.mime_type != 'text/html')
|
||||||
end
|
end
|
||||||
|
|
||||||
return if failed
|
return if failed
|
||||||
|
|
|
@ -28,7 +28,7 @@ class PostStatusService < BaseService
|
||||||
status = account.statuses.create!(text: text,
|
status = account.statuses.create!(text: text,
|
||||||
media_attachments: media || [],
|
media_attachments: media || [],
|
||||||
thread: in_reply_to,
|
thread: in_reply_to,
|
||||||
sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]),
|
sensitive: (options[:sensitive].nil? ? account.user&.setting_default_sensitive : options[:sensitive]) || options[:spoiler_text].present?,
|
||||||
spoiler_text: options[:spoiler_text] || '',
|
spoiler_text: options[:spoiler_text] || '',
|
||||||
visibility: options[:visibility] || account.user&.setting_default_privacy,
|
visibility: options[:visibility] || account.user&.setting_default_privacy,
|
||||||
language: language_from_option(options[:language]) || LanguageDetector.instance.detect(text, account),
|
language: language_from_option(options[:language]) || LanguageDetector.instance.detect(text, account),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
%tr
|
%tr
|
||||||
%td.username
|
%td.username
|
||||||
= account.username
|
= account.username
|
||||||
%td.domain
|
%td
|
||||||
- unless account.local?
|
- unless account.local?
|
||||||
= link_to account.domain, admin_accounts_path(by_domain: account.domain)
|
= link_to account.domain, admin_accounts_path(by_domain: account.domain)
|
||||||
%td
|
%td
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
%meta{ charset: 'utf-8' }/
|
%meta{ charset: 'utf-8' }/
|
||||||
%title= safe_join([yield(:page_title), Setting.default_settings['site_title']], ' - ')
|
%title= safe_join([yield(:page_title), Setting.default_settings['site_title']], ' - ')
|
||||||
%meta{ content: 'width=device-width,initial-scale=1', name: 'viewport' }/
|
%meta{ content: 'width=device-width,initial-scale=1', name: 'viewport' }/
|
||||||
= render partial: 'layouts/theme', object: @core
|
= render partial: 'layouts/theme', object: (@core || { pack: 'common' })
|
||||||
= render partial: 'layouts/theme', object: @theme
|
= render partial: 'layouts/theme', object: (@theme || { pack: 'common', flavour: 'glitch', skin: 'default' })
|
||||||
%body.error
|
%body.error
|
||||||
.dialog
|
.dialog
|
||||||
%img{ alt: Setting.default_settings['site_title'], src: '/oops.gif' }/
|
%img{ alt: Setting.default_settings['site_title'], src: '/oops.gif' }/
|
||||||
|
|
|
@ -117,4 +117,4 @@ eu:
|
||||||
follow: jarraitu kontuak, blokeatu, utzi jarraitzeari eta desblokeatu
|
follow: jarraitu kontuak, blokeatu, utzi jarraitzeari eta desblokeatu
|
||||||
push: jaso zure kontuaren push jakinarazpenak
|
push: jaso zure kontuaren push jakinarazpenak
|
||||||
read: irakurri zure kontuko datuak
|
read: irakurri zure kontuko datuak
|
||||||
write: argitaratu zure izenean
|
write: zure izenean argitaratu
|
||||||
|
|
|
@ -424,7 +424,7 @@ en:
|
||||||
following: 'Success! You are now following:'
|
following: 'Success! You are now following:'
|
||||||
post_follow:
|
post_follow:
|
||||||
close: Or, you can just close this window.
|
close: Or, you can just close this window.
|
||||||
return: Return to the user's profile
|
return: Show the user's profile
|
||||||
web: Go to web
|
web: Go to web
|
||||||
title: Follow %{acct}
|
title: Follow %{acct}
|
||||||
datetime:
|
datetime:
|
||||||
|
|
|
@ -153,14 +153,14 @@ eu:
|
||||||
action_logs:
|
action_logs:
|
||||||
actions:
|
actions:
|
||||||
assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio"
|
assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio"
|
||||||
change_email_user: "%{name}(e)k %{target}(r)en helbide elektronikoa aldatu du"
|
change_email_user: "%{name}(e)k %{target}(r)en e-mail helbidea aldatu du"
|
||||||
confirm_user: "%{name}(e)k %{target}(r)en helbide elektronikoa berretsi du"
|
confirm_user: "%{name}(e)k %{target}(r)en e-mail helbidea berretsi du"
|
||||||
create_custom_emoji: "%{name}(e)k emoji berria kargatu du %{target}"
|
create_custom_emoji: "%{name}(e)k emoji berria kargatu du %{target}"
|
||||||
create_domain_block: "%{name}(e)k %{target} domeinua blokeatu du"
|
create_domain_block: "%{name}(e)k %{target} domeinua blokeatu du"
|
||||||
create_email_domain_block: "%{name}(e)k %{target} helbide elektronikoen domeinua zerrenda beltzean sartu du"
|
create_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda beltzean sartu du"
|
||||||
demote_user: "%{name}(e)k %{target} mailaz jaitsi du"
|
demote_user: "%{name}(e)k %{target} mailaz jaitsi du"
|
||||||
destroy_domain_block: "%{name}(e)k %{target} domeinua desblokeatu du"
|
destroy_domain_block: "%{name}(e)k %{target} domeinua desblokeatu du"
|
||||||
destroy_email_domain_block: "%{name}(e)k %{target} helbide elektronikoen domeinua zerrenda zurian sartu du"
|
destroy_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda zurian sartu du"
|
||||||
destroy_status: "%{name}(e)k %{target}(e)n egoera kendu du"
|
destroy_status: "%{name}(e)k %{target}(e)n egoera kendu du"
|
||||||
disable_2fa_user: "%{name}(e)k %{target}(r)i bi faktoreetako eskaera kendu dio"
|
disable_2fa_user: "%{name}(e)k %{target}(r)i bi faktoreetako eskaera kendu dio"
|
||||||
disable_custom_emoji: "%{name}(e)k %{target} emoji-a desgaitu du"
|
disable_custom_emoji: "%{name}(e)k %{target} emoji-a desgaitu du"
|
||||||
|
@ -356,8 +356,8 @@ eu:
|
||||||
back_to_account: Atzera kontuaren orrira
|
back_to_account: Atzera kontuaren orrira
|
||||||
batch:
|
batch:
|
||||||
delete: Ezabatu
|
delete: Ezabatu
|
||||||
nsfw_off: Markatu ez mingarri gisa
|
nsfw_off: Markatu ez hunkigarri gisa
|
||||||
nsfw_on: Markatu mingarri gisa
|
nsfw_on: Markatu hunkigarri gisa
|
||||||
failed_to_execute: Ezin izan da burutu
|
failed_to_execute: Ezin izan da burutu
|
||||||
media:
|
media:
|
||||||
title: Multimedia
|
title: Multimedia
|
||||||
|
@ -694,7 +694,7 @@ eu:
|
||||||
click_to_show: Klik erakusteko
|
click_to_show: Klik erakusteko
|
||||||
pinned: Finkatutako toot-a
|
pinned: Finkatutako toot-a
|
||||||
reblogged: bultzatua
|
reblogged: bultzatua
|
||||||
sensitive_content: Eduki mingarria
|
sensitive_content: Eduki hunkigarria
|
||||||
terms:
|
terms:
|
||||||
body_html: |
|
body_html: |
|
||||||
<h2>Pribatutasun politika</h2>
|
<h2>Pribatutasun politika</h2>
|
||||||
|
|
|
@ -425,7 +425,7 @@ pl:
|
||||||
following: 'Pomyślnie! Od teraz śledzisz:'
|
following: 'Pomyślnie! Od teraz śledzisz:'
|
||||||
post_follow:
|
post_follow:
|
||||||
close: Ewentualnie, możesz po prostu zamknąć tę stronę.
|
close: Ewentualnie, możesz po prostu zamknąć tę stronę.
|
||||||
return: Powróć do strony użytkownika
|
return: Pokaż stronę użytkownika
|
||||||
web: Przejdź do sieci
|
web: Przejdź do sieci
|
||||||
title: Śledź %{acct}
|
title: Śledź %{acct}
|
||||||
datetime:
|
datetime:
|
||||||
|
@ -784,9 +784,13 @@ pl:
|
||||||
|
|
||||||
<hr class="spacer" />
|
<hr class="spacer" />
|
||||||
|
|
||||||
<h3 id="coppa">Children's Online Privacy Protection Act Compliance</h3>
|
<h3 id="children">Korzystanie ze strony przez dzieci</h3>
|
||||||
|
|
||||||
<p>Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli serwer znajduje się w USA, a nie ukończyłeś 13 roku życia, zgodnie z wymogami COPPA (<a href="https://pl.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Prawo o Ochronie Prywatności Dzieci w Internecie</a>), nie używaj tej strony.</p>
|
<p>Jeżeli serwer znajduje się w UE lub w EOG: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 16 lat. Jeżeli nie ukończyłeś 16 roku życia, zgodnie z wymogami COPPA (<a href="https://pl.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Prawo o Ochronie Prywatności Dzieci w Internecie</a>), nie używaj tej strony.</p>
|
||||||
|
|
||||||
|
<p>Jeżeli serwer znajduje się w USA: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli nie ukończyłeś 13 roku życia, zgodnie z wymogami RODO (<a href="https://pl.wikipedia.org/wiki/Ogólne_rozporządzenie_o_ochronie_danych">Ogólne rozporządzenie o ochronie danych</a>), nie używaj tej strony.</p>
|
||||||
|
|
||||||
|
<p>Wymogi mogą być inne, jeżeli serwer znajduje się w innym kraju.</p>
|
||||||
|
|
||||||
<hr class="spacer" />
|
<hr class="spacer" />
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ en:
|
||||||
setting_default_sensitive: Always mark media as sensitive
|
setting_default_sensitive: Always mark media as sensitive
|
||||||
setting_delete_modal: Show confirmation dialog before deleting a toot
|
setting_delete_modal: Show confirmation dialog before deleting a toot
|
||||||
setting_display_sensitive_media: Always show media marked as sensitive
|
setting_display_sensitive_media: Always show media marked as sensitive
|
||||||
setting_favourite_modal: Show confirmation dialog before favouriting
|
setting_favourite_modal: Show confirmation dialog before favouriting (applies to Glitch flavour only)
|
||||||
setting_hide_network: Hide your network
|
setting_hide_network: Hide your network
|
||||||
setting_noindex: Opt-out of search engine indexing
|
setting_noindex: Opt-out of search engine indexing
|
||||||
setting_reduce_motion: Reduce motion in animations
|
setting_reduce_motion: Reduce motion in animations
|
||||||
|
|
|
@ -37,7 +37,7 @@ eu:
|
||||||
current_password: Oraingo pasahitza
|
current_password: Oraingo pasahitza
|
||||||
data: Datuak
|
data: Datuak
|
||||||
display_name: Pantaila-izena
|
display_name: Pantaila-izena
|
||||||
email: Helbide elektronikoa
|
email: E-mail helbidea
|
||||||
expires_in: Iraungitzea
|
expires_in: Iraungitzea
|
||||||
fields: Profilaren metadatuak
|
fields: Profilaren metadatuak
|
||||||
filtered_languages: Iragazitako hizkuntzak
|
filtered_languages: Iragazitako hizkuntzak
|
||||||
|
@ -49,14 +49,14 @@ eu:
|
||||||
note: Biografia
|
note: Biografia
|
||||||
otp_attempt: Bi faktoreetako kodea
|
otp_attempt: Bi faktoreetako kodea
|
||||||
password: Pasahitza
|
password: Pasahitza
|
||||||
setting_auto_play_gif: Automatikoki abiatu GIF animatuak
|
setting_auto_play_gif: Erreproduzitu GIF animatuak automatikoki
|
||||||
setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik
|
setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik
|
||||||
setting_default_privacy: Mezuen pribatutasuna
|
setting_default_privacy: Mezuen pribatutasuna
|
||||||
setting_default_sensitive: Beti markatu edukiak mingarri gisa
|
setting_default_sensitive: Beti markatu edukiak hunkigarri gisa
|
||||||
setting_delete_modal: Erakutsi baieztapen elkarrizketa-koadroa toot bat ezabatu aurretik
|
setting_delete_modal: Erakutsi baieztapen elkarrizketa-koadroa toot bat ezabatu aurretik
|
||||||
setting_display_sensitive_media: Beti erakutsi mingarri marka duen edukia
|
setting_display_sensitive_media: Beti erakutsi hunkigarri gisa markatutako edukia
|
||||||
setting_hide_network: Ezkutatu zure sarea
|
setting_hide_network: Ezkutatu zure sarea
|
||||||
setting_noindex: Atera bilaketa motorraren idexaziotik
|
setting_noindex: Atera bilaketa motorraren indexaziotik
|
||||||
setting_reduce_motion: Murriztu animazioen mugimenduak
|
setting_reduce_motion: Murriztu animazioen mugimenduak
|
||||||
setting_system_font_ui: Erabili sistemako tipografia lehenetsia
|
setting_system_font_ui: Erabili sistemako tipografia lehenetsia
|
||||||
setting_theme: Gunearen gaia
|
setting_theme: Gunearen gaia
|
||||||
|
|
|
@ -50,6 +50,7 @@ sk:
|
||||||
reserved_username: Prihlasovacie meno je rezervované
|
reserved_username: Prihlasovacie meno je rezervované
|
||||||
roles:
|
roles:
|
||||||
admin: Administrátor
|
admin: Administrátor
|
||||||
|
bot: Automat
|
||||||
moderator: Moderátor
|
moderator: Moderátor
|
||||||
unfollow: Prestať sledovať
|
unfollow: Prestať sledovať
|
||||||
admin:
|
admin:
|
||||||
|
|
|
@ -271,7 +271,6 @@ Rails.application.routes.draw do
|
||||||
resources :favourites, only: [:index]
|
resources :favourites, only: [:index]
|
||||||
resources :bookmarks, only: [:index]
|
resources :bookmarks, only: [:index]
|
||||||
resources :reports, only: [:index, :create]
|
resources :reports, only: [:index, :create]
|
||||||
resources :trends, only: [:index]
|
|
||||||
|
|
||||||
namespace :apps do
|
namespace :apps do
|
||||||
get :verify_credentials, to: 'credentials#show'
|
get :verify_credentials, to: 'credentials#show'
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Mastodon
|
||||||
end
|
end
|
||||||
|
|
||||||
def flags
|
def flags
|
||||||
'rc1'
|
'rc3'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_a
|
def to_a
|
||||||
|
|
|
@ -561,7 +561,7 @@ namespace :mastodon do
|
||||||
|
|
||||||
desc 'Generates home timelines for users who logged in in the past two weeks'
|
desc 'Generates home timelines for users who logged in in the past two weeks'
|
||||||
task build: :environment do
|
task build: :environment do
|
||||||
User.active.select(:account_id).find_in_batches do |users|
|
User.active.select(:id, :account_id).find_in_batches do |users|
|
||||||
RegenerationWorker.push_bulk(users.map(&:account_id))
|
RegenerationWorker.push_bulk(users.map(&:account_id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe Api::Web::EmbedsController do
|
||||||
|
render_views
|
||||||
|
|
||||||
|
let(:user) { Fabricate(:user) }
|
||||||
|
before { sign_in user }
|
||||||
|
|
||||||
|
describe 'POST #create' do
|
||||||
|
subject(:response) { post :create, params: { url: url } }
|
||||||
|
subject(:body) { JSON.parse(response.body, symbolize_names: true) }
|
||||||
|
|
||||||
|
context 'when successfully finds status' do
|
||||||
|
let(:status) { Fabricate(:status) }
|
||||||
|
let(:url) { "http://#{ Rails.configuration.x.web_domain }/@#{status.account.username}/#{status.id}" }
|
||||||
|
|
||||||
|
it 'returns a right response' do
|
||||||
|
expect(response).to have_http_status :ok
|
||||||
|
expect(body[:author_name]).to eq status.account.username
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when fails to find status' do
|
||||||
|
let(:url) { 'https://host.test/oembed.html' }
|
||||||
|
let(:service_instance) { double('fetch_oembed_service') }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(FetchOEmbedService).to receive(:new) { service_instance }
|
||||||
|
allow(service_instance).to receive(:call) { call_result }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when successfully fetching oembed' do
|
||||||
|
let(:call_result) { { result: :ok } }
|
||||||
|
|
||||||
|
it 'returns a right response' do
|
||||||
|
expect(response).to have_http_status :ok
|
||||||
|
expect(body[:result]).to eq 'ok'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when fails to fetch oembed' do
|
||||||
|
let(:call_result) { nil }
|
||||||
|
|
||||||
|
it 'returns a right response' do
|
||||||
|
expect(response).to have_http_status :not_found
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,30 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe Settings::SessionsController do
|
||||||
|
render_views
|
||||||
|
|
||||||
|
let(:user) { Fabricate(:user) }
|
||||||
|
let(:session_activation) { Fabricate(:session_activation, user: user) }
|
||||||
|
before { sign_in user, scope: :user }
|
||||||
|
|
||||||
|
describe 'DELETE #destroy' do
|
||||||
|
subject { delete :destroy, params: { id: id } }
|
||||||
|
|
||||||
|
context 'when session activation exists' do
|
||||||
|
let(:id) { session_activation.id }
|
||||||
|
|
||||||
|
it 'destroys session activation' do
|
||||||
|
is_expected.to redirect_to edit_user_registration_path
|
||||||
|
expect(SessionActivation.find_by(id: id)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when session activation does not exist' do
|
||||||
|
let(:id) { session_activation.id + 1000 }
|
||||||
|
|
||||||
|
it 'destroys session activation' do
|
||||||
|
is_expected.to have_http_status :not_found
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,10 +6,11 @@ describe StatusFinder do
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
|
||||||
describe '#status' do
|
describe '#status' do
|
||||||
|
subject { described_class.new(url) }
|
||||||
|
|
||||||
context 'with a status url' do
|
context 'with a status url' do
|
||||||
let(:status) { Fabricate(:status) }
|
let(:status) { Fabricate(:status) }
|
||||||
let(:url) { short_account_status_url(account_username: status.account.username, id: status.id) }
|
let(:url) { short_account_status_url(account_username: status.account.username, id: status.id) }
|
||||||
subject { described_class.new(url) }
|
|
||||||
|
|
||||||
it 'finds the stream entry' do
|
it 'finds the stream entry' do
|
||||||
expect(subject.status).to eq(status)
|
expect(subject.status).to eq(status)
|
||||||
|
@ -27,7 +28,6 @@ describe StatusFinder do
|
||||||
context 'with a stream entry url' do
|
context 'with a stream entry url' do
|
||||||
let(:stream_entry) { Fabricate(:stream_entry) }
|
let(:stream_entry) { Fabricate(:stream_entry) }
|
||||||
let(:url) { account_stream_entry_url(stream_entry.account, stream_entry) }
|
let(:url) { account_stream_entry_url(stream_entry.account, stream_entry) }
|
||||||
subject { described_class.new(url) }
|
|
||||||
|
|
||||||
it 'finds the stream entry' do
|
it 'finds the stream entry' do
|
||||||
expect(subject.status).to eq(stream_entry.status)
|
expect(subject.status).to eq(stream_entry.status)
|
||||||
|
@ -37,7 +37,6 @@ describe StatusFinder do
|
||||||
context 'with a remote url even if id exists on local' do
|
context 'with a remote url even if id exists on local' do
|
||||||
let(:status) { Fabricate(:status) }
|
let(:status) { Fabricate(:status) }
|
||||||
let(:url) { "https://example.com/users/test/statuses/#{status.id}" }
|
let(:url) { "https://example.com/users/test/statuses/#{status.id}" }
|
||||||
subject { described_class.new(url) }
|
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
|
@ -46,7 +45,6 @@ describe StatusFinder do
|
||||||
|
|
||||||
context 'with a plausible url' do
|
context 'with a plausible url' do
|
||||||
let(:url) { 'https://example.com/users/test/updates/123/embed' }
|
let(:url) { 'https://example.com/users/test/updates/123/embed' }
|
||||||
subject { described_class.new(url) }
|
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
|
@ -55,7 +53,6 @@ describe StatusFinder do
|
||||||
|
|
||||||
context 'with an unrecognized url' do
|
context 'with an unrecognized url' do
|
||||||
let(:url) { 'https://example.com/about' }
|
let(:url) { 'https://example.com/about' }
|
||||||
subject { described_class.new(url) }
|
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { subject.status }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
|
|
|
@ -81,12 +81,18 @@ RSpec.describe Glitch::KeywordMute, type: :model do
|
||||||
expect(matcher.matches?('(hot take)', Unscoped)).to be_truthy
|
expect(matcher.matches?('(hot take)', Unscoped)).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'escapes metacharacters in keywords' do
|
it 'escapes metacharacters in whole-word keywords' do
|
||||||
Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)')
|
Glitch::KeywordMute.create!(account: alice, keyword: '(hot take)')
|
||||||
|
|
||||||
expect(matcher.matches?('(hot take)', Unscoped)).to be_truthy
|
expect(matcher.matches?('(hot take)', Unscoped)).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'escapes metacharacters in non-whole-word keywords' do
|
||||||
|
Glitch::KeywordMute.create!(account: alice, keyword: '(-', whole_word: false)
|
||||||
|
|
||||||
|
expect(matcher.matches?('bad (-)')).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
it 'uses case-folding rules appropriate for more than just English' do
|
it 'uses case-folding rules appropriate for more than just English' do
|
||||||
Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern')
|
Glitch::KeywordMute.create!(account: alice, keyword: 'großeltern')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue