Compare commits
63 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
6cc432bbc4 | ||
|
dafae9818d | ||
|
9fe1619db9 | ||
|
da70aca28e | ||
|
6f531d140b | ||
|
f66a786029 | ||
|
d97903a358 | ||
|
93897134ca | ||
|
a6b59cd1a3 | ||
|
f64af6473f | ||
|
ac49c7932d | ||
|
61dcb686a8 | ||
|
9381a7d9d5 | ||
|
a5c6c748e0 | ||
|
36b5703796 | ||
|
ff6b8a6443 | ||
|
6b76a6212d | ||
|
33ee347c99 | ||
|
0306e3e9be | ||
|
357f9298bd | ||
|
f7c46fc113 | ||
|
74c39fada0 | ||
|
f02411da40 | ||
|
a568e3ca8e | ||
|
3b440bd5af | ||
|
39f27b6cf3 | ||
|
721234230c | ||
|
566ace2d64 | ||
|
092f1df9d0 | ||
|
844616e950 | ||
|
40871caa4b | ||
|
cdf8b92fea | ||
|
0074cad44f | ||
|
4a0a19fe54 | ||
|
338bff8b93 | ||
|
b88fcd53f7 | ||
|
ca7e6a6d2e | ||
|
f0cd957c7a | ||
|
64fc8d2b07 | ||
|
fd385e256d | ||
|
03119c857b | ||
|
2ef1ce1182 | ||
|
eb2425b53b | ||
|
79d3a8553f | ||
|
7709556673 | ||
|
f0ae6b4cc5 | ||
|
9e3a6d6784 | ||
|
8bf3e750ab | ||
|
18241ccbe1 | ||
|
0dccb398bd | ||
|
386365090c | ||
|
d9500c8a3b | ||
|
f7c1668bf6 | ||
|
051b649628 | ||
|
f5f165a5eb | ||
|
f89ff65ec7 | ||
|
48b940d5c6 | ||
|
6ae70a92c9 | ||
|
fa5c867e0e | ||
|
641abe2db7 | ||
|
4f7f6b3922 | ||
|
8b14726f5b | ||
|
9090b63831 |
1
.babelrc
1
.babelrc
@@ -4,6 +4,7 @@
|
||||
[
|
||||
"env",
|
||||
{
|
||||
"exclude": ["transform-async-to-generator", "transform-regenerator"],
|
||||
"loose": true,
|
||||
"modules": false,
|
||||
"targets": {
|
||||
|
@@ -155,8 +155,8 @@ STREAMING_CLUSTER_NUM=1
|
||||
# The pam environment variable "email" is provided by:
|
||||
# https://github.com/devkral/pam_email_extractor
|
||||
# PAM_ENABLED=true
|
||||
# Fallback Suffix for email address generation (nil by default)
|
||||
# PAM_DEFAULT_SUFFIX=pam
|
||||
# Fallback email domain for email address generation (LOCAL_DOMAIN by default)
|
||||
# PAM_EMAIL_DOMAIN=example.com
|
||||
# Name of the pam service (pam "auth" section is evaluated)
|
||||
# PAM_DEFAULT_SERVICE=rpam
|
||||
# Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default)
|
||||
|
@@ -55,5 +55,5 @@ before_script:
|
||||
|
||||
script:
|
||||
- travis_retry bundle exec parallel_test spec/ --group-by filesize --type rspec
|
||||
- yarn test
|
||||
- yarn run test:jest
|
||||
- bundle exec i18n-tasks check-normalized && bundle exec i18n-tasks unused
|
||||
|
15
Dockerfile
15
Dockerfile
@@ -1,4 +1,4 @@
|
||||
FROM ruby:2.5.0-alpine3.7
|
||||
FROM ruby:2.4.3-alpine3.6
|
||||
|
||||
LABEL maintainer="https://github.com/tootsuite/mastodon" \
|
||||
description="Your self-hosted, globally interconnected microblogging community"
|
||||
@@ -9,6 +9,8 @@ ARG GID=991
|
||||
ENV RAILS_SERVE_STATIC_FILES=true \
|
||||
RAILS_ENV=production NODE_ENV=production
|
||||
|
||||
ARG YARN_VERSION=1.3.2
|
||||
ARG YARN_DOWNLOAD_SHA256=6cfe82e530ef0837212f13e45c1565ba53f5199eec2527b85ecbcd88bf26821d
|
||||
ARG LIBICONV_VERSION=1.15
|
||||
ARG LIBICONV_DOWNLOAD_SHA256=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
|
||||
|
||||
@@ -30,17 +32,24 @@ RUN apk -U upgrade \
|
||||
ca-certificates \
|
||||
ffmpeg \
|
||||
file \
|
||||
git \
|
||||
icu-libs \
|
||||
imagemagick \
|
||||
libidn \
|
||||
libpq \
|
||||
nodejs \
|
||||
nodejs-npm \
|
||||
protobuf \
|
||||
tini \
|
||||
tzdata \
|
||||
yarn \
|
||||
&& update-ca-certificates \
|
||||
&& mkdir -p /tmp/src \
|
||||
&& mkdir -p /tmp/src /opt \
|
||||
&& wget -O yarn.tar.gz "https://github.com/yarnpkg/yarn/releases/download/v$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
|
||||
&& echo "$YARN_DOWNLOAD_SHA256 *yarn.tar.gz" | sha256sum -c - \
|
||||
&& tar -xzf yarn.tar.gz -C /tmp/src \
|
||||
&& rm yarn.tar.gz \
|
||||
&& mv /tmp/src/yarn-v$YARN_VERSION /opt/yarn \
|
||||
&& ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
|
||||
&& wget -O libiconv.tar.gz "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz" \
|
||||
&& echo "$LIBICONV_DOWNLOAD_SHA256 *libiconv.tar.gz" | sha256sum -c - \
|
||||
&& tar -xzf libiconv.tar.gz -C /tmp/src \
|
||||
|
6
Gemfile
6
Gemfile
@@ -32,7 +32,9 @@ gem 'cld3', '~> 3.2.0'
|
||||
gem 'devise', '~> 4.4'
|
||||
gem 'devise-two-factor', '~> 3.0'
|
||||
|
||||
gem 'devise_pam_authenticatable2', '~> 8.0', install_if: -> { ENV['PAM_ENABLED'] == 'true' }
|
||||
group :pam_authentication, optional: true do
|
||||
gem 'devise_pam_authenticatable2', '~> 9.0'
|
||||
end
|
||||
gem 'net-ldap', '~> 0.10'
|
||||
gem 'omniauth-cas', '~> 1.1'
|
||||
gem 'omniauth-saml', '~> 1.10'
|
||||
@@ -69,7 +71,7 @@ gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||
gem 'rqrcode', '~> 0.10'
|
||||
gem 'ruby-oembed', '~> 0.12', require: 'oembed'
|
||||
gem 'ruby-progressbar', '~> 1.4'
|
||||
gem 'sanitize', '~> 4.4'
|
||||
gem 'sanitize', '~> 4.6.4'
|
||||
gem 'sidekiq', '~> 5.0'
|
||||
gem 'sidekiq-scheduler', '~> 2.1'
|
||||
gem 'sidekiq-unique-jobs', '~> 5.0'
|
||||
|
16
Gemfile.lock
16
Gemfile.lock
@@ -141,7 +141,7 @@ GEM
|
||||
devise (~> 4.0)
|
||||
railties (< 5.2)
|
||||
rotp (~> 2.0)
|
||||
devise_pam_authenticatable2 (8.0.1)
|
||||
devise_pam_authenticatable2 (9.0.0)
|
||||
devise (>= 4.0.0)
|
||||
rpam2 (~> 3.0)
|
||||
diff-lcs (1.3)
|
||||
@@ -288,7 +288,7 @@ GEM
|
||||
activesupport (>= 4, < 5.2)
|
||||
railties (>= 4, < 5.2)
|
||||
request_store (~> 1.0)
|
||||
loofah (2.1.1)
|
||||
loofah (2.2.1)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.0)
|
||||
@@ -316,9 +316,9 @@ GEM
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (4.2.0)
|
||||
nio4r (2.1.0)
|
||||
nokogiri (1.8.1)
|
||||
nokogiri (1.8.2)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
nokogumbo (1.4.13)
|
||||
nokogumbo (1.5.0)
|
||||
nokogiri
|
||||
nsa (0.2.4)
|
||||
activesupport (>= 4.2, < 6)
|
||||
@@ -496,10 +496,10 @@ GEM
|
||||
rufus-scheduler (3.4.2)
|
||||
et-orbi (~> 1.0)
|
||||
safe_yaml (1.0.4)
|
||||
sanitize (4.5.0)
|
||||
sanitize (4.6.4)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.4.4)
|
||||
nokogumbo (~> 1.4.1)
|
||||
nokogumbo (~> 1.4)
|
||||
sass (3.5.3)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
@@ -631,7 +631,7 @@ DEPENDENCIES
|
||||
climate_control (~> 0.2)
|
||||
devise (~> 4.4)
|
||||
devise-two-factor (~> 3.0)
|
||||
devise_pam_authenticatable2 (~> 8.0)
|
||||
devise_pam_authenticatable2 (~> 9.0)
|
||||
doorkeeper (~> 4.2)
|
||||
dotenv-rails (~> 2.2)
|
||||
fabrication (~> 2.18)
|
||||
@@ -699,7 +699,7 @@ DEPENDENCIES
|
||||
rubocop
|
||||
ruby-oembed (~> 0.12)
|
||||
ruby-progressbar (~> 1.4)
|
||||
sanitize (~> 4.4)
|
||||
sanitize (~> 4.6.4)
|
||||
scss_lint (~> 0.55)
|
||||
sidekiq (~> 5.0)
|
||||
sidekiq-bulk (~> 0.1.1)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
web: PORT=3000 bundle exec puma -C config/puma.rb
|
||||
sidekiq: PORT=3000 bundle exec sidekiq
|
||||
stream: PORT=4000 yarn run start
|
||||
web: env PORT=3000 bundle exec puma -C config/puma.rb
|
||||
sidekiq: env PORT=3000 bundle exec sidekiq
|
||||
stream: env PORT=4000 yarn run start
|
||||
webpack: ./bin/webpack-dev-server --listen-host 0.0.0.0
|
||||
|
@@ -17,7 +17,11 @@ module Localized
|
||||
end
|
||||
|
||||
def default_locale
|
||||
request_locale || I18n.default_locale
|
||||
if ENV['DEFAULT_LOCALE'].present?
|
||||
I18n.default_locale
|
||||
else
|
||||
request_locale || I18n.default_locale
|
||||
end
|
||||
end
|
||||
|
||||
def request_locale
|
||||
|
@@ -29,6 +29,35 @@ module StreamEntriesHelper
|
||||
[prepend_str, account.note].join(' · ')
|
||||
end
|
||||
|
||||
def media_summary(status)
|
||||
attachments = { image: 0, video: 0 }
|
||||
|
||||
status.media_attachments.each do |media|
|
||||
if media.video?
|
||||
attachments[:video] += 1
|
||||
else
|
||||
attachments[:image] += 1
|
||||
end
|
||||
end
|
||||
|
||||
text = attachments.to_a.reject { |_, value| value.zero? }.map { |key, value| t("statuses.attached.#{key}", count: value) }.join(' · ')
|
||||
|
||||
return if text.blank?
|
||||
|
||||
t('statuses.attached.description', attached: text)
|
||||
end
|
||||
|
||||
def status_text_summary(status)
|
||||
return if status.spoiler_text.blank?
|
||||
t('statuses.content_warning', warning: status.spoiler_text)
|
||||
end
|
||||
|
||||
def status_description(status)
|
||||
components = [[media_summary(status), status_text_summary(status)].reject(&:blank?).join(' · ')]
|
||||
components << status.text if status.spoiler_text.blank?
|
||||
components.reject(&:blank?).join("\n\n")
|
||||
end
|
||||
|
||||
def stream_link_target
|
||||
embedded_view? ? '_blank' : nil
|
||||
end
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import api from '../api';
|
||||
import { CancelToken } from 'axios';
|
||||
import { throttle } from 'lodash';
|
||||
import { search as emojiSearch } from '../features/emoji/emoji_mart_search_light';
|
||||
import { tagHistory } from '../settings';
|
||||
@@ -11,6 +12,8 @@ import {
|
||||
refreshPublicTimeline,
|
||||
} from './timelines';
|
||||
|
||||
let cancelFetchComposeSuggestionsAccounts;
|
||||
|
||||
export const COMPOSE_CHANGE = 'COMPOSE_CHANGE';
|
||||
export const COMPOSE_SUBMIT_REQUEST = 'COMPOSE_SUBMIT_REQUEST';
|
||||
export const COMPOSE_SUBMIT_SUCCESS = 'COMPOSE_SUBMIT_SUCCESS';
|
||||
@@ -257,13 +260,22 @@ export function undoUploadCompose(media_id) {
|
||||
};
|
||||
|
||||
export function clearComposeSuggestions() {
|
||||
if (cancelFetchComposeSuggestionsAccounts) {
|
||||
cancelFetchComposeSuggestionsAccounts();
|
||||
}
|
||||
return {
|
||||
type: COMPOSE_SUGGESTIONS_CLEAR,
|
||||
};
|
||||
};
|
||||
|
||||
const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => {
|
||||
if (cancelFetchComposeSuggestionsAccounts) {
|
||||
cancelFetchComposeSuggestionsAccounts();
|
||||
}
|
||||
api(getState).get('/api/v1/accounts/search', {
|
||||
cancelToken: new CancelToken(cancel => {
|
||||
cancelFetchComposeSuggestionsAccounts = cancel;
|
||||
}),
|
||||
params: {
|
||||
q: token.slice(1),
|
||||
resolve: false,
|
||||
|
@@ -62,6 +62,7 @@ export function reblogRequest(status) {
|
||||
return {
|
||||
type: REBLOG_REQUEST,
|
||||
status: status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -70,6 +71,7 @@ export function reblogSuccess(status, response) {
|
||||
type: REBLOG_SUCCESS,
|
||||
status: status,
|
||||
response: response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -78,6 +80,7 @@ export function reblogFail(status, error) {
|
||||
type: REBLOG_FAIL,
|
||||
status: status,
|
||||
error: error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -85,6 +88,7 @@ export function unreblogRequest(status) {
|
||||
return {
|
||||
type: UNREBLOG_REQUEST,
|
||||
status: status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -93,6 +97,7 @@ export function unreblogSuccess(status, response) {
|
||||
type: UNREBLOG_SUCCESS,
|
||||
status: status,
|
||||
response: response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -101,6 +106,7 @@ export function unreblogFail(status, error) {
|
||||
type: UNREBLOG_FAIL,
|
||||
status: status,
|
||||
error: error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -132,6 +138,7 @@ export function favouriteRequest(status) {
|
||||
return {
|
||||
type: FAVOURITE_REQUEST,
|
||||
status: status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -140,6 +147,7 @@ export function favouriteSuccess(status, response) {
|
||||
type: FAVOURITE_SUCCESS,
|
||||
status: status,
|
||||
response: response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -148,6 +156,7 @@ export function favouriteFail(status, error) {
|
||||
type: FAVOURITE_FAIL,
|
||||
status: status,
|
||||
error: error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -155,6 +164,7 @@ export function unfavouriteRequest(status) {
|
||||
return {
|
||||
type: UNFAVOURITE_REQUEST,
|
||||
status: status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -163,6 +173,7 @@ export function unfavouriteSuccess(status, response) {
|
||||
type: UNFAVOURITE_SUCCESS,
|
||||
status: status,
|
||||
response: response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -171,6 +182,7 @@ export function unfavouriteFail(status, error) {
|
||||
type: UNFAVOURITE_FAIL,
|
||||
status: status,
|
||||
error: error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -258,6 +270,7 @@ export function pinRequest(status) {
|
||||
return {
|
||||
type: PIN_REQUEST,
|
||||
status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -266,6 +279,7 @@ export function pinSuccess(status, response) {
|
||||
type: PIN_SUCCESS,
|
||||
status,
|
||||
response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -274,6 +288,7 @@ export function pinFail(status, error) {
|
||||
type: PIN_FAIL,
|
||||
status,
|
||||
error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -293,6 +308,7 @@ export function unpinRequest(status) {
|
||||
return {
|
||||
type: UNPIN_REQUEST,
|
||||
status,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -301,6 +317,7 @@ export function unpinSuccess(status, response) {
|
||||
type: UNPIN_SUCCESS,
|
||||
status,
|
||||
response,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -309,5 +326,6 @@ export function unpinFail(status, error) {
|
||||
type: UNPIN_FAIL,
|
||||
status,
|
||||
error,
|
||||
skipLoading: true,
|
||||
};
|
||||
};
|
||||
|
@@ -24,7 +24,7 @@ defineMessages({
|
||||
const fetchRelatedRelationships = (dispatch, notifications) => {
|
||||
const accountIds = notifications.filter(item => item.type === 'follow').map(item => item.account.id);
|
||||
|
||||
if (accountIds > 0) {
|
||||
if (accountIds.length > 0) {
|
||||
dispatch(fetchRelationships(accountIds));
|
||||
}
|
||||
};
|
||||
|
@@ -154,7 +154,7 @@ export default class StatusContent extends React.PureComponent {
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={classNames} ref={this.setRef} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
|
||||
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
|
||||
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
|
||||
<span dangerouslySetInnerHTML={spoilerContent} />
|
||||
{' '}
|
||||
|
@@ -17,7 +17,7 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false })
|
||||
|
||||
return {
|
||||
statusIds: state.getIn(['timelines', `account:${path}`, 'items'], ImmutableList()),
|
||||
featuredStatusIds: state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()),
|
||||
featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned`, 'items'], ImmutableList()),
|
||||
isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']),
|
||||
hasMore: !!state.getIn(['timelines', `account:${path}`, 'next']),
|
||||
};
|
||||
@@ -40,14 +40,18 @@ export default class AccountTimeline extends ImmutablePureComponent {
|
||||
const { params: { accountId }, withReplies } = this.props;
|
||||
|
||||
this.props.dispatch(fetchAccount(accountId));
|
||||
this.props.dispatch(refreshAccountFeaturedTimeline(accountId));
|
||||
if (!withReplies) {
|
||||
this.props.dispatch(refreshAccountFeaturedTimeline(accountId));
|
||||
}
|
||||
this.props.dispatch(refreshAccountTimeline(accountId, withReplies));
|
||||
}
|
||||
|
||||
componentWillReceiveProps (nextProps) {
|
||||
if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) {
|
||||
this.props.dispatch(fetchAccount(nextProps.params.accountId));
|
||||
this.props.dispatch(refreshAccountFeaturedTimeline(nextProps.params.accountId));
|
||||
if (!nextProps.withReplies) {
|
||||
this.props.dispatch(refreshAccountFeaturedTimeline(nextProps.params.accountId));
|
||||
}
|
||||
this.props.dispatch(refreshAccountTimeline(nextProps.params.accountId, nextProps.params.withReplies));
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,8 @@ import spring from 'react-motion/lib/spring';
|
||||
import { injectIntl, defineMessages } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
title: { id: 'compose_form.sensitive', defaultMessage: 'Mark media as sensitive' },
|
||||
marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },
|
||||
unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },
|
||||
});
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
@@ -50,7 +51,7 @@ class SensitiveButton extends React.PureComponent {
|
||||
<div className={className} style={{ transform: `scale(${scale})` }}>
|
||||
<IconButton
|
||||
className='compose-form__sensitive-button__icon'
|
||||
title={intl.formatMessage(messages.title)}
|
||||
title={intl.formatMessage(active ? messages.marked : messages.unmarked)}
|
||||
icon={icon}
|
||||
onClick={onClick}
|
||||
size={18}
|
||||
|
@@ -4,12 +4,13 @@ import { changeComposeSpoilerness } from '../../../actions/compose';
|
||||
import { injectIntl, defineMessages } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
title: { id: 'compose_form.spoiler', defaultMessage: 'Hide text behind warning' },
|
||||
marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },
|
||||
unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { intl }) => ({
|
||||
label: 'CW',
|
||||
title: intl.formatMessage(messages.title),
|
||||
title: intl.formatMessage(state.getIn(['compose', 'spoiler']) ? messages.marked : messages.unmarked),
|
||||
active: state.getIn(['compose', 'spoiler']),
|
||||
ariaControls: 'cw-spoiler-input',
|
||||
});
|
||||
|
@@ -97,7 +97,7 @@ export default class Compose extends React.PureComponent {
|
||||
<ComposeFormContainer />
|
||||
{multiColumn && (
|
||||
<div className='drawer__inner__mastodon'>
|
||||
<img alt='' src={elephantUIPlane} />
|
||||
<img alt='' draggable='false' src={elephantUIPlane} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
@@ -28,6 +28,8 @@ const componentMap = {
|
||||
'LIST': ListTimeline,
|
||||
};
|
||||
|
||||
const shouldHideFAB = path => path.match(/^\/statuses\//);
|
||||
|
||||
@component => injectIntl(component, { withRef: true })
|
||||
export default class ColumnsArea extends ImmutablePureComponent {
|
||||
|
||||
@@ -153,7 +155,7 @@ export default class ColumnsArea extends ImmutablePureComponent {
|
||||
this.pendingIndex = null;
|
||||
|
||||
if (singleColumn) {
|
||||
const floatingActionButton = this.context.router.history.location.pathname === '/statuses/new' ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button'><i className='fa fa-pencil' /></Link>;
|
||||
const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button'><i className='fa fa-pencil' /></Link>;
|
||||
|
||||
return columnIndex !== -1 ? [
|
||||
<ReactSwipeableViews key='content' index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }}>
|
||||
|
@@ -130,6 +130,15 @@ export default class MediaModal extends ImmutablePureComponent {
|
||||
return null;
|
||||
}).toArray();
|
||||
|
||||
// you can't use 100vh, because the viewport height is taller
|
||||
// than the visible part of the document in some mobile
|
||||
// browsers when it's address bar is visible.
|
||||
// https://developers.google.com/web/updates/2016/12/url-bar-resizing
|
||||
const swipeableViewsStyle = {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
};
|
||||
|
||||
const containerStyle = {
|
||||
alignItems: 'center', // center vertically
|
||||
};
|
||||
@@ -145,23 +154,15 @@ export default class MediaModal extends ImmutablePureComponent {
|
||||
role='presentation'
|
||||
onClick={onClose}
|
||||
>
|
||||
<div className='media-modal__content'>
|
||||
<ReactSwipeableViews
|
||||
style={{
|
||||
// you can't use 100vh, because the viewport height is taller
|
||||
// than the visible part of the document in some mobile
|
||||
// browsers when it's address bar is visible.
|
||||
// https://developers.google.com/web/updates/2016/12/url-bar-resizing
|
||||
height: `${document.body.clientHeight}px`,
|
||||
}}
|
||||
containerStyle={containerStyle}
|
||||
onChangeIndex={this.handleSwipe}
|
||||
onSwitching={this.handleSwitching}
|
||||
index={index}
|
||||
>
|
||||
{content}
|
||||
</ReactSwipeableViews>
|
||||
</div>
|
||||
<ReactSwipeableViews
|
||||
style={swipeableViewsStyle}
|
||||
containerStyle={containerStyle}
|
||||
onChangeIndex={this.handleSwipe}
|
||||
onSwitching={this.handleSwitching}
|
||||
index={index}
|
||||
>
|
||||
{content}
|
||||
</ReactSwipeableViews>
|
||||
</div>
|
||||
<div className={navigationClassName}>
|
||||
<IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={40} />
|
||||
|
@@ -3,7 +3,7 @@
|
||||
"account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}",
|
||||
"account.blocked": "محظور",
|
||||
"account.disclaimer_full": "قد لا تعكس المعلومات أدناه الملف الشخصي الكامل للمستخدم.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.domain_blocked": "النطاق مخفي",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
"account.follow": "تابِع",
|
||||
"account.followers": "المتابعون",
|
||||
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "فيمَ تفكّر؟",
|
||||
"compose_form.publish": "بوّق",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "ضع علامة على الوسيط باعتباره حسّاس",
|
||||
"compose_form.spoiler": "أخفِ النص واعرض تحذيرا",
|
||||
"compose_form.sensitive.marked": "لقد تم تحديد هذه الصورة كحساسة",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "إنّ النص مخفي وراء تحذير",
|
||||
"compose_form.spoiler.unmarked": "النص غير مخفي",
|
||||
"compose_form.spoiler_placeholder": "تنبيه عن المحتوى",
|
||||
"confirmation_modal.cancel": "إلغاء",
|
||||
"confirmations.block.confirm": "حجب",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "محتوى حساس",
|
||||
"status.share": "مشاركة",
|
||||
"status.show_less": "إعرض أقلّ",
|
||||
"status.show_less_all": "طي الكل",
|
||||
"status.show_more": "أظهر المزيد",
|
||||
"status.show_more_all": "توسيع الكل",
|
||||
"status.unmute_conversation": "فك الكتم عن المحادثة",
|
||||
"status.unpin": "فك التدبيس من الملف الشخصي",
|
||||
"tabs_bar.federated_timeline": "الموحَّد",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Какво си мислиш?",
|
||||
"compose_form.publish": "Раздумай",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Отбележи съдържанието като деликатно",
|
||||
"compose_form.spoiler": "Скрий текста зад предупреждение",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Content warning",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Деликатно съдържание",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "En què estàs pensant?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marca el contingut multimèdia com a sensible",
|
||||
"compose_form.spoiler": "Amaga el text darrera darrere un avís",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Escriu l'avís aquí",
|
||||
"confirmation_modal.cancel": "Cancel·la",
|
||||
"confirmations.block.confirm": "Bloca",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Contingut sensible",
|
||||
"status.share": "Compartir",
|
||||
"status.show_less": "Mostra menys",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Mostra més",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Activar conversació",
|
||||
"status.unpin": "Deslliga del perfil",
|
||||
"tabs_bar.federated_timeline": "Federada",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Worüber möchtest du schreiben?",
|
||||
"compose_form.publish": "Tröt",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Medien als heikel markieren",
|
||||
"compose_form.spoiler": "Text hinter Warnung verbergen",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Inhaltswarnung",
|
||||
"confirmation_modal.cancel": "Abbrechen",
|
||||
"confirmations.block.confirm": "Blockieren",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Heikle Inhalte",
|
||||
"status.share": "Teilen",
|
||||
"status.show_less": "Weniger anzeigen",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Mehr anzeigen",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Stummschaltung von Thread aufheben",
|
||||
"status.unpin": "Vom Profil lösen",
|
||||
"tabs_bar.federated_timeline": "Föderation",
|
||||
|
@@ -768,8 +768,12 @@
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Mark media as sensitive",
|
||||
"id": "compose_form.sensitive"
|
||||
"defaultMessage": "Media is marked as sensitive",
|
||||
"id": "compose_form.sensitive.marked"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Media is not marked as sensitive",
|
||||
"id": "compose_form.sensitive.unmarked"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/compose/containers/sensitive_button_container.json"
|
||||
@@ -777,8 +781,12 @@
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Hide text behind warning",
|
||||
"id": "compose_form.spoiler"
|
||||
"defaultMessage": "Text is hidden behind warning",
|
||||
"id": "compose_form.spoiler.marked"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Text is not hidden",
|
||||
"id": "compose_form.spoiler.unmarked"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/compose/containers/spoiler_button_container.json"
|
||||
@@ -1375,6 +1383,14 @@
|
||||
"defaultMessage": "Block",
|
||||
"id": "confirmations.block.confirm"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Show more for all",
|
||||
"id": "status.show_more_all"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Show less for all",
|
||||
"id": "status.show_less_all"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Are you sure you want to block {name}?",
|
||||
"id": "confirmations.block.message"
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "What is on your mind?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Mark media as sensitive",
|
||||
"compose_form.spoiler": "Hide text behind warning",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Write your warning here",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Pri kio vi pensas?",
|
||||
"compose_form.publish": "Hup",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marki aŭdovidaĵon tikla",
|
||||
"compose_form.spoiler": "Kaŝi tekston malantaŭ averto",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Skribu vian averton ĉi tie",
|
||||
"confirmation_modal.cancel": "Nuligi",
|
||||
"confirmations.block.confirm": "Bloki",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Tikla enhavo",
|
||||
"status.share": "Diskonigi",
|
||||
"status.show_less": "Malgrandigi",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Grandigi",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Malsilentigi konversacion",
|
||||
"status.unpin": "Depingli de profilo",
|
||||
"tabs_bar.federated_timeline": "Fratara tempolinio",
|
||||
|
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"account.block": "Bloquear",
|
||||
"account.block_domain": "Ocultar todo de {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Bloqueado",
|
||||
"account.disclaimer_full": "La siguiente información del usuario puede estar incompleta.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.domain_blocked": "Dominio oculto",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
@@ -15,9 +15,9 @@
|
||||
"account.moved_to": "{name} se ha mudado a:",
|
||||
"account.mute": "Silenciar a @{name}",
|
||||
"account.mute_notifications": "Silenciar notificaciones de @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Publicaciones",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.muted": "Silenciado",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots con respuestas",
|
||||
"account.report": "Reportar a @{name}",
|
||||
"account.requested": "Esperando aprobación",
|
||||
"account.share": "Compartir el perfil de @{name}",
|
||||
@@ -54,14 +54,16 @@
|
||||
"column_header.unpin": "Dejar de fijar",
|
||||
"column_subheading.navigation": "Navegación",
|
||||
"column_subheading.settings": "Ajustes",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
|
||||
"compose_form.lock_disclaimer.lock": "bloqueado",
|
||||
"compose_form.placeholder": "¿En qué estás pensando?",
|
||||
"compose_form.publish": "Tootear",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marcar contenido como sensible",
|
||||
"compose_form.spoiler": "Ocultar texto tras una advertencia",
|
||||
"compose_form.sensitive.marked": "Material marcado como sensible",
|
||||
"compose_form.sensitive.unmarked": "Material no marcado como sensible",
|
||||
"compose_form.spoiler.marked": "Texto oculto tras la advertencia",
|
||||
"compose_form.spoiler.unmarked": "Texto no oculto",
|
||||
"compose_form.spoiler_placeholder": "Advertencia de contenido",
|
||||
"confirmation_modal.cancel": "Cancelar",
|
||||
"confirmations.block.confirm": "Bloquear",
|
||||
@@ -69,7 +71,7 @@
|
||||
"confirmations.delete.confirm": "Eliminar",
|
||||
"confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
|
||||
"confirmations.domain_block.confirm": "Ocultar dominio entero",
|
||||
"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",
|
||||
@@ -132,18 +134,18 @@
|
||||
"lightbox.close": "Cerrar",
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.account.add": "Añadir a lista",
|
||||
"lists.account.remove": "Quitar de lista",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"lists.edit": "Editar lista",
|
||||
"lists.new.create": "Añadir lista",
|
||||
"lists.new.title_placeholder": "Título de la nueva lista",
|
||||
"lists.search": "Buscar entre la gente a la que sigues",
|
||||
"lists.subheading": "Tus listas",
|
||||
"loading_indicator.label": "Cargando…",
|
||||
"media_gallery.toggle_visible": "Cambiar visibilidad",
|
||||
"missing_indicator.label": "No encontrado",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"missing_indicator.sublabel": "No se encontró este recurso",
|
||||
"mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
|
||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||
"navigation_bar.community_timeline": "Historia local",
|
||||
@@ -152,7 +154,7 @@
|
||||
"navigation_bar.follow_requests": "Solicitudes para seguirte",
|
||||
"navigation_bar.info": "Información adicional",
|
||||
"navigation_bar.keyboard_shortcuts": "Atajos de teclado",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.lists": "Listas",
|
||||
"navigation_bar.logout": "Cerrar sesión",
|
||||
"navigation_bar.mutes": "Usuarios silenciados",
|
||||
"navigation_bar.pins": "Toots fijados",
|
||||
@@ -179,8 +181,8 @@
|
||||
"onboarding.page_four.home": "La línea de tiempo principal muestra toots de gente que sigues.",
|
||||
"onboarding.page_four.notifications": "Las notificaciones se muestran cuando alguien interactúa contigo.",
|
||||
"onboarding.page_one.federation": "Mastodon es una red de servidores federados que conforman una red social aún más grande. Llamamos a estos servidores instancias.",
|
||||
"onboarding.page_one.full_handle": "Your full handle",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.full_handle": "Tu sobrenombre completo",
|
||||
"onboarding.page_one.handle_hint": "Esto es lo que dirías a tus amistades que buscaran.",
|
||||
"onboarding.page_one.welcome": "¡Bienvenido a Mastodon!",
|
||||
"onboarding.page_six.admin": "El administrador de tu instancia es {admin}.",
|
||||
"onboarding.page_six.almost_done": "Ya casi…",
|
||||
@@ -203,28 +205,28 @@
|
||||
"privacy.public.short": "Público",
|
||||
"privacy.unlisted.long": "No mostrar en la historia federada",
|
||||
"privacy.unlisted.short": "Sin federar",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"regeneration_indicator.label": "Cargando…",
|
||||
"regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "ahora",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Cancelar",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Reenviar a {target}",
|
||||
"report.forward_hint": "Esta cuenta es de otro servidor. ¿Enviar una copia anonimizada del informe allí también?",
|
||||
"report.hint": "El informe se enviará a los moderadores de tu instancia. Puedes proporcionar una explicación de por qué informas sobre esta cuenta a continuación:",
|
||||
"report.placeholder": "Comentarios adicionales",
|
||||
"report.submit": "Publicar",
|
||||
"report.target": "Reportando",
|
||||
"search.placeholder": "Buscar",
|
||||
"search_popout.search_format": "Formato de búsqueda avanzada",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.",
|
||||
"search_popout.tips.hashtag": "etiqueta",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag",
|
||||
"search_popout.tips.user": "usuario",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.accounts": "Gente",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
|
||||
@@ -238,11 +240,11 @@
|
||||
"status.media_hidden": "Contenido multimedia oculto",
|
||||
"status.mention": "Mencionar",
|
||||
"status.more": "Más",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute": "Silenciar @{name}",
|
||||
"status.mute_conversation": "Silenciar conversación",
|
||||
"status.open": "Expandir estado",
|
||||
"status.pin": "Fijar",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Toot fijado",
|
||||
"status.reblog": "Retootear",
|
||||
"status.reblogged_by": "Retooteado por {name}",
|
||||
"status.reply": "Responder",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Contenido sensible",
|
||||
"status.share": "Compartir",
|
||||
"status.show_less": "Mostrar menos",
|
||||
"status.show_less_all": "Mostrar menos para todo",
|
||||
"status.show_more": "Mostrar más",
|
||||
"status.show_more_all": "Mostrar más para todo",
|
||||
"status.unmute_conversation": "Dejar de silenciar conversación",
|
||||
"status.unpin": "Dejar de fijar",
|
||||
"tabs_bar.federated_timeline": "Federado",
|
||||
@@ -263,7 +267,7 @@
|
||||
"upload_area.title": "Arrastra y suelta para subir",
|
||||
"upload_button.label": "Subir multimedia",
|
||||
"upload_form.description": "Describir para los usuarios con dificultad visual",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Recortar",
|
||||
"upload_form.undo": "Deshacer",
|
||||
"upload_progress.label": "Subiendo…",
|
||||
"video.close": "Cerrar video",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "تازه چه خبر؟",
|
||||
"compose_form.publish": "بوق",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "تصاویر حساس هستند",
|
||||
"compose_form.spoiler": "نوشته را پشت هشدار پنهان کنید",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "هشدار محتوا",
|
||||
"confirmation_modal.cancel": "بیخیال",
|
||||
"confirmations.block.confirm": "مسدود کن",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "محتوای حساس",
|
||||
"status.share": "همرسانی",
|
||||
"status.show_less": "نهفتن",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "نمایش",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "باصداکردن گفتگو",
|
||||
"status.unpin": "برداشتن نوشتهٔ ثابت نمایه",
|
||||
"tabs_bar.federated_timeline": "همگانی",
|
||||
|
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"account.block": "Estä @{name}",
|
||||
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Estetty",
|
||||
"account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.domain_blocked": "Verkko-osoite piilotettu",
|
||||
"account.edit_profile": "Muokkaa",
|
||||
"account.follow": "Seuraa",
|
||||
"account.followers": "Seuraajia",
|
||||
@@ -15,9 +15,9 @@
|
||||
"account.moved_to": "{name} on muuttanut instanssiin:",
|
||||
"account.mute": "Mykistä @{name}",
|
||||
"account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "Mykistetty",
|
||||
"account.posts": "Töötit",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.posts_with_replies": "Töötit ja vastaukset",
|
||||
"account.report": "Report @{name}",
|
||||
"account.requested": "Odottaa hyväksyntää. Klikkaa peruuttaaksesi seurauspyynnön",
|
||||
"account.share": "Jaa käyttäjän @{name} profiili",
|
||||
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Mitä sinulla on mielessä?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Merkitse media herkäksi",
|
||||
"compose_form.spoiler": "Piiloita teksti varoituksen taakse",
|
||||
"compose_form.sensitive.marked": "Media on merkitty arkaluontoiseksi",
|
||||
"compose_form.sensitive.unmarked": "Mediaa ei ole merkitty arkaluontoiseksi",
|
||||
"compose_form.spoiler.marked": "Teksti on piilotettu varoituksen taakse",
|
||||
"compose_form.spoiler.unmarked": "Teksti ei ole piilotettu",
|
||||
"compose_form.spoiler_placeholder": "Content warning",
|
||||
"confirmation_modal.cancel": "Peruuta",
|
||||
"confirmations.block.confirm": "Estä",
|
||||
@@ -180,13 +182,13 @@
|
||||
"onboarding.page_four.notifications": "Ilmoitukset-sarake näyttää sinulle, kun joku on viestii kanssasi.",
|
||||
"onboarding.page_one.federation": "Mastodon on yhteisöpalvelu, joka toimii monen itsenäisen palvelimen muodostamassa verkossa. Me kutsumme näitä palvelimia instansseiksi.",
|
||||
"onboarding.page_one.full_handle": "Koko käyttäjänimesi",
|
||||
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.",
|
||||
"onboarding.page_one.handle_hint": "Tämä on se, mitä voisit ehdottaa ystäviäsi etsimään.",
|
||||
"onboarding.page_one.welcome": "Tervetuloa Mastodoniin!",
|
||||
"onboarding.page_six.admin": "Instanssisi ylläpitäjä on {admin}.",
|
||||
"onboarding.page_six.almost_done": "Melkein valmista...",
|
||||
"onboarding.page_six.appetoot": "Bon Appetööt!",
|
||||
"onboarding.page_six.apps_available": "{apps} on saatavilla iOS:lle, Androidille ja muille alustoille.",
|
||||
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.",
|
||||
"onboarding.page_six.github": "Mastodon on ilmainen, vapaan lähdekoodin ohjelma. Voit raportoida bugeja, pyytää ominaisuuksia tai osallistua kehittämiseen GitHub-palvelussa: {github}.",
|
||||
"onboarding.page_six.guidelines": "yhteisön säännöt",
|
||||
"onboarding.page_six.read_guidelines": "Ole hyvä ja lue {domain}:n {guidelines}!",
|
||||
"onboarding.page_six.various_app": "mobiilisovellukset",
|
||||
@@ -211,22 +213,22 @@
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Peruuta",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Uudelleenohjaa kohteeseen {target}",
|
||||
"report.forward_hint": "Tämä tili on toiselta serveriltä. Haluatko, että myös sinne lähetetään anonymisoitu kopio ilmiantoraportista?",
|
||||
"report.hint": "Ilmianto lähetetään instanssisi moderaattoreille. Voit antaa kuvauksen käyttäjän ilmiantamisen syystä alle:",
|
||||
"report.placeholder": "Lisäkommentit",
|
||||
"report.submit": "Submit",
|
||||
"report.target": "Reporting",
|
||||
"search.placeholder": "Hae",
|
||||
"search_popout.search_format": "Tarkennettu haku",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "Tekstihaku palauttaa statuspäivitykset jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä käyttäjänimet, nimimerkit ja hastagit jotka sisältävät tekstin.",
|
||||
"search_popout.tips.hashtag": "hashtagi",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Pelkkä tekstihaku palauttaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit",
|
||||
"search_popout.tips.user": "käyttäjä",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.accounts": "Ihmiset",
|
||||
"search_results.hashtags": "Hashtagit",
|
||||
"search_results.statuses": "Töötit",
|
||||
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
||||
"standalone.public_title": "Kurkistus sisälle...",
|
||||
"status.block": "Block @{name}",
|
||||
@@ -242,7 +244,7 @@
|
||||
"status.mute_conversation": "Mykistä keskustelu",
|
||||
"status.open": "Laajenna statuspäivitys",
|
||||
"status.pin": "Kiinnitä profiiliin",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Kiinnitetty töötti",
|
||||
"status.reblog": "Buustaa",
|
||||
"status.reblogged_by": "{name} buustasi",
|
||||
"status.reply": "Vastaa",
|
||||
@@ -252,10 +254,12 @@
|
||||
"status.sensitive_warning": "Arkaluontoista sisältöä",
|
||||
"status.share": "Jaa",
|
||||
"status.show_less": "Näytä vähemmän",
|
||||
"status.show_less_all": "Näytä vähemmän kaikista",
|
||||
"status.show_more": "Näytä lisää",
|
||||
"status.show_more_all": "Näytä enemmän kaikista",
|
||||
"status.unmute_conversation": "Poista mykistys keskustelulta",
|
||||
"status.unpin": "Irrota profiilista",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
"tabs_bar.federated_timeline": "Yleinen",
|
||||
"tabs_bar.home": "Koti",
|
||||
"tabs_bar.local_timeline": "Paikallinen",
|
||||
"tabs_bar.notifications": "Ilmoitukset",
|
||||
@@ -263,7 +267,7 @@
|
||||
"upload_area.title": "Raahaa ja pudota tähän ladataksesi",
|
||||
"upload_button.label": "Lisää mediaa",
|
||||
"upload_form.description": "Anna kuvaus näkörajoitteisia varten",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Rajaa",
|
||||
"upload_form.undo": "Peru",
|
||||
"upload_progress.label": "Ladataan...",
|
||||
"video.close": "Sulje video",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Qu’avez-vous en tête ?",
|
||||
"compose_form.publish": "Pouet",
|
||||
"compose_form.publish_loud": "{publish} !",
|
||||
"compose_form.sensitive": "Marquer le média comme sensible",
|
||||
"compose_form.spoiler": "Masquer le texte derrière un avertissement",
|
||||
"compose_form.sensitive.marked": "Média marqué comme sensible",
|
||||
"compose_form.sensitive.unmarked": "Média non marqué comme sensible",
|
||||
"compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
|
||||
"compose_form.spoiler.unmarked": "Le texte n'est pas caché",
|
||||
"compose_form.spoiler_placeholder": "Écrivez ici votre avertissement",
|
||||
"confirmation_modal.cancel": "Annuler",
|
||||
"confirmations.block.confirm": "Bloquer",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Contenu sensible",
|
||||
"status.share": "Partager",
|
||||
"status.show_less": "Replier",
|
||||
"status.show_less_all": "Tout replier",
|
||||
"status.show_more": "Déplier",
|
||||
"status.show_more_all": "Tout déplier",
|
||||
"status.unmute_conversation": "Ne plus masquer la conversation",
|
||||
"status.unpin": "Retirer du profil",
|
||||
"tabs_bar.federated_timeline": "Fil public global",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "A qué andas?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marcar medios como sensibles",
|
||||
"compose_form.spoiler": "Agochar texto detrás de un aviso",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Escriba o aviso aquí",
|
||||
"confirmation_modal.cancel": "Cancelar",
|
||||
"confirmations.block.confirm": "Bloquear",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Contido sensible",
|
||||
"status.share": "Compartir",
|
||||
"status.show_less": "Mostrar menos",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Mostrar máis",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Non acalar a conversa",
|
||||
"status.unpin": "Despegar do perfil",
|
||||
"tabs_bar.federated_timeline": "Federado",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "מה עובר לך בראש?",
|
||||
"compose_form.publish": "ללחוש",
|
||||
"compose_form.publish_loud": "לחצרץ!",
|
||||
"compose_form.sensitive": "סימון תוכן כרגיש",
|
||||
"compose_form.spoiler": "הסתרה מאחורי אזהרת תוכן",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "אזהרת תוכן",
|
||||
"confirmation_modal.cancel": "ביטול",
|
||||
"confirmations.block.confirm": "לחסום",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "תוכן רגיש",
|
||||
"status.share": "שיתוף",
|
||||
"status.show_less": "הראה פחות",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "הראה יותר",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "הסרת השתקת שיחה",
|
||||
"status.unpin": "לשחרר מקיבוע באודות",
|
||||
"tabs_bar.federated_timeline": "ציר זמן בין-קהילתי",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Što ti je na umu?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Označi media sadržaj kao osjetljiv",
|
||||
"compose_form.spoiler": "Sakrij text iza upozorenja",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Upozorenje o sadržaju",
|
||||
"confirmation_modal.cancel": "Otkaži",
|
||||
"confirmations.block.confirm": "Blokiraj",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Osjetljiv sadržaj",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Pokaži manje",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Pokaži više",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Poništi utišavanje razgovora",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federalni",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Mire gondolsz?",
|
||||
"compose_form.publish": "Tülk",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Tartalom érzékenynek jelölése",
|
||||
"compose_form.spoiler": "Szöveg figyelmeztetés mögé rejtése",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Figyelmeztetését írja ide",
|
||||
"confirmation_modal.cancel": "Bezár",
|
||||
"confirmations.block.confirm": "Letilt",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Érzékeny tartalom",
|
||||
"status.share": "Megosztás",
|
||||
"status.show_less": "Kevesebb",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Többet",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Beszélgetés némításának elvonása",
|
||||
"status.unpin": "Kitűzés eltávolítása a profilról",
|
||||
"tabs_bar.federated_timeline": "Federált",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Ի՞նչ կա մտքիդ",
|
||||
"compose_form.publish": "Թթել",
|
||||
"compose_form.publish_loud": "Թթե՜լ",
|
||||
"compose_form.sensitive": "Նշել բովանդակությունը որպես կասկածելի",
|
||||
"compose_form.spoiler": "Թաքցնել տեքստը նախազգուշացման ետեւում",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Գրիր նախազգուշացումդ այստեղ",
|
||||
"confirmation_modal.cancel": "Չեղարկել",
|
||||
"confirmations.block.confirm": "Արգելափակել",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Կասկածելի բովանդակություն",
|
||||
"status.share": "Կիսվել",
|
||||
"status.show_less": "Պակաս",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Ավելին",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Ապալռեցնել խոսակցությունը",
|
||||
"status.unpin": "Հանել անձնական էջից",
|
||||
"tabs_bar.federated_timeline": "Դաշնային",
|
||||
|
@@ -1,131 +1,133 @@
|
||||
{
|
||||
"account.block": "Blokir @{name}",
|
||||
"account.block_domain": "Hide everything from {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.disclaimer_full": "Information below may reflect the user's profile incompletely.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.block_domain": "Sembunyikan segalanya dari {domain}",
|
||||
"account.blocked": "Terblokir",
|
||||
"account.disclaimer_full": "Informasi di bawah mungkin tidak mencerminkan profil user secara lengkap.",
|
||||
"account.domain_blocked": "Domain disembunyikan",
|
||||
"account.edit_profile": "Ubah profil",
|
||||
"account.follow": "Ikuti",
|
||||
"account.followers": "Pengikut",
|
||||
"account.follows": "Mengikuti",
|
||||
"account.follows_you": "Mengikuti anda",
|
||||
"account.hide_reblogs": "Hide boosts from @{name}",
|
||||
"account.hide_reblogs": "Sembunyikan boosts dari @{name}",
|
||||
"account.media": "Media",
|
||||
"account.mention": "Balasan @{name}",
|
||||
"account.moved_to": "{name} has moved to:",
|
||||
"account.moved_to": "{name} telah pindah ke:",
|
||||
"account.mute": "Bisukan @{name}",
|
||||
"account.mute_notifications": "Mute notifications from @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.posts": "Postingan",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.mute_notifications": "Sembunyikan notifikasi dari @{name}",
|
||||
"account.muted": "Dibisukan",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Postingan dengan balasan",
|
||||
"account.report": "Laporkan @{name}",
|
||||
"account.requested": "Menunggu persetujuan",
|
||||
"account.share": "Share @{name}'s profile",
|
||||
"account.show_reblogs": "Show boosts from @{name}",
|
||||
"account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan",
|
||||
"account.share": "Bagikan profil @{name}",
|
||||
"account.show_reblogs": "Tampilkan boost dari @{name}",
|
||||
"account.unblock": "Hapus blokir @{name}",
|
||||
"account.unblock_domain": "Unhide {domain}",
|
||||
"account.unblock_domain": "Tampilkan {domain}",
|
||||
"account.unfollow": "Berhenti mengikuti",
|
||||
"account.unmute": "Berhenti membisukan @{name}",
|
||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"account.view_full_profile": "View full profile",
|
||||
"account.unmute_notifications": "Munculkan notifikasi dari @{name}",
|
||||
"account.view_full_profile": "Lihat profil lengkap",
|
||||
"boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
"bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.",
|
||||
"bundle_column_error.retry": "Coba lagi",
|
||||
"bundle_column_error.title": "Network error",
|
||||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"bundle_modal_error.close": "Tutup",
|
||||
"bundle_modal_error.message": "Kesalahan terjadi saat memuat komponen ini.",
|
||||
"bundle_modal_error.retry": "Coba lagi",
|
||||
"column.blocks": "Pengguna diblokir",
|
||||
"column.community": "Linimasa Lokal",
|
||||
"column.favourites": "Favorit",
|
||||
"column.follow_requests": "Permintaan mengikuti",
|
||||
"column.home": "Beranda",
|
||||
"column.lists": "Lists",
|
||||
"column.mutes": "Pengguna dibisukan",
|
||||
"column.lists": "List",
|
||||
"column.mutes": "Pengguna yang dibisukan",
|
||||
"column.notifications": "Notifikasi",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.public": "Linimasa gabunggan",
|
||||
"column.public": "Linimasa gabungan",
|
||||
"column_back_button.label": "Kembali",
|
||||
"column_header.hide_settings": "Hide settings",
|
||||
"column_header.moveLeft_settings": "Move column to the left",
|
||||
"column_header.moveRight_settings": "Move column to the right",
|
||||
"column_header.pin": "Pin",
|
||||
"column_header.show_settings": "Show settings",
|
||||
"column_header.unpin": "Unpin",
|
||||
"column_header.hide_settings": "Sembunyikan pengaturan",
|
||||
"column_header.moveLeft_settings": "Pindahkan kolom ke kiri",
|
||||
"column_header.moveRight_settings": "Pindahkan kolom ke kanan",
|
||||
"column_header.pin": "Sematkan",
|
||||
"column_header.show_settings": "Tampilkan pengaturan",
|
||||
"column_header.unpin": "Lepaskan",
|
||||
"column_subheading.navigation": "Navigasi",
|
||||
"column_subheading.settings": "Pengaturan",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.",
|
||||
"compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.",
|
||||
"compose_form.lock_disclaimer.lock": "dikunci",
|
||||
"compose_form.lock_disclaimer.lock": "terkunci",
|
||||
"compose_form.placeholder": "Apa yang ada di pikiran anda?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Tandai media sensitif",
|
||||
"compose_form.spoiler": "Sembunyikan teks dibalik peringatan",
|
||||
"compose_form.sensitive.marked": "Sumber ini telah ditandai sebagai sumber sensitif.",
|
||||
"compose_form.sensitive.unmarked": "Sumber ini tidak ditandai sebagai sumber sensitif",
|
||||
"compose_form.spoiler.marked": "Teks disembunyikan dibalik peringatan",
|
||||
"compose_form.spoiler.unmarked": "Teks tidak tersembunyi",
|
||||
"compose_form.spoiler_placeholder": "Peringatan konten",
|
||||
"confirmation_modal.cancel": "Batal",
|
||||
"confirmations.block.confirm": "Blokir",
|
||||
"confirmations.block.message": "Apa anda yakin ingin memblokir {name}?",
|
||||
"confirmations.delete.confirm": "Hapus",
|
||||
"confirmations.delete.message": "Apa anda yakin akan menghapus status ini?",
|
||||
"confirmations.delete.message": "Apa anda yakin untuk menghapus status ini?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||
"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.delete_list.message": "Apakah anda yakin untuk menghapus daftar ini secara permanen?",
|
||||
"confirmations.domain_block.confirm": "Sembunyikan keseluruhan domain",
|
||||
"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.message": "Apa anda yakin ingin membisukan {name}?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"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.preview": "Here is what it will look like:",
|
||||
"confirmations.unfollow.confirm": "Berhenti mengikuti",
|
||||
"confirmations.unfollow.message": "Apakah anda ingin berhenti mengikuti {name}?",
|
||||
"embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.",
|
||||
"embed.preview": "Seperti ini nantinya:",
|
||||
"emoji_button.activity": "Aktivitas",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.custom": "Kustom",
|
||||
"emoji_button.flags": "Bendera",
|
||||
"emoji_button.food": "Makanan & Minuman",
|
||||
"emoji_button.label": "Tambahkan emoji",
|
||||
"emoji_button.nature": "Alam",
|
||||
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.not_found": "Katakan tidak pada emoji!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Benda-benda",
|
||||
"emoji_button.people": "Orang",
|
||||
"emoji_button.recent": "Frequently used",
|
||||
"emoji_button.recent": "Yang sering digunakan",
|
||||
"emoji_button.search": "Cari...",
|
||||
"emoji_button.search_results": "Search results",
|
||||
"emoji_button.search_results": "Hasil pencarian",
|
||||
"emoji_button.symbols": "Simbol",
|
||||
"emoji_button.travel": "Tempat Wisata",
|
||||
"empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!",
|
||||
"empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.",
|
||||
"empty_column.home": "Anda sedang tidak mengikuti siapapun. Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.",
|
||||
"empty_column.home": "Linimasa anda kosong! Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.",
|
||||
"empty_column.home.public_timeline": "linimasa publik",
|
||||
"empty_column.list": "There is nothing in this list yet.",
|
||||
"empty_column.list": "Tidak ada postingan di list ini. Ketika anggota dari list ini memposting status baru, status tersebut akan tampil disini.",
|
||||
"empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.",
|
||||
"empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisinya secara manual",
|
||||
"empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini",
|
||||
"follow_request.authorize": "Izinkan",
|
||||
"follow_request.reject": "Tolak",
|
||||
"getting_started.appsshort": "Apps",
|
||||
"getting_started.appsshort": "Aplikasi",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Mulai",
|
||||
"getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat open source. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {github}.",
|
||||
"getting_started.userguide": "User Guide",
|
||||
"getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {github}.",
|
||||
"getting_started.userguide": "Panduan Pengguna",
|
||||
"home.column_settings.advanced": "Tingkat Lanjut",
|
||||
"home.column_settings.basic": "Dasar",
|
||||
"home.column_settings.filter_regex": "Penyaringan dengan Regular Expression",
|
||||
"home.column_settings.show_reblogs": "Tampilkan Boost",
|
||||
"home.column_settings.filter_regex": "Saring dengan regular expressions",
|
||||
"home.column_settings.show_reblogs": "Tampilkan boost",
|
||||
"home.column_settings.show_replies": "Tampilkan balasan",
|
||||
"home.settings": "Pengaturan kolom",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Description",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.back": "untuk kembali",
|
||||
"keyboard_shortcuts.boost": "untuk menyebarkan",
|
||||
"keyboard_shortcuts.column": "untuk fokus kepada sebuah status di sebuah kolom",
|
||||
"keyboard_shortcuts.compose": "untuk fokus ke area penulisan",
|
||||
"keyboard_shortcuts.description": "Deskripsi",
|
||||
"keyboard_shortcuts.down": "untuk pindah ke bawah dalam sebuah daftar",
|
||||
"keyboard_shortcuts.enter": "untuk membuka status",
|
||||
"keyboard_shortcuts.favourite": "untuk memfavoritkan",
|
||||
"keyboard_shortcuts.heading": "Pintasan keyboard",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.search": "untuk fokus mencari",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
@@ -197,14 +199,14 @@
|
||||
"privacy.change": "Tentukan privasi status",
|
||||
"privacy.direct.long": "Kirim hanya ke pengguna yang disebut",
|
||||
"privacy.direct.short": "Langsung",
|
||||
"privacy.private.long": "Kirim hanya ke pengikut",
|
||||
"privacy.private.long": "Kirim postingan hanya kepada pengikut",
|
||||
"privacy.private.short": "Pribadi",
|
||||
"privacy.public.long": "Kirim ke linimasa publik",
|
||||
"privacy.public.short": "Publik",
|
||||
"privacy.unlisted.long": "Tidak ditampilkan di linimasa publik",
|
||||
"privacy.unlisted.short": "Tak Terdaftar",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"regeneration_indicator.sublabel": "Linimasa anda sedang disiapkan!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
@@ -220,14 +222,14 @@
|
||||
"search.placeholder": "Pencarian",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.hashtag": "tagar",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count} {count, plural, one {hasil} other {hasil}}",
|
||||
"search_results.total": "{count, number} {count, plural, one {hasil} other {hasil}}",
|
||||
"standalone.public_title": "A look inside...",
|
||||
"status.block": "Block @{name}",
|
||||
"status.cannot_reblog": "This post cannot be boosted",
|
||||
@@ -252,23 +254,25 @@
|
||||
"status.sensitive_warning": "Konten sensitif",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Tampilkan lebih sedikit",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Tampilkan semua",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Gabungan",
|
||||
"tabs_bar.home": "Beranda",
|
||||
"tabs_bar.local_timeline": "Lokal",
|
||||
"tabs_bar.notifications": "Notifikasi",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
|
||||
"upload_area.title": "Seret & lepaskan untuk mengunggah",
|
||||
"upload_button.label": "Tambahkan media",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
|
||||
"upload_form.focus": "Potong",
|
||||
"upload_form.undo": "Undo",
|
||||
"upload_progress.label": "Mengunggah...",
|
||||
"video.close": "Close video",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.exit_fullscreen": "Keluar dari layar penuh",
|
||||
"video.expand": "Perbesar video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Quo esas en tua spirito?",
|
||||
"compose_form.publish": "Siflar",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Markizar kontenajo kom trubliva",
|
||||
"compose_form.spoiler": "Celar texto dop averto",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Averto di kontenajo",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Trubliva kontenajo",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Montrar mine",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Montrar plue",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federata",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "A cosa stai pensando?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Segnala file come sensibile",
|
||||
"compose_form.spoiler": "Nascondi testo con avvertimento",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Content warning",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Materiale sensibile",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Mostra meno",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Mostra di più",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federazione",
|
||||
|
@@ -3,7 +3,7 @@
|
||||
"account.block_domain": "{domain}全体を非表示",
|
||||
"account.blocked": "ブロック済み",
|
||||
"account.disclaimer_full": "以下の情報は不正確な可能性があります。",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.domain_blocked": "ドメイン非表示中",
|
||||
"account.edit_profile": "プロフィールを編集",
|
||||
"account.follow": "フォロー",
|
||||
"account.followers": "フォロワー",
|
||||
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "今なにしてる?",
|
||||
"compose_form.publish": "トゥート",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "メディアを閲覧注意としてマークする",
|
||||
"compose_form.spoiler": "テキストを隠す",
|
||||
"compose_form.sensitive.marked": "メディアに閲覧注意が設定されています",
|
||||
"compose_form.sensitive.unmarked": "メディアに閲覧注意が設定されていません",
|
||||
"compose_form.spoiler.marked": "閲覧注意が設定されています",
|
||||
"compose_form.spoiler.unmarked": "閲覧注意が設定されていません",
|
||||
"compose_form.spoiler_placeholder": "ここに警告を書いてください",
|
||||
"confirmation_modal.cancel": "キャンセル",
|
||||
"confirmations.block.confirm": "ブロック",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "閲覧注意",
|
||||
"status.share": "共有",
|
||||
"status.show_less": "隠す",
|
||||
"status.show_less_all": "全て隠す",
|
||||
"status.show_more": "もっと見る",
|
||||
"status.show_more_all": "全て見る",
|
||||
"status.unmute_conversation": "会話のミュートを解除",
|
||||
"status.unpin": "プロフィールの固定表示を解除",
|
||||
"tabs_bar.federated_timeline": "連合",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "지금 무엇을 하고 있나요?",
|
||||
"compose_form.publish": "툿",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "이 미디어를 민감한 미디어로 취급",
|
||||
"compose_form.spoiler": "텍스트 숨기기",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "경고",
|
||||
"confirmation_modal.cancel": "취소",
|
||||
"confirmations.block.confirm": "차단",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "민감한 미디어",
|
||||
"status.share": "공유",
|
||||
"status.show_less": "숨기기",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "더 보기",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "이 대화의 뮤트 해제하기",
|
||||
"status.unpin": "고정 해제",
|
||||
"tabs_bar.federated_timeline": "연합",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Wat wil je kwijt?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Media als gevoelig markeren (nsfw)",
|
||||
"compose_form.spoiler": "Tekst achter waarschuwing verbergen",
|
||||
"compose_form.sensitive.marked": "Media is als gevoelig gemarkeerd",
|
||||
"compose_form.sensitive.unmarked": "Media is niet als gevoelig gemarkeerd",
|
||||
"compose_form.spoiler.marked": "Tekst is achter een waarschuwing verborgen",
|
||||
"compose_form.spoiler.unmarked": "Tekst is niet verborgen",
|
||||
"compose_form.spoiler_placeholder": "Waarschuwingstekst",
|
||||
"confirmation_modal.cancel": "Annuleren",
|
||||
"confirmations.block.confirm": "Blokkeren",
|
||||
@@ -219,7 +221,7 @@
|
||||
"report.target": "Rapporteer {target}",
|
||||
"search.placeholder": "Zoeken",
|
||||
"search_popout.search_format": "Geavanceerd zoeken",
|
||||
"search_popout.tips.full_text": "Gebruik gewone tekst om te zoeken naar toots die jij hebt geschreven, als favoriet markeerde, hebt geboost of waarin jij bent vermeldt, en ook om te zoeken naar gebruikersnamen, weergavenamen en hashtags.",
|
||||
"search_popout.tips.full_text": "Gebruik gewone tekst om te zoeken naar jouw toots, gebooste toots, favorieten en naar toots waarin jij bent vermeldt, en naar gebruikersnamen, weergavenamen en hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "toot",
|
||||
"search_popout.tips.text": "Gebruik gewone tekst om te zoeken op weergavenamen, gebruikersnamen en hashtags",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Gevoelige inhoud",
|
||||
"status.share": "Delen",
|
||||
"status.show_less": "Minder tonen",
|
||||
"status.show_less_all": "Alles minder tonen",
|
||||
"status.show_more": "Meer tonen",
|
||||
"status.show_more_all": "Alles meer tonen",
|
||||
"status.unmute_conversation": "Conversatie niet meer negeren",
|
||||
"status.unpin": "Van profielpagina losmaken",
|
||||
"tabs_bar.federated_timeline": "Globaal",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Hva har du på hjertet?",
|
||||
"compose_form.publish": "Tut",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Merk media som følsomt",
|
||||
"compose_form.spoiler": "Skjul tekst bak advarsel",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Innholdsadvarsel",
|
||||
"confirmation_modal.cancel": "Avbryt",
|
||||
"confirmations.block.confirm": "Blokkèr",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Følsomt innhold",
|
||||
"status.share": "Del",
|
||||
"status.show_less": "Vis mindre",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Vis mer",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Ikke demp samtale",
|
||||
"status.unpin": "Angre festing på profilen",
|
||||
"tabs_bar.federated_timeline": "Felles",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "A de qué pensatz ?",
|
||||
"compose_form.publish": "Tut",
|
||||
"compose_form.publish_loud": "{publish} !",
|
||||
"compose_form.sensitive": "Marcar lo mèdia coma sensible",
|
||||
"compose_form.spoiler": "Rescondre lo tèxte darrièr un avertiment",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Escrivètz l’avertiment aquí",
|
||||
"confirmation_modal.cancel": "Anullar",
|
||||
"confirmations.block.confirm": "Blocar",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Contengut sensible",
|
||||
"status.share": "Partejar",
|
||||
"status.show_less": "Tornar plegar",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Desplegar",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Tornar mostrar la conversacion",
|
||||
"status.unpin": "Tirar del perfil",
|
||||
"tabs_bar.federated_timeline": "Flux public global",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Co Ci chodzi po głowie?",
|
||||
"compose_form.publish": "Wyślij",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Oznacz treści jako wrażliwe",
|
||||
"compose_form.spoiler": "Ukryj tekst za ostrzeżeniem",
|
||||
"compose_form.sensitive.marked": "Zawartość multimedia jest oznaczona jako wrażliwa",
|
||||
"compose_form.sensitive.unmarked": "Zawartość multimedialna nie jest oznaczona jako wrażliwa",
|
||||
"compose_form.spoiler.marked": "Tekst jest ukryty za ostrzeżeniem",
|
||||
"compose_form.spoiler.unmarked": "Tekst nie jest ukryty",
|
||||
"compose_form.spoiler_placeholder": "Wprowadź swoje ostrzeżenie o zawartości",
|
||||
"confirmation_modal.cancel": "Anuluj",
|
||||
"confirmations.block.confirm": "Zablokuj",
|
||||
@@ -251,8 +253,10 @@
|
||||
"status.sensitive_toggle": "Naciśnij aby wyświetlić",
|
||||
"status.sensitive_warning": "Wrażliwa zawartość",
|
||||
"status.share": "Udostępnij",
|
||||
"status.show_less": "Pokaż mniej",
|
||||
"status.show_more": "Pokaż więcej",
|
||||
"status.show_less": "Zwiń",
|
||||
"status.show_less_all": "Zwiń wszystkie",
|
||||
"status.show_more": "Rozwiń",
|
||||
"status.show_more_all": "Rozwiń wszystkie",
|
||||
"status.unmute_conversation": "Cofnij wyciszenie konwersacji",
|
||||
"status.unpin": "Odepnij z profilu",
|
||||
"tabs_bar.federated_timeline": "Globalne",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "No que você está pensando?",
|
||||
"compose_form.publish": "Publicar",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marcar mídia como conteúdo sensível",
|
||||
"compose_form.spoiler": "Esconder texto com aviso de conteúdo",
|
||||
"compose_form.sensitive.marked": "Mídia está marcada como sensível",
|
||||
"compose_form.sensitive.unmarked": "Mídia não está marcada como sensível",
|
||||
"compose_form.spoiler.marked": "O texto está escondido por um aviso de conteúdo",
|
||||
"compose_form.spoiler.unmarked": "O texto não está escondido",
|
||||
"compose_form.spoiler_placeholder": "Aviso de conteúdo",
|
||||
"confirmation_modal.cancel": "Cancelar",
|
||||
"confirmations.block.confirm": "Bloquear",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Conteúdo sensível",
|
||||
"status.share": "Compartilhar",
|
||||
"status.show_less": "Mostrar menos",
|
||||
"status.show_less_all": "Mostrar menos para todas as mensagens",
|
||||
"status.show_more": "Mostrar mais",
|
||||
"status.show_more_all": "Mostrar mais para todas as mensagens",
|
||||
"status.unmute_conversation": "Desativar silêncio desta conversa",
|
||||
"status.unpin": "Desafixar do perfil",
|
||||
"tabs_bar.federated_timeline": "Global",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Em que estás a pensar?",
|
||||
"compose_form.publish": "Publicar",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Marcar media como conteúdo sensível",
|
||||
"compose_form.spoiler": "Esconder texto com aviso",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Aviso de conteúdo",
|
||||
"confirmation_modal.cancel": "Cancelar",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Conteúdo sensível",
|
||||
"status.share": "Compartilhar",
|
||||
"status.show_less": "Mostrar menos",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Mostrar mais",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Deixar de silenciar esta conversa",
|
||||
"status.unpin": "Não fixar no perfil",
|
||||
"tabs_bar.federated_timeline": "Global",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "О чем Вы думаете?",
|
||||
"compose_form.publish": "Трубить",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Отметить как чувствительный контент",
|
||||
"compose_form.spoiler": "Скрыть текст за предупреждением",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Напишите свое предупреждение здесь",
|
||||
"confirmation_modal.cancel": "Отмена",
|
||||
"confirmations.block.confirm": "Заблокировать",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Чувствительный контент",
|
||||
"status.share": "Поделиться",
|
||||
"status.show_less": "Свернуть",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Развернуть",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Снять глушение с треда",
|
||||
"status.unpin": "Открепить от профиля",
|
||||
"tabs_bar.federated_timeline": "Глобальная",
|
||||
|
@@ -18,7 +18,7 @@
|
||||
"account.muted": "Utíšený/á",
|
||||
"account.posts": "Hlášky",
|
||||
"account.posts_with_replies": "Príspevky s odpoveďami",
|
||||
"account.report": "Nahlásiť @{name}",
|
||||
"account.report": "Nahlás @{name}",
|
||||
"account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti",
|
||||
"account.share": "Zdieľať @{name} profil",
|
||||
"account.show_reblogs": "Zobraziť povýšenia od @{name}",
|
||||
@@ -35,13 +35,13 @@
|
||||
"bundle_modal_error.close": "Zatvoriť",
|
||||
"bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.",
|
||||
"bundle_modal_error.retry": "Skúsiť znova",
|
||||
"column.blocks": "Blokovaní používatelia",
|
||||
"column.blocks": "Blokovaní užívatelia",
|
||||
"column.community": "Lokálna časová os",
|
||||
"column.favourites": "Obľúbené",
|
||||
"column.follow_requests": "Žiadosti o sledovaní",
|
||||
"column.home": "Domov",
|
||||
"column.lists": "Zoznamy",
|
||||
"column.mutes": "Ignorovaní používatelia",
|
||||
"column.mutes": "Ignorovaní užívatelia",
|
||||
"column.notifications": "Notifikácie",
|
||||
"column.pins": "Pripnuté toots",
|
||||
"column.public": "Federovaná časová os",
|
||||
@@ -50,18 +50,20 @@
|
||||
"column_header.moveLeft_settings": "Presunúť stĺpec doľava",
|
||||
"column_header.moveRight_settings": "Presunúť stĺpec doprava",
|
||||
"column_header.pin": "Pripnúť",
|
||||
"column_header.show_settings": "Ukázať nastavenia",
|
||||
"column_header.show_settings": "Ukáž nastavenia",
|
||||
"column_header.unpin": "Odopnúť",
|
||||
"column_subheading.navigation": "Navigácia",
|
||||
"column_subheading.settings": "Nastavenia",
|
||||
"compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné toots môžu byť nájdené podľa haštagu.",
|
||||
"compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.",
|
||||
"compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
|
||||
"compose_form.lock_disclaimer.lock": "zamknutý",
|
||||
"compose_form.placeholder": "Na čo myslíš?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Označ médiá ako chúlostivé",
|
||||
"compose_form.spoiler": "Skryť text za varovanie",
|
||||
"compose_form.sensitive.marked": "Médiálny obsah je označený ako chúlostivý",
|
||||
"compose_form.sensitive.unmarked": "Médiálny obsah nieje označený ako chúlostivý",
|
||||
"compose_form.spoiler.marked": "Text je ukrytý za varovaním",
|
||||
"compose_form.spoiler.unmarked": "Text nieje ukrytý",
|
||||
"compose_form.spoiler_placeholder": "Sem napíšte vaše varovanie",
|
||||
"confirmation_modal.cancel": "Zrušiť",
|
||||
"confirmations.block.confirm": "Blokovať",
|
||||
@@ -99,14 +101,14 @@
|
||||
"empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.",
|
||||
"empty_column.notifications": "Nemáte ešte žiadne notifikácie. Napíšte niekomu, následujte niekoho a komunikujte s ostatnými aby diskusia mohla začať.",
|
||||
"empty_column.public": "Ešte tu nič nie je. Napíšte niečo verejne alebo začnite sledovať používateľov z iných Mastodon serverov aby tu niečo pribudlo",
|
||||
"follow_request.authorize": "Povoliť prístup",
|
||||
"follow_request.reject": "Odmietnúť",
|
||||
"follow_request.authorize": "Povoľ prístup",
|
||||
"follow_request.reject": "Odmietni",
|
||||
"getting_started.appsshort": "Aplikácie",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Začíname",
|
||||
"getting_started.faq": "Časté otázky",
|
||||
"getting_started.heading": "Začni tu",
|
||||
"getting_started.open_source_notice": "Mastodon má otvorený kód. Nahlásiť chyby, alebo prispievať vlastným kódom môžete na GitHube v {github}.",
|
||||
"getting_started.userguide": "Používateľská príručka",
|
||||
"home.column_settings.advanced": "Rozšírené",
|
||||
"home.column_settings.advanced": "Pokročilé",
|
||||
"home.column_settings.basic": "Základné",
|
||||
"home.column_settings.filter_regex": "Filtrovať použitím regulárnych výrazov",
|
||||
"home.column_settings.show_reblogs": "Zobraziť povýšené",
|
||||
@@ -145,7 +147,7 @@
|
||||
"missing_indicator.label": "Nenájdené",
|
||||
"missing_indicator.sublabel": "Tento zdroj sa nepodarilo nájsť",
|
||||
"mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?",
|
||||
"navigation_bar.blocks": "Blokovaní používatelia",
|
||||
"navigation_bar.blocks": "Blokovaní užívatelia",
|
||||
"navigation_bar.community_timeline": "Lokálna časová os",
|
||||
"navigation_bar.edit_profile": "Upraviť profil",
|
||||
"navigation_bar.favourites": "Obľúbené",
|
||||
@@ -154,9 +156,9 @@
|
||||
"navigation_bar.keyboard_shortcuts": "Klávesové skratky",
|
||||
"navigation_bar.lists": "Zoznamy",
|
||||
"navigation_bar.logout": "Odhlásiť",
|
||||
"navigation_bar.mutes": "Ignorovaní používatelia",
|
||||
"navigation_bar.mutes": "Ignorovaní užívatelia",
|
||||
"navigation_bar.pins": "Pripnuté toots",
|
||||
"navigation_bar.preferences": "Možnosti",
|
||||
"navigation_bar.preferences": "Voľby",
|
||||
"navigation_bar.public_timeline": "Federovaná časová os",
|
||||
"notification.favourite": "{name} sa páči tvoj status",
|
||||
"notification.follow": "{name} ťa začal/a následovať",
|
||||
@@ -217,8 +219,8 @@
|
||||
"report.placeholder": "Ďalšie komentáre",
|
||||
"report.submit": "Poslať",
|
||||
"report.target": "Nahlásenie {target}",
|
||||
"search.placeholder": "Hľadať",
|
||||
"search_popout.search_format": "Pokročilý formát vyhľadávania",
|
||||
"search.placeholder": "Hľadaj",
|
||||
"search_popout.search_format": "Pokročilé vyhľadávanie",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "haštag",
|
||||
"search_popout.tips.status": "status",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Chúlostivý obsah",
|
||||
"status.share": "Zdieľať",
|
||||
"status.show_less": "Zobraz menej",
|
||||
"status.show_less_all": "Všetkým ukáž menej",
|
||||
"status.show_more": "Zobraz viac",
|
||||
"status.show_more_all": "Všetkým ukáž viac",
|
||||
"status.unmute_conversation": "Prestať ignorovať konverzáciu",
|
||||
"status.unpin": "Odopnúť z profilu",
|
||||
"tabs_bar.federated_timeline": "Federovaná",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Šta Vam je na umu?",
|
||||
"compose_form.publish": "Tutni",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Obeleži multimediju kao osetljivu",
|
||||
"compose_form.spoiler": "Sakrij tekst ispod upozorenja",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Ovde upišite upozorenje",
|
||||
"confirmation_modal.cancel": "Poništi",
|
||||
"confirmations.block.confirm": "Blokiraj",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Osetljiv sadržaj",
|
||||
"status.share": "Podeli",
|
||||
"status.show_less": "Prikaži manje",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Prikaži više",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Uključi prepisku",
|
||||
"status.unpin": "Otkači sa profila",
|
||||
"tabs_bar.federated_timeline": "Federisano",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Шта Вам је на уму?",
|
||||
"compose_form.publish": "Тутни",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Обележи мултимедију као осетљиву",
|
||||
"compose_form.spoiler": "Сакриј текст испод упозорења",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Овде упишите упозорење",
|
||||
"confirmation_modal.cancel": "Поништи",
|
||||
"confirmations.block.confirm": "Блокирај",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Осетљив садржај",
|
||||
"status.share": "Подели",
|
||||
"status.show_less": "Прикажи мање",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Прикажи више",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Укључи преписку",
|
||||
"status.unpin": "Откачи са профила",
|
||||
"tabs_bar.federated_timeline": "Федерисано",
|
||||
|
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"account.block": "Blockera @{name}",
|
||||
"account.block_domain": "Dölj allt från {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.blocked": "Blockerad",
|
||||
"account.disclaimer_full": "Informationen nedan kan spegla användarens profil ofullständigt.",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.domain_blocked": "Domän gömd",
|
||||
"account.edit_profile": "Redigera profil",
|
||||
"account.follow": "Följ",
|
||||
"account.followers": "Följare",
|
||||
@@ -15,9 +15,9 @@
|
||||
"account.moved_to": "{name} har flyttat till:",
|
||||
"account.mute": "Tysta @{name}",
|
||||
"account.mute_notifications": "Stäng av notifieringar från @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.muted": "Nertystad",
|
||||
"account.posts": "Inlägg",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.posts_with_replies": "Toots med svar",
|
||||
"account.report": "Rapportera @{name}",
|
||||
"account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan",
|
||||
"account.share": "Dela @{name}'s profil",
|
||||
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Vad funderar du på?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Markera media som känslig",
|
||||
"compose_form.spoiler": "Dölj text bakom varning",
|
||||
"compose_form.sensitive.marked": "Media har markerats som känsligt",
|
||||
"compose_form.sensitive.unmarked": "Media har inte markerats som känsligt",
|
||||
"compose_form.spoiler.marked": "Texten har dolts bakom en varning",
|
||||
"compose_form.spoiler.unmarked": "Texten är inte dold",
|
||||
"compose_form.spoiler_placeholder": "Skriv din varning här",
|
||||
"confirmation_modal.cancel": "Ångra",
|
||||
"confirmations.block.confirm": "Blockera",
|
||||
@@ -211,20 +213,20 @@
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"reply_indicator.cancel": "Ångra",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Vidarebefordra till {target}",
|
||||
"report.forward_hint": "Kontot är från en annan server. Skicka även en anonymiserad kopia av anmälan dit?",
|
||||
"report.hint": "Anmälan skickas till din instans moderatorer. Du kan ge en förklaring till varför du har anmält detta konto nedan:",
|
||||
"report.placeholder": "Ytterligare kommentarer",
|
||||
"report.submit": "Skicka",
|
||||
"report.target": "Rapporterar {target}",
|
||||
"search.placeholder": "Sök",
|
||||
"search_popout.search_format": "Avancerat sökformat",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.full_text": "Enkel text returnerar statusar där du har skrivit, favoriserat, knuffat eller nämnts samt med matchande användarnamn, visningsnamn och hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.text": "Enkel text returnerar matchande visningsnamn, användarnamn och hashtags",
|
||||
"search_popout.tips.user": "användare",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.accounts": "Människor",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.total": "{count, number} {count, plural, ett {result} andra {results}}",
|
||||
@@ -242,7 +244,7 @@
|
||||
"status.mute_conversation": "Tysta konversation",
|
||||
"status.open": "Utvidga denna status",
|
||||
"status.pin": "Fäst i profil",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.pinned": "Fäst toot",
|
||||
"status.reblog": "Knuff",
|
||||
"status.reblogged_by": "{name} knuffade",
|
||||
"status.reply": "Svara",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Känsligt innehåll",
|
||||
"status.share": "Dela",
|
||||
"status.show_less": "Visa mindre",
|
||||
"status.show_less_all": "Visa mindre för alla",
|
||||
"status.show_more": "Visa mer",
|
||||
"status.show_more_all": "Visa mer för alla",
|
||||
"status.unmute_conversation": "Öppna konversation",
|
||||
"status.unpin": "Ångra fäst i profil",
|
||||
"tabs_bar.federated_timeline": "Förenad",
|
||||
@@ -263,7 +267,7 @@
|
||||
"upload_area.title": "Dra & släpp för att ladda upp",
|
||||
"upload_button.label": "Lägg till media",
|
||||
"upload_form.description": "Beskriv för synskadade",
|
||||
"upload_form.focus": "Crop",
|
||||
"upload_form.focus": "Beskär",
|
||||
"upload_form.undo": "Ångra",
|
||||
"upload_progress.label": "Laddar upp...",
|
||||
"video.close": "Stäng video",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "What is on your mind?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Mark media as sensitive",
|
||||
"compose_form.spoiler": "Hide text behind warning",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Content warning",
|
||||
"confirmation_modal.cancel": "Cancel",
|
||||
"confirmations.block.confirm": "Block",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Show less",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Show more",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federated",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Ne düşünüyorsun?",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Görseli hassas olarak işaretle",
|
||||
"compose_form.spoiler": "Metni uyarı arkasına gizle",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "İçerik uyarısı",
|
||||
"confirmation_modal.cancel": "İptal",
|
||||
"confirmations.block.confirm": "Engelle",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Hassas içerik",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Daha azı",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Daha fazlası",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Unmute conversation",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Federe",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "Що у Вас на думці?",
|
||||
"compose_form.publish": "Дмухнути",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "Відмітити як непристойний зміст",
|
||||
"compose_form.spoiler": "Приховати текст за попередженням",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Попередження щодо прихованого тексту",
|
||||
"confirmation_modal.cancel": "Відмінити",
|
||||
"confirmations.block.confirm": "Заблокувати",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "Непристойний зміст",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "Згорнути",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Розгорнути",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "Зняти глушення з діалогу",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"tabs_bar.federated_timeline": "Глобальна",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "在想啥?",
|
||||
"compose_form.publish": "嘟嘟",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "将媒体文件标记为敏感内容",
|
||||
"compose_form.spoiler": "折叠嘟文内容",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "折叠部分的警告消息",
|
||||
"confirmation_modal.cancel": "取消",
|
||||
"confirmations.block.confirm": "屏蔽",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "敏感内容",
|
||||
"status.share": "分享",
|
||||
"status.show_less": "隐藏内容",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "显示内容",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "不再隐藏此对话",
|
||||
"status.unpin": "在个人资料页面取消置顶",
|
||||
"tabs_bar.federated_timeline": "跨站",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "你在想甚麼?",
|
||||
"compose_form.publish": "發文",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "將媒體檔案標示為「敏感內容」",
|
||||
"compose_form.spoiler": "將部份文字藏於警告訊息之後",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "敏感警告訊息",
|
||||
"confirmation_modal.cancel": "取消",
|
||||
"confirmations.block.confirm": "封鎖",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "敏感內容",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "減少顯示",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "顯示更多",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "解禁對話",
|
||||
"status.unpin": "解除置頂",
|
||||
"tabs_bar.federated_timeline": "跨站",
|
||||
|
@@ -60,8 +60,10 @@
|
||||
"compose_form.placeholder": "在想些什麼?",
|
||||
"compose_form.publish": "貼掉",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive": "將此媒體標為敏感",
|
||||
"compose_form.spoiler": "將訊息隱藏在警告訊息之後",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "內容警告",
|
||||
"confirmation_modal.cancel": "取消",
|
||||
"confirmations.block.confirm": "封鎖",
|
||||
@@ -252,7 +254,9 @@
|
||||
"status.sensitive_warning": "敏感內容",
|
||||
"status.share": "Share",
|
||||
"status.show_less": "看少點",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "看更多",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.unmute_conversation": "不消音對話",
|
||||
"status.unpin": "解除置頂",
|
||||
"tabs_bar.federated_timeline": "聯盟",
|
||||
|
@@ -35,6 +35,8 @@ import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrde
|
||||
import uuid from '../uuid';
|
||||
import { me } from '../initial_state';
|
||||
|
||||
const allowedAroundShortCode = '><\u0085\u0020\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\u0009\u000a\u000b\u000c\u000d';
|
||||
|
||||
const initialState = ImmutableMap({
|
||||
mounted: 0,
|
||||
sensitive: false,
|
||||
@@ -135,12 +137,14 @@ const updateSuggestionTags = (state, token) => {
|
||||
};
|
||||
|
||||
const insertEmoji = (state, position, emojiData) => {
|
||||
const emoji = emojiData.native;
|
||||
const oldText = state.get('text');
|
||||
const needsSpace = emojiData.custom && position > 0 && !allowedAroundShortCode.includes(oldText[position - 1]);
|
||||
const emoji = needsSpace ? ' ' + emojiData.native : emojiData.native;
|
||||
|
||||
return state.withMutations(map => {
|
||||
map.update('text', oldText => `${oldText.slice(0, position)}${emoji} ${oldText.slice(position)}`);
|
||||
map.set('focusDate', new Date());
|
||||
map.set('idempotencyKey', uuid());
|
||||
return state.merge({
|
||||
text: `${oldText.slice(0, position)}${emoji} ${oldText.slice(position)}`,
|
||||
focusDate: new Date(),
|
||||
idempotencyKey: uuid(),
|
||||
});
|
||||
};
|
||||
|
||||
|
@@ -56,17 +56,21 @@ const normalizeStatus = (state, status) => {
|
||||
normalStatus.reblog = status.reblog.id;
|
||||
}
|
||||
|
||||
const searchContent = [status.spoiler_text, status.content].join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');
|
||||
// Only calculate these values when status first encountered
|
||||
// Otherwise keep the ones already in the reducer
|
||||
if (!state.has(status.id)) {
|
||||
const searchContent = [status.spoiler_text, status.content].join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');
|
||||
|
||||
const emojiMap = normalStatus.emojis.reduce((obj, emoji) => {
|
||||
obj[`:${emoji.shortcode}:`] = emoji;
|
||||
return obj;
|
||||
}, {});
|
||||
const emojiMap = normalStatus.emojis.reduce((obj, emoji) => {
|
||||
obj[`:${emoji.shortcode}:`] = emoji;
|
||||
return obj;
|
||||
}, {});
|
||||
|
||||
normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent;
|
||||
normalStatus.contentHtml = emojify(normalStatus.content, emojiMap);
|
||||
normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(normalStatus.spoiler_text || ''), emojiMap);
|
||||
normalStatus.hidden = normalStatus.sensitive;
|
||||
normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent;
|
||||
normalStatus.contentHtml = emojify(normalStatus.content, emojiMap);
|
||||
normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(normalStatus.spoiler_text || ''), emojiMap);
|
||||
normalStatus.hidden = normalStatus.sensitive;
|
||||
}
|
||||
|
||||
return state.update(status.id, ImmutableMap(), map => map.mergeDeep(fromJS(normalStatus)));
|
||||
};
|
||||
|
@@ -1,10 +1,48 @@
|
||||
import './web_push_notifications';
|
||||
|
||||
function openCache() {
|
||||
return caches.open('mastodon-web');
|
||||
}
|
||||
|
||||
function fetchRoot() {
|
||||
return fetch('/', { credentials: 'include' });
|
||||
}
|
||||
|
||||
// Cause a new version of a registered Service Worker to replace an existing one
|
||||
// that is already installed, and replace the currently active worker on open pages.
|
||||
self.addEventListener('install', function(event) {
|
||||
event.waitUntil(self.skipWaiting());
|
||||
event.waitUntil(Promise.all([openCache(), fetchRoot()]).then(([cache, root]) => cache.put('/', root)));
|
||||
});
|
||||
self.addEventListener('activate', function(event) {
|
||||
event.waitUntil(self.clients.claim());
|
||||
});
|
||||
self.addEventListener('fetch', function(event) {
|
||||
const url = new URL(event.request.url);
|
||||
|
||||
if (url.pathname.startsWith('/web/')) {
|
||||
const asyncResponse = fetchRoot();
|
||||
const asyncCache = openCache();
|
||||
|
||||
event.respondWith(asyncResponse.then(async response => {
|
||||
if (response.ok) {
|
||||
const cache = await asyncCache;
|
||||
await cache.put('/', response);
|
||||
return response.clone();
|
||||
}
|
||||
|
||||
throw null;
|
||||
}).catch(() => caches.match('/')));
|
||||
} else if (url.pathname === '/auth/sign_out') {
|
||||
const asyncResponse = fetch(event.request);
|
||||
const asyncCache = openCache();
|
||||
|
||||
event.respondWith(asyncResponse.then(async response => {
|
||||
if (response.ok || response.type === 'opaqueredirect') {
|
||||
const cache = await asyncCache;
|
||||
await cache.delete('/');
|
||||
}
|
||||
|
||||
return response;
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
@@ -440,6 +440,7 @@
|
||||
text-align: center;
|
||||
padding: 60px 0;
|
||||
padding-top: 55px;
|
||||
margin: 0 auto;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
|
@@ -1842,6 +1842,9 @@
|
||||
object-position: bottom left;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
user-drag: none;
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3422,8 +3425,12 @@ a.status-card {
|
||||
img,
|
||||
canvas,
|
||||
video {
|
||||
max-width: 100vw;
|
||||
max-height: 100vh;
|
||||
max-width: 100%;
|
||||
/*
|
||||
put margins on top and bottom of image to avoid the screen coverd by
|
||||
image.
|
||||
*/
|
||||
max-height: 80%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
margin: auto;
|
||||
@@ -3435,11 +3442,6 @@ a.status-card {
|
||||
background: url('../images/void.png') repeat;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.react-swipeable-view-container {
|
||||
width: 100vw;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.media-modal__closer {
|
||||
|
@@ -1,6 +1,22 @@
|
||||
body.rtl {
|
||||
direction: rtl;
|
||||
|
||||
.column-header > button {
|
||||
text-align: right;
|
||||
padding-left: 0;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.landing-page__logo {
|
||||
margin-right: 0;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.landing-page .features-list .features-list__row .visual {
|
||||
margin-left: 0;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.column-link__icon,
|
||||
.column-header__icon {
|
||||
margin-right: 0;
|
||||
|
@@ -53,7 +53,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
visibility: visibility_from_audience,
|
||||
thread: replied_to_status,
|
||||
conversation: conversation_from_uri(@object['conversation']),
|
||||
media_attachments: process_attachments.take(4),
|
||||
media_attachment_ids: process_attachments.take(4).map(&:id),
|
||||
}
|
||||
end
|
||||
|
||||
|
@@ -45,7 +45,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
|
||||
visibility: visibility_scope,
|
||||
conversation: find_or_create_conversation,
|
||||
thread: thread? ? find_status(thread.first) || find_activitypub_status(thread.first, thread.second) : nil,
|
||||
media_attachments: media_attachments
|
||||
media_attachment_ids: media_attachments.map(&:id)
|
||||
)
|
||||
|
||||
save_mentions(status)
|
||||
|
@@ -351,7 +351,7 @@ class OStatus::AtomSerializer
|
||||
append_element(entry, 'summary', status.spoiler_text, 'xml:lang': status.language) if status.spoiler_text?
|
||||
append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language)
|
||||
|
||||
status.mentions.each do |mentioned|
|
||||
status.mentions.order(:id).each do |mentioned|
|
||||
append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account))
|
||||
end
|
||||
|
||||
|
@@ -94,9 +94,16 @@ class Request
|
||||
class Socket < TCPSocket
|
||||
class << self
|
||||
def open(host, *args)
|
||||
address = IPSocket.getaddress(host)
|
||||
raise Mastodon::HostValidationError if PrivateAddressCheck.private_address? IPAddr.new(address)
|
||||
super address, *args
|
||||
outer_e = nil
|
||||
Addrinfo.foreach(host, nil, nil, :SOCK_STREAM) do |address|
|
||||
begin
|
||||
raise Mastodon::HostValidationError if PrivateAddressCheck.private_address? IPAddr.new(address.ip_address)
|
||||
return super address.ip_address, *args
|
||||
rescue => e
|
||||
outer_e = e
|
||||
end
|
||||
end
|
||||
raise outer_e if outer_e
|
||||
end
|
||||
|
||||
alias new open
|
||||
|
@@ -47,7 +47,8 @@
|
||||
#
|
||||
|
||||
class Account < ApplicationRecord
|
||||
MENTION_RE = /(?<=^|[^\/[:word:]])@(([a-z0-9_]+)(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i
|
||||
USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.]+[a-z0-9_]+)?/i
|
||||
MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i
|
||||
|
||||
include AccountAvatar
|
||||
include AccountFinderConcern
|
||||
@@ -68,7 +69,8 @@ class Account < ApplicationRecord
|
||||
validates :username, uniqueness: { scope: :domain, case_sensitive: true }, if: -> { !local? && will_save_change_to_username? }
|
||||
|
||||
# Local user validations
|
||||
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, uniqueness: { scope: :domain, case_sensitive: false }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? }
|
||||
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? }
|
||||
validates_with UniqueUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
||||
validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? }
|
||||
validates :note, length: { maximum: 160 }, if: -> { local? && will_save_change_to_note? }
|
||||
|
@@ -38,7 +38,7 @@ module Remotable
|
||||
send("#{attachment_name}_file_name=", basename + extname)
|
||||
|
||||
self[attribute_name] = url if has_attribute?(attribute_name)
|
||||
rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError => e
|
||||
rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError => e
|
||||
Rails.logger.debug "Error fetching remote #{attachment_name}: #{e}"
|
||||
nil
|
||||
end
|
||||
|
@@ -52,6 +52,8 @@ class User < ApplicationRecord
|
||||
devise :registerable, :recoverable, :rememberable, :trackable, :validatable,
|
||||
:confirmable
|
||||
|
||||
devise :pam_authenticatable if ENV['PAM_ENABLED'] == 'true'
|
||||
|
||||
devise :omniauthable
|
||||
|
||||
belongs_to :account, inverse_of: :user
|
||||
@@ -96,7 +98,7 @@ class User < ApplicationRecord
|
||||
|
||||
def pam_conflict?
|
||||
return false unless Devise.pam_authentication
|
||||
encrypted_password.present? && is_pam_account?
|
||||
encrypted_password.present? && pam_managed_user?
|
||||
end
|
||||
|
||||
def pam_get_name
|
||||
@@ -267,22 +269,22 @@ class User < ApplicationRecord
|
||||
end
|
||||
|
||||
def self.pam_get_user(attributes = {})
|
||||
if attributes[:email]
|
||||
resource =
|
||||
if Devise.check_at_sign && !attributes[:email].index('@')
|
||||
joins(:account).find_by(accounts: { username: attributes[:email] })
|
||||
else
|
||||
find_by(email: attributes[:email])
|
||||
end
|
||||
|
||||
if resource.blank?
|
||||
resource = new(email: attributes[:email])
|
||||
if Devise.check_at_sign && !resource[:email].index('@')
|
||||
resource[:email] = "#{attributes[:email]}@#{resource.find_pam_suffix}"
|
||||
end
|
||||
return nil unless attributes[:email]
|
||||
resource =
|
||||
if Devise.check_at_sign && !attributes[:email].index('@')
|
||||
joins(:account).find_by(accounts: { username: attributes[:email] })
|
||||
else
|
||||
find_by(email: attributes[:email])
|
||||
end
|
||||
|
||||
if resource.blank?
|
||||
resource = new(email: attributes[:email])
|
||||
if Devise.check_at_sign && !resource[:email].index('@')
|
||||
resource[:email] = Rpam2.getenv(resource.find_pam_service, attributes[:email], attributes[:password], 'email', false)
|
||||
resource[:email] = "#{attributes[:email]}@#{resource.find_pam_suffix}" unless resource[:email]
|
||||
end
|
||||
resource
|
||||
end
|
||||
resource
|
||||
end
|
||||
|
||||
def self.ldap_get_user(attributes = {})
|
||||
|
@@ -57,7 +57,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
|
||||
end
|
||||
|
||||
def virtual_tags
|
||||
object.mentions + object.tags + object.emojis
|
||||
object.mentions.to_a.sort_by(&:id) + object.tags + object.emojis
|
||||
end
|
||||
|
||||
def atom_uri
|
||||
|
@@ -15,7 +15,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
||||
belongs_to :account, serializer: REST::AccountSerializer
|
||||
|
||||
has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
|
||||
has_many :mentions
|
||||
has_many :ordered_mentions, key: :mentions
|
||||
has_many :tags
|
||||
has_many :emojis, serializer: REST::CustomEmojiSerializer
|
||||
|
||||
@@ -86,6 +86,10 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
||||
%w(public unlisted).include?(object.visibility)
|
||||
end
|
||||
|
||||
def ordered_mentions
|
||||
object.mentions.to_a.sort_by(&:id)
|
||||
end
|
||||
|
||||
class ApplicationSerializer < ActiveModel::Serializer
|
||||
attributes :name, :website
|
||||
end
|
||||
|
@@ -16,7 +16,7 @@ class ActivityPub::ProcessAccountService < BaseService
|
||||
|
||||
RedisLock.acquire(lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
@account = Account.find_by(uri: @uri)
|
||||
@account = Account.find_remote(@username, @domain)
|
||||
@old_public_key = @account&.public_key
|
||||
@old_protocol = @account&.protocol
|
||||
|
||||
|
@@ -49,7 +49,7 @@ class BackupService < BaseService
|
||||
end
|
||||
end
|
||||
|
||||
archive_filename = ['archive', Time.now.utc.strftime('%Y%m%d%H%M%S'), SecureRandom.hex(2)].join('-') + '.tar.gz'
|
||||
archive_filename = ['archive', Time.now.utc.strftime('%Y%m%d%H%M%S'), SecureRandom.hex(16)].join('-') + '.tar.gz'
|
||||
|
||||
@backup.dump = ActionDispatch::Http::UploadedFile.new(tempfile: tmp_file, filename: archive_filename)
|
||||
@backup.processed = true
|
||||
|
14
app/validators/unique_username_validator.rb
Normal file
14
app/validators/unique_username_validator.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UniqueUsernameValidator < ActiveModel::Validator
|
||||
def validate(account)
|
||||
return if account.username.nil?
|
||||
|
||||
normalized_username = account.username.downcase.delete('.')
|
||||
|
||||
scope = Account.where(domain: nil, username: normalized_username)
|
||||
scope = scope.where.not(id: account.id) if account.persisted?
|
||||
|
||||
account.errors.add(:username, :taken) if scope.exists?
|
||||
end
|
||||
end
|
@@ -50,7 +50,7 @@
|
||||
|
||||
%p= @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname)
|
||||
|
||||
.landing-page__call-to-action
|
||||
.landing-page__call-to-action{ dir: 'ltr' }
|
||||
.row
|
||||
.row__information-board
|
||||
.information-board__section
|
||||
|
@@ -1,6 +1,6 @@
|
||||
= opengraph 'og:url', url
|
||||
= opengraph 'og:site_name', site_title
|
||||
= opengraph 'og:title', [yield(:page_title).strip.presence, site_title].compact.join(' - ')
|
||||
= opengraph 'og:title', yield(:page_title).strip
|
||||
= opengraph 'og:description', account_description(account)
|
||||
= opengraph 'og:image', full_asset_url(account.avatar.url(:original))
|
||||
= opengraph 'og:image:width', '120'
|
||||
|
@@ -1,5 +1,5 @@
|
||||
- content_for :page_title do
|
||||
= "#{display_name(@account)} (@#{@account.username})"
|
||||
= "#{display_name(@account)} (@#{@account.local_username_and_domain})"
|
||||
|
||||
- content_for :header_tags do
|
||||
%meta{ name: 'description', content: account_description(@account) }/
|
||||
|
@@ -24,6 +24,11 @@
|
||||
%bdi= display_name(status.account)
|
||||
= "@#{status.account.acct}"
|
||||
|
||||
- if status.spoiler_text?
|
||||
%div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' }
|
||||
%p
|
||||
= Formatter.instance.format_spoiler(status)
|
||||
|
||||
%div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' }
|
||||
= Formatter.instance.format(status)
|
||||
|
||||
|
@@ -1,3 +1,8 @@
|
||||
<% if status.spoiler_text? %>
|
||||
<%= raw status.spoiler_text %>
|
||||
----
|
||||
|
||||
<% end %>
|
||||
<%= raw Formatter.instance.plaintext(status) %>
|
||||
|
||||
<%= raw t('application_mailer.view')%> <%= web_url("statuses/#{status.id}") %>
|
||||
|
@@ -1 +1 @@
|
||||
= opengraph 'og:description', [activity.spoiler_text, activity.text].reject(&:blank?).join("\n\n")
|
||||
= opengraph 'og:description', status_description(activity)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
- if activity.is_a?(Status) && activity.media_attachments.any?
|
||||
- if activity.is_a?(Status) && activity.non_sensitive_with_media?
|
||||
- player_card = false
|
||||
- activity.media_attachments.each do |media|
|
||||
- if media.image?
|
||||
|
@@ -11,8 +11,8 @@
|
||||
|
||||
= opengraph 'og:site_name', site_title
|
||||
= opengraph 'og:type', 'article'
|
||||
= opengraph 'og:title', "#{@account.display_name.presence || @account.username} on #{site_hostname}"
|
||||
= opengraph 'og:url', account_stream_entry_url(@account, @stream_entry)
|
||||
= opengraph 'og:title', "#{display_name(@account)} (@#{@account.local_username_and_domain})"
|
||||
= opengraph 'og:url', short_account_status_url(@account, @stream_entry)
|
||||
|
||||
= render 'stream_entries/og_description', activity: @stream_entry.activity
|
||||
= render 'stream_entries/og_image', activity: @stream_entry.activity, account: @account
|
||||
|
@@ -38,7 +38,7 @@
|
||||
%table.input{ align: 'center', cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td= @resource.unconfirmed_email
|
||||
%td= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email
|
||||
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
|
@@ -4,6 +4,6 @@
|
||||
|
||||
<%= t 'devise.mailer.email_changed.explanation' %>
|
||||
|
||||
<%= @resource.unconfirmed_email %>
|
||||
<%= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email %>
|
||||
|
||||
<%= t 'devise.mailer.email_changed.extra' %>
|
||||
|
@@ -3,7 +3,16 @@
|
||||
class BackupWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: 'pull'
|
||||
sidekiq_options queue: 'pull', backtrace: true, retry: 5, dead: false
|
||||
|
||||
sidekiq_retries_exhausted do |msg|
|
||||
backup_id = msg['args'].first
|
||||
|
||||
ActiveRecord::Base.connection_pool.with_connection do
|
||||
backup = Backup.find(backup_id)
|
||||
backup&.destroy
|
||||
end
|
||||
end
|
||||
|
||||
def perform(backup_id)
|
||||
backup = Backup.find(backup_id)
|
||||
|
@@ -193,9 +193,9 @@ data.db:
|
||||
- id: backup
|
||||
schedule: '0 3 * * *'
|
||||
command: |
|
||||
PGPASSWORD=${DATA_POSTGRES_PASS} pg_dump -U ${DATA_POSTGRES_USER} -w -Fc -O gonano |
|
||||
PGPASSWORD=${DATA_DB_PASS} pg_dump -U ${DATA_DB_USER} -w -Fc -O gonano |
|
||||
gzip |
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).sql.gz --data-binary @- &&
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).sql.gz -X POST -T - >&2
|
||||
curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ |
|
||||
sed 's/,/\n/g' |
|
||||
grep ${HOSTNAME} |
|
||||
@@ -215,7 +215,7 @@ data.redis:
|
||||
- id: backup
|
||||
schedule: '0 3 * * *'
|
||||
command: |
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).rdb --data-binary @/data/var/db/redis/dump.rdb &&
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).rdb -X POST -T /data/var/db/redis/dump.rdb >&2
|
||||
curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ |
|
||||
sed 's/,/\n/g' |
|
||||
grep ${HOSTNAME} |
|
||||
@@ -236,7 +236,7 @@ data.storage:
|
||||
schedule: '0 3 * * *'
|
||||
command: |
|
||||
tar cz -C /data/var/db/unfs/ . |
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz --data-binary @- &&
|
||||
curl -k -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/backup-${HOSTNAME}-$(date -u +%Y-%m-%d.%H-%M-%S).tgz -X POST -T - >&2
|
||||
curl -k -s -H "X-AUTH-TOKEN: ${WAREHOUSE_DATA_HOARDER_TOKEN}" https://${WAREHOUSE_DATA_HOARDER_HOST}:7410/blobs/ |
|
||||
sed 's/,/\n/g' |
|
||||
grep ${HOSTNAME} |
|
||||
|
@@ -16,6 +16,8 @@ require_relative '../lib/devise/ldap_authenticatable'
|
||||
|
||||
Dotenv::Railtie.load
|
||||
|
||||
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
|
||||
|
||||
require_relative '../lib/mastodon/redis_config'
|
||||
|
||||
module Mastodon
|
||||
@@ -74,9 +76,7 @@ module Mastodon
|
||||
]
|
||||
|
||||
config.i18n.default_locale = ENV['DEFAULT_LOCALE']&.to_sym
|
||||
if config.i18n.available_locales.include?(config.i18n.default_locale)
|
||||
config.i18n.fallbacks = [:en]
|
||||
else
|
||||
unless config.i18n.available_locales.include?(config.i18n.default_locale)
|
||||
config.i18n.default_locale = :en
|
||||
end
|
||||
|
||||
|
@@ -55,8 +55,8 @@ Rails.application.configure do
|
||||
# config.action_mailer.raise_delivery_errors = false
|
||||
|
||||
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
||||
# the I18n.default_locale when a translation cannot be found).
|
||||
config.i18n.fallbacks = true
|
||||
# English when a translation cannot be found).
|
||||
config.i18n.fallbacks = [:en]
|
||||
|
||||
# Send deprecation notices to registered listeners.
|
||||
config.active_support.deprecation = :notify
|
||||
|
@@ -62,3 +62,4 @@ ignore_unused:
|
||||
- 'errors.429'
|
||||
- 'admin.accounts.roles.*'
|
||||
- 'admin.action_logs.actions.*'
|
||||
- 'statuses.attached.*'
|
||||
|
@@ -55,6 +55,8 @@ module Devise
|
||||
@@ldap_bind_dn = nil
|
||||
mattr_accessor :ldap_password
|
||||
@@ldap_password = nil
|
||||
mattr_accessor :ldap_tls_no_verify
|
||||
@@ldap_tls_no_verify = false
|
||||
|
||||
class Strategies::PamAuthenticatable
|
||||
def valid?
|
||||
@@ -342,7 +344,7 @@ Devise.setup do |config|
|
||||
config.usernamefield = nil
|
||||
config.emailfield = 'email'
|
||||
config.check_at_sign = true
|
||||
config.pam_default_suffix = ENV.fetch('PAM_DEFAULT_SUFFIX') { nil }
|
||||
config.pam_default_suffix = ENV.fetch('PAM_EMAIL_DOMAIN') { ENV['LOCAL_DOMAIN'] }
|
||||
config.pam_default_service = ENV.fetch('PAM_DEFAULT_SERVICE') { 'rpam' }
|
||||
config.pam_controlled_service = ENV.fetch('PAM_CONTROLLED_SERVICE') { nil }
|
||||
end
|
||||
@@ -357,5 +359,6 @@ Devise.setup do |config|
|
||||
config.ldap_bind_dn = ENV.fetch('LDAP_BIND_DN')
|
||||
config.ldap_password = ENV.fetch('LDAP_PASSWORD')
|
||||
config.ldap_uid = ENV.fetch('LDAP_UID', 'cn')
|
||||
config.ldap_tls_no_verify = ENV['LDAP_TLS_NO_VERIFY'] == 'true'
|
||||
end
|
||||
end
|
||||
|
@@ -1,6 +1,7 @@
|
||||
---
|
||||
ar:
|
||||
about:
|
||||
about_hashtag_html: هذه هي الرسائل العامة مع الكلمات الدلالية <strong> 1#%{hashtag}</strong>. يمكنك التفاعل معهم إذا كان لديك حساب في أي مكان على الإنترنت المتحد.
|
||||
about_mastodon_html: ماستدون شبكة إجتماعية <em>حرة و مفتوحة المصدر</em>. هو بديل <em>لامركزي</em> لمنصات تجارية ، يمكنك من تجنب احتكار شركة واحدة للإتصالات الخاصة بك. يمكنك اختيار أي خادم تثق فيه. أيهما تختار، يمكنك التفاعل مع أي شخص آخر على الشبكة. يمكن لأي شخص تنصيب و تشغيل خادم ماستدون خاص به والمشاركة في <em>الشبكات الاجتماعية</em> بكل شفافية.
|
||||
about_this: عن مثيل الخادوم هذا
|
||||
closed_registrations: التسجيلات في مثيل الخادوم هذا مُغلقة حاليًا.
|
||||
@@ -10,11 +11,18 @@ ar:
|
||||
description_headline: ما هو %{domain}?
|
||||
domain_count_after: خوادم أخرى
|
||||
domain_count_before: متصل بـ
|
||||
extended_description_html: |
|
||||
<h3>مكان جيد للقواعد</h3>
|
||||
<p>لا يوجد تفصيل طويل حتى الآن.</p>
|
||||
features:
|
||||
humane_approach_body: تعلُّمًا مِن فشل الشبكات الأخرى، غاية ماستدون هي بلوغ الخيارات الأخلاقية في التصميم لمُحارَبة إسائة إستعمال شبكات التواصل الإجتماعية.
|
||||
humane_approach_title: أسلوب يعيد الإعتبار للإنسان
|
||||
not_a_product_body: ماستدون ليس شبكة تجارية. لا يحتوي على إعلانات و لا يقوم باستغلال البيانات و لا هو بِبُستان مُسيَّج. لا تحكم فيه وليس له أية هيئةٍ مركزيةٍ.
|
||||
not_a_product_title: إنك إنسان و لست سلعة
|
||||
real_conversation_body: يُمكنكم التعبير عن آرائكم بكل حرية بفضل 500 حرف و انتقاء دقيق للمحتوى و الوسائط بفضل أدوات التحذير التي هي بين أيديكم.
|
||||
real_conversation_title: مبني لتحقيق تواصل حقيقي
|
||||
within_reach_body: إبقوا على اتصال دائم بأصدقائكم حيثما كانوا عبر عدة تطبيقات لنظام آي أواس و أندرويد و عدة منصات أخرى بفضل واجهة برمجية للتطبيقات و بيئة صديقة للتطوير.
|
||||
within_reach_title: في مُتناوَل يدك دائمًا
|
||||
generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة"
|
||||
hosted_on: ماستدون مُستضاف على %{domain}
|
||||
learn_more: تعلم المزيد
|
||||
@@ -49,11 +57,13 @@ ar:
|
||||
created_at: التاريخ
|
||||
created_msg: تم إنشاء ملاحظة الإشراف بنجاح !
|
||||
delete: حذف
|
||||
destroyed_msg: تم تدمير ملاحظة الإشراف بنجاح !
|
||||
accounts:
|
||||
are_you_sure: متأكد ؟
|
||||
by_domain: النطاق
|
||||
confirm: تأكيد
|
||||
confirmed: مؤكَّد
|
||||
demote: إنزال الرُتبة الوظيفية
|
||||
disable: تعطيل
|
||||
disable_two_factor_authentication: تعطيل 2FA
|
||||
disabled: معطَّل
|
||||
@@ -67,13 +77,16 @@ ar:
|
||||
followers: المتابِعون
|
||||
followers_url: عنوان رابط المتابِعين
|
||||
follows: يتابع
|
||||
inbox_url: رابط صندوق الوارد
|
||||
ip: عنوان الإيبي
|
||||
location:
|
||||
all: الكل
|
||||
local: المحلي
|
||||
remote: عن بُعد
|
||||
title: الموقع
|
||||
login_status: وضع الدخول
|
||||
media_attachments: الوسائط المرفقة
|
||||
memorialize: تحول إلى صفحة للذاكرة
|
||||
moderation:
|
||||
all: الكل
|
||||
silenced: تم كتمه
|
||||
@@ -82,16 +95,22 @@ ar:
|
||||
moderation_notes: ملاحظات الإشراف
|
||||
most_recent_activity: آخر نشاط حديث
|
||||
most_recent_ip: أحدث عنوان إيبي
|
||||
not_subscribed: غير مشترك
|
||||
order:
|
||||
alphabetic: أبجديًا
|
||||
most_recent: الأحدث
|
||||
title: الترتيب
|
||||
outbox_url: رابط صندوق الصادر
|
||||
perform_full_suspension: تعطيل الحساب بالكامل
|
||||
profile_url: رابط الملف الشخصي
|
||||
promote: ترقية
|
||||
protocol: البروتوكول
|
||||
public: عمومي
|
||||
push_subscription_expires: انتهاء الاشتراك ”PuSH“
|
||||
redownload: تحديث الصورة الرمزية
|
||||
reset: إعادة التعيين
|
||||
reset_password: إعادة ضبط كلمة السر
|
||||
resubscribe: اشترك مرة أخرى
|
||||
role: التصريحات
|
||||
roles:
|
||||
admin: مدير
|
||||
@@ -100,31 +119,57 @@ ar:
|
||||
user: مستخدِم
|
||||
salmon_url: عنوان رابط سالمون Salmon
|
||||
search: البحث
|
||||
show:
|
||||
created_reports: البلاغات التي أنشأها هذا الحساب
|
||||
report: التقرير
|
||||
targeted_reports: التقريرات التي أُنشِأت ضد هذا الحساب
|
||||
silence: سكتهم
|
||||
statuses: المنشورات
|
||||
subscribe: اشترك
|
||||
title: الحسابات
|
||||
undo_silenced: رفع الصمت
|
||||
undo_suspension: إلغاء تعليق الحساب
|
||||
unsubscribe: إلغاء الاشتراك
|
||||
username: إسم المستخدم
|
||||
web: الويب
|
||||
action_logs:
|
||||
actions:
|
||||
confirm_user: "%{name} قد قام بتأكيد عنوان البريد الإلكتروني لـ %{target}"
|
||||
create_custom_emoji: "%{name} قام برفع إيموجي جديد %{target}"
|
||||
create_domain_block: "%{name} قام بحجب نطاق %{target}"
|
||||
create_email_domain_block: "%{name} قد قام بحظر نطاق البريد الإلكتروني %{target}"
|
||||
demote_user: "%{name} قد قام بإنزال الرتبة الوظيفية لـ %{target}"
|
||||
destroy_domain_block: "%{name} قام بإلغاء الحجب عن النطاق %{target}"
|
||||
disable_2fa_user: "%{name} لقد قام بتعطيل ميزة المصادقة بخطوتين للمستخدم %{target}"
|
||||
disable_custom_emoji: "%{name} قام بتعطيل الإيموجي %{target}"
|
||||
disable_user: "%{name} لقد قام بتعطيل تسجيل الدخول للمستخدِم %{target}"
|
||||
enable_custom_emoji: "%{name} قام بتنشيط الإيموجي %{target}"
|
||||
enable_user: "%{name} لقد قام بتنشيط تسجيل الدخول للمستخدِم %{target}"
|
||||
promote_user: "%{name} قام بترقية المستخدم %{target}"
|
||||
reset_password_user: "%{name} لقد قام بإعادة تعيين الكلمة السرية الخاصة بـ %{target}"
|
||||
update_custom_emoji: "%{name} قام بتحديث الإيموجي %{target}"
|
||||
title: سِجلّ التفتيش و المعاينة
|
||||
custom_emojis:
|
||||
by_domain: النطاق
|
||||
copied_msg: تم إنشاء نسخة محلية للإيموجي بنجاح
|
||||
copy: نسخ
|
||||
copy_failed_msg: فشلت عملية إنشاء نسخة محلية لهذا الإيموجي
|
||||
created_msg: تم إنشاء الإيموجي بنجاح !
|
||||
delete: حذف
|
||||
destroyed_msg: تمت عملية تدمير الإيموجي بنجاح !
|
||||
disable: تعطيل
|
||||
disabled_msg: تمت عملية تعطيل ذلك الإيموجي بنجاح
|
||||
emoji: إيموجي
|
||||
enable: تفعيل
|
||||
enabled_msg: تم تنشيط ذاك الإيموجي بنجاح
|
||||
image_hint: ملف PNG إلى غاية حجم 50 ك.ب
|
||||
new:
|
||||
title: إضافة إيموجي خاص جديد
|
||||
shortcode: الترميز المُصَغّر
|
||||
shortcode_hint: على الأقل حرفين، و فقط رموز أبجدية عددية و أسطر سفلية
|
||||
title: الإيموجي الخاصة
|
||||
update_failed_msg: تعذرت عملية تحذيث ذاك الإيموجي
|
||||
updated_msg: تم تحديث الإيموجي بنجاح !
|
||||
upload: رفع
|
||||
domain_blocks:
|
||||
add_new: إضافة نطاق جديد
|
||||
@@ -135,9 +180,11 @@ ar:
|
||||
noop: لا شيء
|
||||
silence: كتم
|
||||
title: حجب نطاق جديد
|
||||
reject_media: رفض ملفات الوسائط
|
||||
severities:
|
||||
noop: لا شيء
|
||||
show:
|
||||
title: رفع حظر النطاق عن %{domain}
|
||||
undo: إلغاء
|
||||
undo: إلغاء
|
||||
email_domain_blocks:
|
||||
@@ -145,6 +192,7 @@ ar:
|
||||
domain: النطاق
|
||||
new:
|
||||
create: إضافة نطاق
|
||||
title: القائمة السوداء للبريد الإلكتروني
|
||||
instances:
|
||||
account_count: الحسابات المعروفة
|
||||
domain_name: النطاق
|
||||
@@ -156,8 +204,10 @@ ar:
|
||||
all: الكل
|
||||
available: المتوفرة
|
||||
expired: المنتهي صلاحيتها
|
||||
title: التصفية
|
||||
title: الدعوات
|
||||
reports:
|
||||
action_taken_by: تم اتخاذ الإجراء مِن طرف
|
||||
are_you_sure: هل أنت متأكد ؟
|
||||
comment:
|
||||
label: تعليق
|
||||
@@ -174,6 +224,7 @@ ar:
|
||||
settings:
|
||||
contact_information:
|
||||
email: البريد الإلكتروني المهني
|
||||
username: الإتصال بالمستخدِم
|
||||
registrations:
|
||||
closed_message:
|
||||
title: رسالة التسجيلات المقفلة
|
||||
@@ -221,6 +272,7 @@ ar:
|
||||
regenerate_token: إعادة توليد رمز النفاذ
|
||||
your_token: رمز نفاذك
|
||||
auth:
|
||||
agreement_html: بقبولك التسجيل فإنك تُصرِّح قبول <a href="%{rules_path}">قواعد مثيل الخادوم</a> و <a href="%{terms_path}">شروط الخدمة التي نوفرها لك</a>.
|
||||
confirm_email: تأكيد عنوان البريد الإلكتروني
|
||||
delete_account: حذف حساب
|
||||
delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك <a href="%{path}">المواصلة هنا</a>. سوف يُطلَبُ منك التأكيد قبل الحذف.
|
||||
@@ -275,6 +327,11 @@ ar:
|
||||
content: نحن متأسفون، لقد حدث خطأ ما مِن جانبنا.
|
||||
title: هذه الصفحة خاطئة
|
||||
exports:
|
||||
archive_takeout:
|
||||
download: تنزيل نسخة لحسابك
|
||||
hint_html: بإمكانك طلب نسخة كاملة لـ <strong>كافة تبويقاتك و الوسائط التي قمت بنشرها</strong>. البيانات المُصدَّرة ستكون محفوظة على شكل نسق ActivityPub و باستطاعتك قراءتها بأي برنامج يدعم هذا النسق.
|
||||
in_progress: عملية جمع نسخة لبيانات حسابك جارية …
|
||||
request: طلب نسخة لحسابك
|
||||
blocks: قمت بحظر
|
||||
csv: CSV
|
||||
follows: أنت تتبع
|
||||
@@ -314,7 +371,7 @@ ar:
|
||||
table:
|
||||
expires_at: تنتهي مدة صلاحيتها في
|
||||
title: دعوة أشخاص
|
||||
landing_strip_html: "<strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse.."
|
||||
landing_strip_html: "<strong>%{name}</strong> هو أحد مُستخدِمي %{link_to_root_path}. بإمكانك متابعته أو التواصل معه إن كنت تملك حسابًا أيا كان على البيئة الموحَّدة فيديفرس."
|
||||
landing_strip_signup_html: إن كنت لا تملك واحدا، يمكنك <a href="%{sign_up_path}">التسجيل مِن هنا</a>.
|
||||
lists:
|
||||
errors:
|
||||
@@ -371,7 +428,9 @@ ar:
|
||||
trillion: T
|
||||
unit: ''
|
||||
pagination:
|
||||
newer: الأحدَث
|
||||
next: التالي
|
||||
older: الأقدَم
|
||||
prev: السابق
|
||||
truncate: "…"
|
||||
preferences:
|
||||
@@ -454,6 +513,8 @@ ar:
|
||||
over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها
|
||||
pin_errors:
|
||||
ownership: لا يمكن تدبيس تبويق نشره شخص آخر
|
||||
private: لا يمكن تثبيت تبويق لم يُنشر للعامة
|
||||
reblog: لا يمكن تثبيت ترقية
|
||||
show_more: أظهر المزيد
|
||||
title: '%{name} : "%{quote}"'
|
||||
visibilities:
|
||||
@@ -465,6 +526,7 @@ ar:
|
||||
unlisted_long: يُمكن لأيٍ كان رُؤيتَه و لكن لن يُعرَض على الخيوط العامة
|
||||
stream_entries:
|
||||
click_to_show: إضغط للعرض
|
||||
pinned: تبويق مثبّت
|
||||
reblogged: رقى
|
||||
sensitive_content: محتوى حساس
|
||||
terms:
|
||||
@@ -488,6 +550,10 @@ ar:
|
||||
recovery_codes_regenerated: تم إعادة توليد رموز الإسترجاع الإحتياطية بنجاح
|
||||
setup: تنشيط
|
||||
wrong_code: الرمز الذي أدخلته غير صالح ! تحقق من صحة الوقت على الخادم و الجهاز ؟
|
||||
user_mailer:
|
||||
backup_ready:
|
||||
subject: نسخة بيانات حسابك جاهزة للتنزيل
|
||||
title: المغادرة بأرشيف الحساب
|
||||
users:
|
||||
invalid_email: عنوان البريد الإلكتروني غير صالح
|
||||
invalid_otp_token: الرمز الثنائي غير صالح
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ar:
|
||||
devise:
|
||||
confirmations:
|
||||
confirmed: تم التحقق من عنوان بريدك الإلكتروني بنجاح.
|
||||
confirmed: تم تأكيد عنوان بريدك الإلكتروني.
|
||||
send_instructions: سوف تتلقى بعد بضع دقائق رسالةً إلكترونيةً تضم تعليمات التأكيد. إن لم تتلق الرسالة، الرجاء التحقق من إنها ليست ضمن ملف الرسائل غير المرغوب فيها.
|
||||
send_paranoid_instructions: إن كان عنوان بريدك الإلكتروني موجودا في قاعدة بياناتنا سوف تتلقّى الإرشادات اللازمة لتأكيده خلال بضع دقائق. يُرجى الإطلاع على الرسائل المتلقاة في البريد غير المرغوب فيه أيضا للتحقق من تلقي الرسالة.
|
||||
failure:
|
||||
|
@@ -57,7 +57,7 @@ fi:
|
||||
prompt: Applikaatio %{client_name} pyytää lupaa tilillesi
|
||||
title: Valtuutus vaaditaan
|
||||
show:
|
||||
title: Copy this authorization code and paste it to the application.
|
||||
title: Kopioi tämä valtuutuskoodi ja liitä se applikaatioon.
|
||||
authorized_applications:
|
||||
buttons:
|
||||
revoke: Evää
|
||||
@@ -73,7 +73,7 @@ fi:
|
||||
messages:
|
||||
access_denied: Resurssin omistaja tai valtuutus palvelin hylkäsi pyynnönr.
|
||||
credential_flow_not_configured: Resurssin omistajan salasana epäonnistui koska Doorkeeper.configure.resource_owner_from_credentials ei ole konfiguroitu.
|
||||
invalid_client: Asiakkaan valtuutus epäonnistui koska tuntematon asiakas, asiakas ei sisältänyt valtuutusta, tai tukematon valtuutus tapa
|
||||
invalid_client: Asiakkaan valtuutus epäonnistui koska tuntematon asiakas, asiakas ei sisältänyt valtuutusta, tai tukematon valtuutus tapa.
|
||||
invalid_grant: Antamasi valtuutus lupa on joko väärä, erääntynyt, peruttu, ei vastaa uudelleenohjaus URI jota käytetään valtuutus pyynnössä, tai se myönnettin toiselle asiakkaalle.
|
||||
invalid_redirect_uri: Uudelleenohjaus uri ei ole oikein.
|
||||
invalid_request: Pyynnöstä puutti parametri, sisältää tukemattoman parametri arvonn, tai on korruptoitunut.
|
||||
|
@@ -3,17 +3,19 @@ id:
|
||||
activerecord:
|
||||
attributes:
|
||||
doorkeeper/application:
|
||||
name: Nama
|
||||
redirect_uri: URI Pengalihan (Redirect)
|
||||
name: Nama aplikasi
|
||||
redirect_uri: URI Pengalihan
|
||||
scopes: Cakupan
|
||||
website: Website aplikasi
|
||||
errors:
|
||||
models:
|
||||
doorkeeper/application:
|
||||
attributes:
|
||||
redirect_uri:
|
||||
fragment_present: tidak dapat mengandung fragmen.
|
||||
invalid_uri: URI harus valid.
|
||||
relative_uri: URI harus absolut.
|
||||
secured_uri: URI harus berupa HTTPS/SSL.
|
||||
fragment_present: tidak dapat mengandung sebuah pecahan.
|
||||
invalid_uri: harus URI yang valid.
|
||||
relative_uri: harus URI yang absolut.
|
||||
secured_uri: harus berupa URI HTTPS/SSL.
|
||||
doorkeeper:
|
||||
applications:
|
||||
buttons:
|
||||
@@ -23,11 +25,11 @@ id:
|
||||
edit: Ubah
|
||||
submit: Kirim
|
||||
confirmations:
|
||||
destroy: Anda yakin?
|
||||
destroy: Apakah anda yakin?
|
||||
edit:
|
||||
title: Ubah aplikasi
|
||||
form:
|
||||
error: Oh tidak! Cek kembali kemungkinan kesalahan pada formulir anda
|
||||
error: Oops! Cek kembali kemungkinan kesalahan pada formulir anda
|
||||
help:
|
||||
native_redirect_uri: Gunakan %{native_redirect_uri} sebagai tes lokal
|
||||
redirect_uri: Gunakan satu baris per URI
|
||||
|
@@ -114,6 +114,6 @@ sv:
|
||||
application:
|
||||
title: OAuth-behörighet krävs
|
||||
scopes:
|
||||
follow: följ, blockera, ta bort blockering och sluta följa konton
|
||||
read: läs dina kontodata
|
||||
write: posta på dina vägnar
|
||||
follow: följa, blockera, ta bort blockerade och sluta följa konton
|
||||
read: läsa dina kontodata
|
||||
write: posta åt dig
|
||||
|
@@ -634,6 +634,15 @@ en:
|
||||
two_factor_authentication: Two-factor Auth
|
||||
your_apps: Your applications
|
||||
statuses:
|
||||
attached:
|
||||
description: 'Attached: %{attached}'
|
||||
image:
|
||||
one: "%{count} image"
|
||||
other: "%{count} images"
|
||||
video:
|
||||
one: "%{count} video"
|
||||
other: "%{count} videos"
|
||||
content_warning: 'Content warning: %{warning}'
|
||||
open_in_web: Open in web
|
||||
over_character_limit: character limit of %{max} exceeded
|
||||
pin_errors:
|
||||
|
@@ -273,6 +273,9 @@ es:
|
||||
contact_information:
|
||||
email: Correo de trabajo
|
||||
username: Nombre de usuario
|
||||
hero:
|
||||
desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia
|
||||
title: Imagen de portada
|
||||
peers_api_enabled:
|
||||
desc_html: Nombres de dominio que esta instancia ha encontrado en el fediverso
|
||||
title: Publicar lista de instancias descubiertas
|
||||
@@ -289,6 +292,9 @@ es:
|
||||
open:
|
||||
desc_html: Permite a cualquiera a registrar una cuenta
|
||||
title: Registro abierto
|
||||
show_known_fediverse_at_about_page:
|
||||
desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales.
|
||||
title: Mostrar fediverso conocido en la vista previa de la historia
|
||||
show_staff_badge:
|
||||
desc_html: Mostrar un parche de staff en la página de un usuario
|
||||
title: Mostrar parche de staff
|
||||
@@ -353,6 +359,8 @@ es:
|
||||
your_token: Tu token de acceso
|
||||
auth:
|
||||
agreement_html: Al registrarte, acepta seguir <a href="%{rules_path}">las reglas de la instancia</a> y <a href="%{terms_path}">nuestros términos de servicio</a>.
|
||||
change_password: Contraseña
|
||||
confirm_email: Confirmar email
|
||||
delete_account: Borrar cuenta
|
||||
delete_account_html: Si desea eliminar su cuenta, puede <a href="%{path}">proceder aquí</a>. Será pedido de una confirmación.
|
||||
didnt_get_confirmation: "¿No recibió el correo de confirmación?"
|
||||
@@ -362,7 +370,13 @@ es:
|
||||
logout: Cerrar sesión
|
||||
migrate_account: Mudarse a otra cuenta
|
||||
migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>.
|
||||
or: o
|
||||
or_log_in_with: O inicia sesión con
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Registrarse
|
||||
register_elsewhere: Registrarse en otro servidor
|
||||
resend_confirmation: Volver a enviar el correo de confirmación
|
||||
reset_password: Restablecer contraseña
|
||||
security: Cambiar contraseña
|
||||
@@ -412,6 +426,13 @@ es:
|
||||
title: Esta página no es correcta
|
||||
noscript_html: Para usar la aplicación web de Mastodon, por favor activa Javascript. Alternativamente, prueba alguna de las <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">aplicaciones nativas</a> para Mastodon para tu plataforma.
|
||||
exports:
|
||||
archive_takeout:
|
||||
date: Fecha
|
||||
download: Descargar tu archivo
|
||||
hint_html: Puedes solicitar un archivo de tus <strong>toots y materiales subidos</strong>. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
|
||||
in_progress: Recopilando tu archivo...
|
||||
request: Solicitar tu archivo
|
||||
size: Tamaño
|
||||
blocks: Personas que has bloqueado
|
||||
csv: CSV
|
||||
follows: Personas que sigues
|
||||
@@ -527,7 +548,9 @@ es:
|
||||
trillion: T
|
||||
unit: ''
|
||||
pagination:
|
||||
newer: Más nuevo
|
||||
next: Próximo
|
||||
older: Más antiguo
|
||||
prev: Anterior
|
||||
truncate: "…"
|
||||
preferences:
|
||||
@@ -724,23 +747,30 @@ es:
|
||||
setup: Configurar
|
||||
wrong_code: "¡El código ingresado es inválido! ¿El dispositivo y tiempo del servidor están correctos?"
|
||||
user_mailer:
|
||||
backup_ready:
|
||||
explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar!
|
||||
subject: Tu archivo está preparado para descargar
|
||||
title: Recogida del archivo
|
||||
welcome:
|
||||
edit_profile_action: Configurar el perfil
|
||||
explanation: Aquí hay algunos consejos para iniciar
|
||||
edit_profile_step: Puedes personalizar tu perfil subiendo un avatar, cabecera, cambiando tu nombre para mostrar y más. Si te gustaría revisar seguidores antes de autorizarlos a que te sigan, puedes bloquear tu cuenta.
|
||||
explanation: Aquí hay algunos consejos para empezar
|
||||
final_action: Empezar a publicar
|
||||
final_step: '¡Empieza a publicar! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea de tiempo local y con "hashtags". Podrías querer introducirte con el "hashtag" #introductions.'
|
||||
full_handle: Su sobrenombre completo
|
||||
full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia.
|
||||
review_preferences_action: Cambiar preferencias
|
||||
review_preferences_step: Asegurate de poner tus preferencias, como que correos te gustaría recibir, o que nivel de privacidad te gustaría que tus publicaciones tengan por defecto. Si no tienes mareos, podrías elegir habilitar la reproducción automática de "GIFs".
|
||||
review_preferences_step: Asegúrate de poner tus preferencias, como que correos te gustaría recibir, o que nivel de privacidad te gustaría que tus publicaciones tengan por defecto. Si no tienes mareos, podrías elegir habilitar la reproducción automática de "GIFs".
|
||||
subject: Bienvenido a Mastodon
|
||||
tip_bridge_html: Si esta viniendo desde Twitter, puedes encontrar a tus amigos en Mastodon usando la <a href="%{bridge_url}">aplicación puente</a>. Aunque solo funciona si ellos también usaron la aplicación puente!
|
||||
tip_federated_timeline: La historia federada es una vista de toda la red Mastodon conocida. Sólo incluye gente a la que se han suscrito personas de tu instancia, así que no está completa.
|
||||
tip_following: Sigues a tus administradores de servidor por defecto. Para encontrar más gente interesante, revisa las lineas de tiempo local y federada.
|
||||
tip_local_timeline: La linea de tiempo local is una vista de la gente en %{instance}. Estos son tus vecinos inmediatos!
|
||||
tip_mobile_webapp: Si el navegador de tu dispositivo móvil ofrece agregar Mastodon a tu página de inicio, puedes recibir notificaciones. Actúa como una aplicación nativa en muchas formas!
|
||||
tips: Tips
|
||||
title: Bienvenido a bordo, %{name}!
|
||||
title: Te damos la bienvenida a bordo, %{name}!
|
||||
users:
|
||||
invalid_email: La dirección de correo es incorrecta
|
||||
invalid_otp_token: Código de dos factores incorrecto
|
||||
seamless_external_login: Has iniciado sesión desde un servicio externo, así que los ajustes de contraseña y correo no están disponibles.
|
||||
signed_in_as: 'Sesión iniciada como:'
|
||||
|
@@ -120,8 +120,8 @@ fi:
|
||||
body: 'Tässä on pieni yhteenveto palvelimelta %{instance} viimeksi kun olit paikalla %{since}:'
|
||||
mention: "%{name} mainitsi sinut:"
|
||||
new_followers_summary:
|
||||
one: Olet saanut yhden uuden seuraajan! Jee!
|
||||
other: Olet saanut %{count} uutta seuraajaa! Loistavaa!
|
||||
one: Olet myös saanut yhden uuden seuraajan poissaollessasi! Jee!
|
||||
other: Olet saanut %{count} uutta seuraajaa poissaollessasi! Loistavaa!
|
||||
subject:
|
||||
one: "1 uusi ilmoitus viimeisen käyntisi jälkeen \U0001F418"
|
||||
other: "%{count} uutta ilmoitusta viimeisen käyntisi jälkeen \U0001F418"
|
||||
|
@@ -160,6 +160,7 @@ ru:
|
||||
update_status: "%{name} изменил(а) статус пользователя %{target}"
|
||||
title: Журнал событий
|
||||
custom_emojis:
|
||||
by_domain: Домен
|
||||
copied_msg: Локальная копия эмодзи успешно создана
|
||||
copy: Скопироват
|
||||
copy_failed_msg: Не удалось создать локальную копию эмодзи
|
||||
@@ -342,6 +343,7 @@ ru:
|
||||
salutation: "%{name},"
|
||||
settings: 'Изменить настройки e-mail: %{link}'
|
||||
view: 'Просмотр:'
|
||||
view_profile: Просмотреть профиль
|
||||
view_status: Просмотреть статус
|
||||
applications:
|
||||
created: Приложение успешно создано
|
||||
@@ -353,6 +355,8 @@ ru:
|
||||
your_token: Ваш токен доступа
|
||||
auth:
|
||||
agreement_html: Создавая аккаунт, вы соглашаетесь с <a href="%{rules_path}">правилами узла</a> и <a href="%{terms_path}">нашими условиями обслуживания</a>.
|
||||
change_password: Пароль
|
||||
confirm_email: Подтвердите email
|
||||
delete_account: Удалить аккаунт
|
||||
delete_account_html: Если Вы хотите удалить свой аккаунт, вы можете <a href="%{path}">перейти сюда</a>. У Вас будет запрошено подтверждение.
|
||||
didnt_get_confirmation: Не получили инструкцию для подтверждения?
|
||||
@@ -362,7 +366,10 @@ ru:
|
||||
logout: Выйти
|
||||
migrate_account: Перенести аккаунт
|
||||
migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>.
|
||||
or: или
|
||||
or_log_in_with: Или войти с помощью
|
||||
register: Зарегистрироваться
|
||||
register_elsewhere: Зарегистрироваться на другом сервере
|
||||
resend_confirmation: Повторить отправку инструкции для подтверждения
|
||||
reset_password: Сбросить пароль
|
||||
security: Изменить пароль
|
||||
@@ -412,6 +419,13 @@ ru:
|
||||
title: Страница неверна
|
||||
noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript. Кроме того, вы можете использовать одно из <a href="https://github.com/tootsuite/documentation/blob/master/Using-Mastodon/Apps.md">приложений</a> Mastodon для Вашей платформы.
|
||||
exports:
|
||||
archive_takeout:
|
||||
date: Дата
|
||||
download: Скачать ваш архив
|
||||
hint_html: Вы можете запросить архив своих <strong>статусов и загруженных медиа-файлов</strong>. Экспортированные данные будут в формате ActivityPub, который можно прочесть любой соответствующей программой.
|
||||
in_progress: Собирается ваш архив...
|
||||
request: Запросить ваш архив
|
||||
size: Размер
|
||||
blocks: Список блокировки
|
||||
csv: CSV
|
||||
follows: Подписки
|
||||
@@ -483,33 +497,40 @@ ru:
|
||||
title: Модерация
|
||||
notification_mailer:
|
||||
digest:
|
||||
body: 'Кратко о пропущенном Вами на %{instance} с Вашего последнего захода %{since}:'
|
||||
action: Просмотреть все уведомления
|
||||
body: Кратко о пропущенных Вами сообщениях с Вашего последнего захода %{since}
|
||||
mention: "%{name} упомянул(а) Вас в:"
|
||||
new_followers_summary:
|
||||
few: У Вас появилось %{count} новых подписчика! Отлично!
|
||||
many: У Вас появилось %{count} новых подписчиков! Отлично!
|
||||
one: У Вас появился новый подписчик! Ура!
|
||||
other: У Вас появилось %{count} новых подписчиков! Отлично!
|
||||
one: Также, пока вас не было, у Вас появился новый подписчик! Ура!
|
||||
other: Также, пока вас не было, у Вас появилось %{count} новых подписчиков! Отлично!
|
||||
subject:
|
||||
few: "%{count} новых уведомления с Вашего последнего захода \U0001F418"
|
||||
many: "%{count} новых уведомлений с Вашего последнего захода \U0001F418"
|
||||
one: "1 новое уведомление с Вашего последнего захода \U0001F418"
|
||||
other: "%{count} новых уведомлений с Вашего последнего захода \U0001F418"
|
||||
title: В ваше отсутствие…
|
||||
favourite:
|
||||
body: 'Ваш статус понравился %{name}:'
|
||||
subject: "%{name} понравился Ваш статус"
|
||||
follow:
|
||||
body: "%{name} теперь подписан(а) на Вас!"
|
||||
subject: "%{name} теперь подписан(а) на Вас"
|
||||
title: Новый подписчик
|
||||
follow_request:
|
||||
body: "%{name} запросил Вас о подписке"
|
||||
subject: "%{name} хочет подписаться на Вас"
|
||||
title: Новый запрос о подписке
|
||||
mention:
|
||||
action: Ответить
|
||||
body: 'Вас упомянул(а) %{name} в:'
|
||||
subject: Вы были упомянуты %{name}
|
||||
title: Новое упоминание
|
||||
reblog:
|
||||
body: 'Ваш статус был продвинут %{name}:'
|
||||
subject: "%{name} продвинул(а) Ваш статус"
|
||||
title: Новое продвижение
|
||||
number:
|
||||
human:
|
||||
decimal_units:
|
||||
@@ -522,7 +543,9 @@ ru:
|
||||
trillion: трлн
|
||||
unit: ''
|
||||
pagination:
|
||||
newer: Новее
|
||||
next: След
|
||||
older: Старше
|
||||
prev: Пред
|
||||
truncate: "…"
|
||||
preferences:
|
||||
@@ -687,6 +710,18 @@ ru:
|
||||
recovery_instructions_html: В случае утери доступа к Вашему телефону Вы можете использовать один из кодов восстановления, указанных ниже, чтобы вернуть доступ к аккаунту. Держите коды восстановления в безопасности, например, распечатав их и храня с другими важными документами.
|
||||
setup: Настроить
|
||||
wrong_code: Введенный код неверен! Правильно ли установлены серверное время и время устройства?
|
||||
user_mailer:
|
||||
backup_ready:
|
||||
explanation: Вы запросили полный архив вашего аккаунта Mastodon. Он готов к загрузке!
|
||||
subject: Ваш архив готов к загрузке
|
||||
title: Вынос архива
|
||||
welcome:
|
||||
edit_profile_action: Настроить профиль
|
||||
final_action: Начать постить
|
||||
review_preferences_action: Изменить настройки
|
||||
subject: Добро пожаловать на Mastodon
|
||||
tips: Советы
|
||||
title: Добро пожаловать на борт, %{name}!
|
||||
users:
|
||||
invalid_email: Введенный e-mail неверен
|
||||
invalid_otp_token: Введен неверный код
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user