Merge remote-tracking branch 'parent/main' into upstream-20240503

This commit is contained in:
KMY 2024-05-03 11:17:22 +09:00
commit 80789a603a
193 changed files with 1871 additions and 1061 deletions

View file

@ -70,7 +70,7 @@ services:
hard: -1 hard: -1
libretranslate: libretranslate:
image: libretranslate/libretranslate:v1.5.6 image: libretranslate/libretranslate:v1.5.7
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- lt-data:/home/libretranslate/.local - lt-data:/home/libretranslate/.local

View file

@ -116,8 +116,8 @@ jobs:
matrix: matrix:
ruby-version: ruby-version:
- '3.1' - '3.1'
- '3.2'
- '.ruby-version' - '.ruby-version'
- '3.3'
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -192,8 +192,8 @@ jobs:
matrix: matrix:
ruby-version: ruby-version:
- '3.1' - '3.1'
- '3.2'
- '.ruby-version' - '.ruby-version'
- '3.3'
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -278,8 +278,8 @@ jobs:
matrix: matrix:
ruby-version: ruby-version:
- '3.1' - '3.1'
- '3.2'
- '.ruby-version' - '.ruby-version'
- '3.3'
search-image: search-image:
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13 - docker.elastic.co/elasticsearch/elasticsearch:7.17.13
include: include:

View file

@ -45,14 +45,6 @@ RSpec/MultipleMemoizedHelpers:
RSpec/NestedGroups: RSpec/NestedGroups:
Max: 6 Max: 6
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasAndBelongsToMany:
Exclude:
- 'app/models/concerns/account/associations.rb'
- 'app/models/status.rb'
- 'app/models/tag.rb'
Rails/OutputSafety: Rails/OutputSafety:
Exclude: Exclude:
- 'config/initializers/simple_form.rb' - 'config/initializers/simple_form.rb'
@ -208,14 +200,6 @@ Style/SafeNavigation:
Exclude: Exclude:
- 'app/models/concerns/account/finder_concern.rb' - 'app/models/concerns/account/finder_concern.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: only_raise, only_fail, semantic
Style/SignalException:
Exclude:
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
# This cop supports unsafe autocorrection (--autocorrect-all). # This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode. # Configuration parameters: Mode.
Style/StringConcatenation: Style/StringConcatenation:

View file

@ -1 +1 @@
3.2.4 3.3.1

View file

@ -7,15 +7,15 @@
ARG TARGETPLATFORM=${TARGETPLATFORM} ARG TARGETPLATFORM=${TARGETPLATFORM}
ARG BUILDPLATFORM=${BUILDPLATFORM} ARG BUILDPLATFORM=${BUILDPLATFORM}
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.4"] # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.1"]
ARG RUBY_VERSION="3.2.4" ARG RUBY_VERSION="3.3.1"
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"] # # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
ARG NODE_MAJOR_VERSION="20" ARG NODE_MAJOR_VERSION="20"
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"] # Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
ARG DEBIAN_VERSION="bookworm" ARG DEBIAN_VERSION="bookworm"
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim) # Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node
# Ruby image to use for base image based on combined variables (ex: 3.2.4-slim-bookworm) # Ruby image to use for base image based on combined variables (ex: 3.3.1-slim-bookworm)
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA

View file

@ -31,7 +31,7 @@ gem 'browser'
gem 'charlock_holmes', '~> 0.7.7' gem 'charlock_holmes', '~> 0.7.7'
gem 'chewy', '~> 7.3' gem 'chewy', '~> 7.3'
gem 'devise', '~> 4.9' gem 'devise', '~> 4.9'
gem 'devise-two-factor', '~> 4.1' gem 'devise-two-factor'
group :pam_authentication, optional: true do group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.2' gem 'devise_pam_authenticatable2', '~> 9.2'

View file

@ -97,22 +97,20 @@ GEM
activerecord (>= 3.2, < 8.0) activerecord (>= 3.2, < 8.0)
rake (>= 10.4, < 14.0) rake (>= 10.4, < 14.0)
ast (2.4.2) ast (2.4.2)
attr_encrypted (4.0.0)
encryptor (~> 3.0.0)
attr_required (1.0.2) attr_required (1.0.2)
awrence (1.2.1) awrence (1.2.1)
aws-eventstream (1.3.0) aws-eventstream (1.3.0)
aws-partitions (1.916.0) aws-partitions (1.922.0)
aws-sdk-core (3.192.1) aws-sdk-core (3.194.0)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0) aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8) aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1) jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.79.0) aws-sdk-kms (1.80.0)
aws-sdk-core (~> 3, >= 3.191.0) aws-sdk-core (~> 3, >= 3.193.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.147.0) aws-sdk-s3 (1.149.0)
aws-sdk-core (~> 3, >= 3.192.0) aws-sdk-core (~> 3, >= 3.194.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8) aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0) aws-sigv4 (1.8.0)
@ -204,9 +202,8 @@ GEM
railties (>= 4.1.0) railties (>= 4.1.0)
responders responders
warden (~> 1.2.3) warden (~> 1.2.3)
devise-two-factor (4.1.1) devise-two-factor (5.0.0)
activesupport (~> 7.0) activesupport (~> 7.0)
attr_encrypted (>= 1.3, < 5, != 2)
devise (~> 4.0) devise (~> 4.0)
railties (~> 7.0) railties (~> 7.0)
rotp (~> 6.0) rotp (~> 6.0)
@ -220,7 +217,7 @@ GEM
domain_name (0.6.20240107) domain_name (0.6.20240107)
doorkeeper (5.6.9) doorkeeper (5.6.9)
railties (>= 5) railties (>= 5)
dotenv (3.1.0) dotenv (3.1.1)
drb (2.2.1) drb (2.2.1)
ed25519 (1.3.0) ed25519 (1.3.0)
elasticsearch (7.13.3) elasticsearch (7.13.3)
@ -236,7 +233,6 @@ GEM
htmlentities (~> 4.3.3) htmlentities (~> 4.3.3)
launchy (~> 2.1) launchy (~> 2.1)
mail (~> 2.7) mail (~> 2.7)
encryptor (3.0.0)
erubi (1.12.0) erubi (1.12.0)
et-orbi (1.2.11) et-orbi (1.2.11)
tzinfo tzinfo
@ -304,7 +300,7 @@ GEM
activesupport (>= 5.1) activesupport (>= 5.1)
haml (>= 4.0.6) haml (>= 4.0.6)
railties (>= 5.1) railties (>= 5.1)
haml_lint (0.57.0) haml_lint (0.58.0)
haml (>= 5.0) haml (>= 5.0)
parallel (~> 1.10) parallel (~> 1.10)
rainbow rainbow
@ -350,8 +346,8 @@ GEM
activesupport (>= 3.0) activesupport (>= 3.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
io-console (0.7.2) io-console (0.7.2)
irb (1.12.0) irb (1.13.0)
rdoc rdoc (>= 4.0.0)
reline (>= 0.4.2) reline (>= 0.4.2)
jmespath (1.6.2) jmespath (1.6.2)
json (2.7.2) json (2.7.2)
@ -498,7 +494,7 @@ GEM
orm_adapter (0.5.0) orm_adapter (0.5.0)
ox (2.14.18) ox (2.14.18)
parallel (1.24.0) parallel (1.24.0)
parser (3.3.0.5) parser (3.3.1.0)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
parslet (2.0.0) parslet (2.0.0)
@ -605,7 +601,7 @@ GEM
redlock (1.3.2) redlock (1.3.2)
redis (>= 3.0.0, < 6.0) redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.0) regexp_parser (2.9.0)
reline (0.5.2) reline (0.5.4)
io-console (~> 0.5) io-console (~> 0.5)
request_store (1.6.0) request_store (1.6.0)
rack (>= 1.4) rack (>= 1.4)
@ -644,7 +640,7 @@ GEM
rspec-mocks (~> 3.0) rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8) sidekiq (>= 5, < 8)
rspec-support (3.13.1) rspec-support (3.13.1)
rubocop (1.63.3) rubocop (1.63.4)
json (~> 2.3) json (~> 2.3)
language_server-protocol (>= 3.17.0) language_server-protocol (>= 3.17.0)
parallel (~> 1.10) parallel (~> 1.10)
@ -842,7 +838,7 @@ DEPENDENCIES
database_cleaner-active_record database_cleaner-active_record
debug (~> 1.8) debug (~> 1.8)
devise (~> 4.9) devise (~> 4.9)
devise-two-factor (~> 4.1) devise-two-factor
devise_pam_authenticatable2 (~> 9.2) devise_pam_authenticatable2 (~> 9.2)
discard (~> 1.2) discard (~> 1.2)
doorkeeper (~> 5.6) doorkeeper (~> 5.6)
@ -952,7 +948,7 @@ DEPENDENCIES
xorcist (~> 1.1) xorcist (~> 1.1)
RUBY VERSION RUBY VERSION
ruby 3.2.3p157 ruby 3.3.1p55
BUNDLED WITH BUNDLED WITH
2.5.9 2.5.9

View file

@ -25,6 +25,8 @@ class Admin::DomainAllowsController < Admin::BaseController
def destroy def destroy
authorize @domain_allow, :destroy? authorize @domain_allow, :destroy?
UnallowDomainService.new.call(@domain_allow) UnallowDomainService.new.call(@domain_allow)
log_action :destroy, @domain_allow
redirect_to admin_instances_path, notice: I18n.t('admin.domain_allows.destroyed_msg') redirect_to admin_instances_path, notice: I18n.t('admin.domain_allows.destroyed_msg')
end end

View file

@ -29,10 +29,11 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
def create def create
authorize :domain_block, :create? authorize :domain_block, :create?
@domain_block = DomainBlock.new(resource_params)
existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil
return render json: existing_domain_block, serializer: REST::Admin::ExistingDomainBlockErrorSerializer, status: 422 if existing_domain_block.present? return render json: existing_domain_block, serializer: REST::Admin::ExistingDomainBlockErrorSerializer, status: 422 if conflicts_with_existing_block?(@domain_block, existing_domain_block)
@domain_block = DomainBlock.create!(resource_params) @domain_block.save!
DomainBlockWorker.perform_async(@domain_block.id) DomainBlockWorker.perform_async(@domain_block.id)
log_action :create, @domain_block log_action :create, @domain_block
render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
@ -55,6 +56,10 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
private private
def conflicts_with_existing_block?(domain_block, existing_domain_block)
existing_domain_block.present? && (existing_domain_block.domain == TagManager.instance.normalize_domain(domain_block.domain) || !domain_block.stricter_than?(existing_domain_block))
end
def set_domain_blocks def set_domain_blocks
@domain_blocks = filtered_domain_blocks.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) @domain_blocks = filtered_domain_blocks.order(id: :desc).to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end end

View file

@ -1,5 +1,5 @@
import './public-path'; import './public-path';
import main from "mastodon/main"; import main from 'mastodon/main';
import { start } from '../mastodon/common'; import { start } from '../mastodon/common';
import { loadLocale } from '../mastodon/locales'; import { loadLocale } from '../mastodon/locales';
@ -10,6 +10,6 @@ start();
loadPolyfills() loadPolyfills()
.then(loadLocale) .then(loadLocale)
.then(main) .then(main)
.catch(e => { .catch((e: unknown) => {
console.error(e); console.error(e);
}); });

View file

@ -2,7 +2,9 @@ import './public-path';
import ready from '../mastodon/ready'; import ready from '../mastodon/ready';
ready(() => { ready(() => {
const image = document.querySelector('img'); const image = document.querySelector<HTMLImageElement>('img');
if (!image) return;
image.addEventListener('mouseenter', () => { image.addEventListener('mouseenter', () => {
image.src = '/oops.gif'; image.src = '/oops.gif';
@ -11,4 +13,6 @@ ready(() => {
image.addEventListener('mouseleave', () => { image.addEventListener('mouseleave', () => {
image.src = '/oops.png'; image.src = '/oops.png';
}); });
}).catch((e: unknown) => {
console.error(e);
}); });

View file

@ -2,7 +2,7 @@
// to share the same assets regardless of instance configuration. // to share the same assets regardless of instance configuration.
// See https://webpack.js.org/guides/public-path/#on-the-fly // See https://webpack.js.org/guides/public-path/#on-the-fly
function removeOuterSlashes(string) { function removeOuterSlashes(string: string) {
return string.replace(/^\/*/, '').replace(/\/*$/, ''); return string.replace(/^\/*/, '').replace(/\/*$/, '');
} }
@ -15,7 +15,9 @@ function formatPublicPath(host = '', path = '') {
return `${formattedHost}/${formattedPath}/`; return `${formattedHost}/${formattedPath}/`;
} }
const cdnHost = document.querySelector('meta[name=cdn-host]'); const cdnHost = document.querySelector<HTMLMetaElement>('meta[name=cdn-host]');
// eslint-disable-next-line no-undef __webpack_public_path__ = formatPublicPath(
__webpack_public_path__ = formatPublicPath(cdnHost ? cdnHost.content : '', process.env.PUBLIC_OUTPUT_PATH); cdnHost ? cdnHost.content : '',
process.env.PUBLIC_OUTPUT_PATH,
);

View file

@ -16,7 +16,7 @@ function loaded() {
if (!attr) return; if (!attr) return;
const props = JSON.parse(attr); const props = JSON.parse(attr) as object;
const root = createRoot(mountNode); const root = createRoot(mountNode);
root.render(<ComposeContainer {...props} />); root.render(<ComposeContainer {...props} />);
@ -24,9 +24,13 @@ function loaded() {
} }
function main() { function main() {
ready(loaded); ready(loaded).catch((error: unknown) => {
console.error(error);
});
} }
loadPolyfills().then(main).catch(error => { loadPolyfills()
.then(main)
.catch((error: unknown) => {
console.error(error); console.error(error);
}); });

View file

@ -1,42 +0,0 @@
import './public-path';
import axios from 'axios';
import ready from '../mastodon/ready';
ready(() => {
setInterval(() => {
axios.get('/api/v1/emails/check_confirmation').then((response) => {
if (response.data) {
window.location = '/start';
}
}).catch(error => {
console.error(error);
});
}, 5000);
document.querySelectorAll('.timer-button').forEach(button => {
let counter = 30;
const container = document.createElement('span');
const updateCounter = () => {
container.innerText = ` (${counter})`;
};
updateCounter();
const countdown = setInterval(() => {
counter--;
if (counter === 0) {
button.disabled = false;
button.removeChild(container);
clearInterval(countdown);
} else {
updateCounter();
}
}, 1000);
button.appendChild(container);
});
});

View file

@ -0,0 +1,48 @@
import './public-path';
import axios from 'axios';
import ready from '../mastodon/ready';
async function checkConfirmation() {
const response = await axios.get('/api/v1/emails/check_confirmation');
if (response.data) {
window.location.href = '/start';
}
}
ready(() => {
setInterval(() => {
void checkConfirmation();
}, 5000);
document
.querySelectorAll<HTMLButtonElement>('button.timer-button')
.forEach((button) => {
let counter = 30;
const container = document.createElement('span');
const updateCounter = () => {
container.innerText = ` (${counter})`;
};
updateCounter();
const countdown = setInterval(() => {
counter--;
if (counter === 0) {
button.disabled = false;
button.removeChild(container);
clearInterval(countdown);
} else {
updateCounter();
}
}, 1000);
button.appendChild(container);
});
}).catch((e: unknown) => {
throw e;
});

View file

@ -1,119 +0,0 @@
import * as WebAuthnJSON from '@github/webauthn-json';
import axios from 'axios';
import ready from '../mastodon/ready';
import 'regenerator-runtime/runtime';
function getCSRFToken() {
var CSRFSelector = document.querySelector('meta[name="csrf-token"]');
if (CSRFSelector) {
return CSRFSelector.getAttribute('content');
} else {
return null;
}
}
function hideFlashMessages() {
Array.from(document.getElementsByClassName('flash-message')).forEach(function(flashMessage) {
flashMessage.classList.add('hidden');
});
}
function callback(url, body) {
axios.post(url, JSON.stringify(body), {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-CSRF-Token': getCSRFToken(),
},
credentials: 'same-origin',
}).then(function(response) {
window.location.replace(response.data.redirect_path);
}).catch(function(error) {
if (error.response.status === 422) {
const errorMessage = document.getElementById('security-key-error-message');
errorMessage.classList.remove('hidden');
console.error(error.response.data.error);
} else {
console.error(error);
}
});
}
ready(() => {
if (!WebAuthnJSON.supported()) {
const unsupported_browser_message = document.getElementById('unsupported-browser-message');
if (unsupported_browser_message) {
unsupported_browser_message.classList.remove('hidden');
document.querySelector('.btn.js-webauthn').disabled = true;
}
}
const webAuthnCredentialRegistrationForm = document.getElementById('new_webauthn_credential');
if (webAuthnCredentialRegistrationForm) {
webAuthnCredentialRegistrationForm.addEventListener('submit', (event) => {
event.preventDefault();
var nickname = event.target.querySelector('input[name="new_webauthn_credential[nickname]"]');
if (nickname.value) {
axios.get('/settings/security_keys/options')
.then((response) => {
const credentialOptions = response.data;
WebAuthnJSON.create({ 'publicKey': credentialOptions }).then((credential) => {
var params = { 'credential': credential, 'nickname': nickname.value };
callback('/settings/security_keys', params);
}).catch((error) => {
const errorMessage = document.getElementById('security-key-error-message');
errorMessage.classList.remove('hidden');
console.error(error);
});
}).catch((error) => {
console.error(error.response.data.error);
});
} else {
nickname.focus();
}
});
}
const webAuthnCredentialAuthenticationForm = document.getElementById('webauthn-form');
if (webAuthnCredentialAuthenticationForm) {
webAuthnCredentialAuthenticationForm.addEventListener('submit', (event) => {
event.preventDefault();
axios.get('sessions/security_key_options')
.then((response) => {
const credentialOptions = response.data;
WebAuthnJSON.get({ 'publicKey': credentialOptions }).then((credential) => {
var params = { 'user': { 'credential': credential } };
callback('sign_in', params);
}).catch((error) => {
const errorMessage = document.getElementById('security-key-error-message');
errorMessage.classList.remove('hidden');
console.error(error);
});
}).catch((error) => {
console.error(error.response.data.error);
});
});
const otpAuthenticationForm = document.getElementById('otp-authentication-form');
const linkToOtp = document.getElementById('link-to-otp');
linkToOtp.addEventListener('click', () => {
webAuthnCredentialAuthenticationForm.classList.add('hidden');
otpAuthenticationForm.classList.remove('hidden');
hideFlashMessages();
});
const linkToWebAuthn = document.getElementById('link-to-webauthn');
linkToWebAuthn.addEventListener('click', () => {
otpAuthenticationForm.classList.add('hidden');
webAuthnCredentialAuthenticationForm.classList.remove('hidden');
hideFlashMessages();
});
}
});

View file

@ -0,0 +1,197 @@
import * as WebAuthnJSON from '@github/webauthn-json';
import axios, { AxiosError } from 'axios';
import ready from '../mastodon/ready';
import 'regenerator-runtime/runtime';
type PublicKeyCredentialCreationOptionsJSON =
WebAuthnJSON.CredentialCreationOptionsJSON['publicKey'];
function exceptionHasAxiosError(
error: unknown,
): error is AxiosError<{ error: unknown }> {
return (
error instanceof AxiosError &&
typeof error.response?.data === 'object' &&
'error' in error.response.data
);
}
function logAxiosResponseError(error: unknown) {
if (exceptionHasAxiosError(error)) console.error(error);
}
function getCSRFToken() {
return document
.querySelector<HTMLMetaElement>('meta[name="csrf-token"]')
?.getAttribute('content');
}
function hideFlashMessages() {
document.querySelectorAll('.flash-message').forEach((flashMessage) => {
flashMessage.classList.add('hidden');
});
}
async function callback(
url: string,
body:
| {
credential: WebAuthnJSON.PublicKeyCredentialWithAttestationJSON;
nickname: string;
}
| {
user: { credential: WebAuthnJSON.PublicKeyCredentialWithAssertionJSON };
},
) {
try {
const response = await axios.post<{ redirect_path: string }>(
url,
JSON.stringify(body),
{
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-CSRF-Token': getCSRFToken(),
},
},
);
window.location.replace(response.data.redirect_path);
} catch (error) {
if (error instanceof AxiosError && error.response?.status === 422) {
const errorMessage = document.getElementById(
'security-key-error-message',
);
errorMessage?.classList.remove('hidden');
logAxiosResponseError(error);
} else {
console.error(error);
}
}
}
async function handleWebauthnCredentialRegistration(nickname: string) {
try {
const response = await axios.get<PublicKeyCredentialCreationOptionsJSON>(
'/settings/security_keys/options',
);
const credentialOptions = response.data;
try {
const credential = await WebAuthnJSON.create({
publicKey: credentialOptions,
});
const params = {
credential: credential,
nickname: nickname,
};
await callback('/settings/security_keys', params);
} catch (error) {
const errorMessage = document.getElementById(
'security-key-error-message',
);
errorMessage?.classList.remove('hidden');
console.error(error);
}
} catch (error) {
logAxiosResponseError(error);
}
}
async function handleWebauthnCredentialAuthentication() {
try {
const response = await axios.get<PublicKeyCredentialCreationOptionsJSON>(
'sessions/security_key_options',
);
const credentialOptions = response.data;
try {
const credential = await WebAuthnJSON.get({
publicKey: credentialOptions,
});
const params = { user: { credential: credential } };
void callback('sign_in', params);
} catch (error) {
const errorMessage = document.getElementById(
'security-key-error-message',
);
errorMessage?.classList.remove('hidden');
console.error(error);
}
} catch (error) {
logAxiosResponseError(error);
}
}
ready(() => {
if (!WebAuthnJSON.supported()) {
const unsupported_browser_message = document.getElementById(
'unsupported-browser-message',
);
if (unsupported_browser_message) {
unsupported_browser_message.classList.remove('hidden');
const button = document.querySelector<HTMLButtonElement>(
'button.btn.js-webauthn',
);
if (button) button.disabled = true;
}
}
const webAuthnCredentialRegistrationForm =
document.querySelector<HTMLFormElement>('form#new_webauthn_credential');
if (webAuthnCredentialRegistrationForm) {
webAuthnCredentialRegistrationForm.addEventListener('submit', (event) => {
event.preventDefault();
if (!(event.target instanceof HTMLFormElement)) return;
const nickname = event.target.querySelector<HTMLInputElement>(
'input[name="new_webauthn_credential[nickname]"]',
);
if (nickname?.value) {
void handleWebauthnCredentialRegistration(nickname.value);
} else {
nickname?.focus();
}
});
}
const webAuthnCredentialAuthenticationForm =
document.getElementById('webauthn-form');
if (webAuthnCredentialAuthenticationForm) {
webAuthnCredentialAuthenticationForm.addEventListener('submit', (event) => {
event.preventDefault();
void handleWebauthnCredentialAuthentication();
});
const otpAuthenticationForm = document.getElementById(
'otp-authentication-form',
);
const linkToOtp = document.getElementById('link-to-otp');
linkToOtp?.addEventListener('click', () => {
webAuthnCredentialAuthenticationForm.classList.add('hidden');
otpAuthenticationForm?.classList.remove('hidden');
hideFlashMessages();
});
const linkToWebAuthn = document.getElementById('link-to-webauthn');
linkToWebAuthn?.addEventListener('click', () => {
otpAuthenticationForm?.classList.add('hidden');
webAuthnCredentialAuthenticationForm.classList.remove('hidden');
hideFlashMessages();
});
}
}).catch((e: unknown) => {
throw e;
});

View file

@ -1,5 +1,3 @@
import { List as ImmutableList } from 'immutable';
import { debounce } from 'lodash'; import { debounce } from 'lodash';
import type { MarkerJSON } from 'mastodon/api_types/markers'; import type { MarkerJSON } from 'mastodon/api_types/markers';
@ -71,19 +69,6 @@ interface MarkerParam {
last_read_id?: string; last_read_id?: string;
} }
function getLastHomeId(state: RootState): string | undefined {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return (
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
state
// @ts-expect-error state.timelines is not yet typed
.getIn(['timelines', 'home', 'items'], ImmutableList())
// @ts-expect-error state.timelines is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
.find((item) => item !== null)
);
}
function getLastNotificationId(state: RootState): string | undefined { function getLastNotificationId(state: RootState): string | undefined {
// @ts-expect-error state.notifications is not yet typed // @ts-expect-error state.notifications is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
@ -93,15 +78,8 @@ function getLastNotificationId(state: RootState): string | undefined {
const buildPostMarkersParams = (state: RootState) => { const buildPostMarkersParams = (state: RootState) => {
const params = {} as { home?: MarkerParam; notifications?: MarkerParam }; const params = {} as { home?: MarkerParam; notifications?: MarkerParam };
const lastHomeId = getLastHomeId(state);
const lastNotificationId = getLastNotificationId(state); const lastNotificationId = getLastNotificationId(state);
if (lastHomeId && compareId(lastHomeId, state.markers.home) > 0) {
params.home = {
last_read_id: lastHomeId,
};
}
if ( if (
lastNotificationId && lastNotificationId &&
compareId(lastNotificationId, state.markers.notifications) > 0 compareId(lastNotificationId, state.markers.notifications) > 0

View file

@ -7,7 +7,7 @@ import PersonIcon from '@/material-icons/400-24px/person.svg?react';
import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react'; import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react';
export const Badge = ({ icon, label, domain, roleId }) => ( export const Badge = ({ icon = <PersonIcon />, label, domain, roleId }) => (
<div className='account-role' data-account-role-id={roleId}> <div className='account-role' data-account-role-id={roleId}>
{icon} {icon}
{label} {label}
@ -22,10 +22,6 @@ Badge.propTypes = {
roleId: PropTypes.string roleId: PropTypes.string
}; };
Badge.defaultProps = {
icon: <PersonIcon />,
};
export const GroupBadge = () => ( export const GroupBadge = () => (
<Badge icon={<GroupsIcon />} label={<FormattedMessage id='account.badges.group' defaultMessage='Group' />} /> <Badge icon={<GroupsIcon />} label={<FormattedMessage id='account.badges.group' defaultMessage='Group' />} />
); );

View file

@ -1,16 +1,16 @@
import PropTypes from 'prop-types'; import { useCallback } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import TagIcon from '@/material-icons/400-24px/tag.svg?react';
import { expandSearch } from 'mastodon/actions/search';
import { Icon } from 'mastodon/components/icon'; import { Icon } from 'mastodon/components/icon';
import { LoadMore } from 'mastodon/components/load_more'; import { LoadMore } from 'mastodon/components/load_more';
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
import { SearchSection } from 'mastodon/features/explore/components/search_section'; import { SearchSection } from 'mastodon/features/explore/components/search_section';
import { useAppDispatch, useAppSelector } from 'mastodon/store';
import { ImmutableHashtag as Hashtag } from '../../../components/hashtag'; import { ImmutableHashtag as Hashtag } from '../../../components/hashtag';
import AccountContainer from '../../../containers/account_container'; import AccountContainer from '../../../containers/account_container';
@ -26,22 +26,23 @@ const withoutLastResult = list => {
} }
}; };
class SearchResults extends ImmutablePureComponent { export const SearchResults = () => {
const results = useAppSelector((state) => state.getIn(['search', 'results']));
const isLoading = useAppSelector((state) => state.getIn(['search', 'isLoading']));
static propTypes = { const dispatch = useAppDispatch();
results: ImmutablePropTypes.map.isRequired,
expandSearch: PropTypes.func.isRequired,
searchTerm: PropTypes.string,
};
handleLoadMoreAccounts = () => this.props.expandSearch('accounts'); const handleLoadMoreAccounts = useCallback(() => {
dispatch(expandSearch('accounts'));
}, [dispatch]);
handleLoadMoreStatuses = () => this.props.expandSearch('statuses'); const handleLoadMoreStatuses = useCallback(() => {
dispatch(expandSearch('statuses'));
}, [dispatch]);
handleLoadMoreHashtags = () => this.props.expandSearch('hashtags'); const handleLoadMoreHashtags = useCallback(() => {
dispatch(expandSearch('hashtags'));
render () { }, [dispatch]);
const { results } = this.props;
let accounts, statuses, hashtags; let accounts, statuses, hashtags;
@ -49,7 +50,7 @@ class SearchResults extends ImmutablePureComponent {
accounts = ( accounts = (
<SearchSection title={<><Icon id='users' icon={PeopleIcon} /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>}> <SearchSection title={<><Icon id='users' icon={PeopleIcon} /><FormattedMessage id='search_results.accounts' defaultMessage='Profiles' /></>}>
{withoutLastResult(results.get('accounts')).map(accountId => <AccountContainer key={accountId} id={accountId} />)} {withoutLastResult(results.get('accounts')).map(accountId => <AccountContainer key={accountId} id={accountId} />)}
{(results.get('accounts').size > INITIAL_PAGE_LIMIT && results.get('accounts').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreAccounts} />} {(results.get('accounts').size > INITIAL_PAGE_LIMIT && results.get('accounts').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={handleLoadMoreAccounts} />}
</SearchSection> </SearchSection>
); );
} }
@ -58,7 +59,7 @@ class SearchResults extends ImmutablePureComponent {
hashtags = ( hashtags = (
<SearchSection title={<><Icon id='hashtag' icon={TagIcon} /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>}> <SearchSection title={<><Icon id='hashtag' icon={TagIcon} /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></>}>
{withoutLastResult(results.get('hashtags')).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)} {withoutLastResult(results.get('hashtags')).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
{(results.get('hashtags').size > INITIAL_PAGE_LIMIT && results.get('hashtags').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreHashtags} />} {(results.get('hashtags').size > INITIAL_PAGE_LIMIT && results.get('hashtags').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={handleLoadMoreHashtags} />}
</SearchSection> </SearchSection>
); );
} }
@ -67,21 +68,26 @@ class SearchResults extends ImmutablePureComponent {
statuses = ( statuses = (
<SearchSection title={<><Icon id='quote-right' icon={FindInPageIcon} /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>}> <SearchSection title={<><Icon id='quote-right' icon={FindInPageIcon} /><FormattedMessage id='search_results.statuses' defaultMessage='Posts' /></>}>
{withoutLastResult(results.get('statuses')).map(statusId => <StatusContainer key={statusId} id={statusId} />)} {withoutLastResult(results.get('statuses')).map(statusId => <StatusContainer key={statusId} id={statusId} />)}
{(results.get('statuses').size > INITIAL_PAGE_LIMIT && results.get('statuses').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={this.handleLoadMoreStatuses} />} {(results.get('statuses').size > INITIAL_PAGE_LIMIT && results.get('statuses').size % INITIAL_PAGE_LIMIT === 1) && <LoadMore visible onClick={handleLoadMoreStatuses} />}
</SearchSection> </SearchSection>
); );
} }
return ( return (
<div className='search-results'> <div className='search-results'>
{!accounts && !hashtags && !statuses && (
isLoading ? (
<LoadingIndicator />
) : (
<div className='empty-column-indicator'>
<FormattedMessage id='search_results.nothing_found' defaultMessage='Could not find anything for these search terms' />
</div>
)
)}
{accounts} {accounts}
{hashtags} {hashtags}
{statuses} {statuses}
</div> </div>
); );
}
} };
export default SearchResults;

View file

@ -1,20 +0,0 @@
import { connect } from 'react-redux';
import { expandSearch } from 'mastodon/actions/search';
import { fetchSuggestions, dismissSuggestion } from 'mastodon/actions/suggestions';
import SearchResults from '../components/search_results';
const mapStateToProps = state => ({
results: state.getIn(['search', 'results']),
suggestions: state.getIn(['suggestions', 'items']),
searchTerm: state.getIn(['search', 'searchTerm']),
});
const mapDispatchToProps = dispatch => ({
fetchSuggestions: () => dispatch(fetchSuggestions()),
expandSearch: type => dispatch(expandSearch(type)),
dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))),
});
export default connect(mapStateToProps, mapDispatchToProps)(SearchResults);

View file

@ -29,9 +29,9 @@ import { mascot } from '../../initial_state';
import { isMobile } from '../../is_mobile'; import { isMobile } from '../../is_mobile';
import Motion from '../ui/util/optional_motion'; import Motion from '../ui/util/optional_motion';
import { SearchResults } from './components/search_results';
import ComposeFormContainer from './containers/compose_form_container'; import ComposeFormContainer from './containers/compose_form_container';
import SearchContainer from './containers/search_container'; import SearchContainer from './containers/search_container';
import SearchResultsContainer from './containers/search_results_container';
const messages = defineMessages({ const messages = defineMessages({
start: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, start: { id: 'getting_started.heading', defaultMessage: 'Getting started' },
@ -138,7 +138,7 @@ class Compose extends PureComponent {
<Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}> <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
{({ x }) => ( {({ x }) => (
<div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}> <div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>
<SearchResultsContainer /> <SearchResults />
</div> </div>
)} )}
</Motion> </Motion>

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Въпреки че акаунтът ви не е заключен, служителите на {domain} помислиха, че може да искате да преглеждате ръчно заявките за последване на тези профили.", "follow_requests.unlocked_explanation": "Въпреки че акаунтът ви не е заключен, служителите на {domain} помислиха, че може да искате да преглеждате ръчно заявките за последване на тези профили.",
"follow_suggestions.curated_suggestion": "Избор на персонал", "follow_suggestions.curated_suggestion": "Избор на персонал",
"follow_suggestions.dismiss": "Без ново показване", "follow_suggestions.dismiss": "Без ново показване",
"follow_suggestions.featured_longer": "Ръчно избрано от отбора на {domain}",
"follow_suggestions.friends_of_friends_longer": "Популярно измежду хората, които следвате",
"follow_suggestions.hints.featured": "Този профил е ръчно подбран от отбора на {domain}.", "follow_suggestions.hints.featured": "Този профил е ръчно подбран от отбора на {domain}.",
"follow_suggestions.hints.friends_of_friends": "Този профил е популярен измежду хората, които следвате.", "follow_suggestions.hints.friends_of_friends": "Този профил е популярен измежду хората, които следвате.",
"follow_suggestions.hints.most_followed": "Този профил е един от най-следваните при {domain}.", "follow_suggestions.hints.most_followed": "Този профил е един от най-следваните при {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Този профил е подобен на профилите, които сте последвали наскоро.", "follow_suggestions.hints.similar_to_recently_followed": "Този профил е подобен на профилите, които сте последвали наскоро.",
"follow_suggestions.personalized_suggestion": "Персонализирано предложение", "follow_suggestions.personalized_suggestion": "Персонализирано предложение",
"follow_suggestions.popular_suggestion": "Популярно предложение", "follow_suggestions.popular_suggestion": "Популярно предложение",
"follow_suggestions.popular_suggestion_longer": "Популярно из {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Подобни на профилите, които наскоро сте последвали",
"follow_suggestions.view_all": "Преглед на всички", "follow_suggestions.view_all": "Преглед на всички",
"follow_suggestions.who_to_follow": "Кого да се следва", "follow_suggestions.who_to_follow": "Кого да се следва",
"followed_tags": "Последвани хаштагове", "followed_tags": "Последвани хаштагове",
@ -469,6 +473,15 @@
"notification.follow": "{name} ви последва", "notification.follow": "{name} ви последва",
"notification.follow_request": "{name} поиска да ви последва", "notification.follow_request": "{name} поиска да ви последва",
"notification.mention": "{name} ви спомена", "notification.mention": "{name} ви спомена",
"notification.moderation-warning.learn_more": "Научете повече",
"notification.moderation_warning": "Получихте предупреждение за модериране",
"notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.",
"notification.moderation_warning.action_disable": "Вашият акаунт е изключен.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Някои от публикациите ви са означени като деликатни.",
"notification.moderation_warning.action_none": "Акаунтът ви получи предупреждение за модериране.",
"notification.moderation_warning.action_sensitive": "Публикациите ви ще се означават като деликатни от сега нататък.",
"notification.moderation_warning.action_silence": "Вашият акаунт е ограничен.",
"notification.moderation_warning.action_suspend": "Вашият акаунт е спрян.",
"notification.own_poll": "Анкетата ви приключи", "notification.own_poll": "Анкетата ви приключи",
"notification.poll": "Анкета, в която гласувахте, приключи", "notification.poll": "Анкета, в която гласувахте, приключи",
"notification.reblog": "{name} подсили ваша публикация", "notification.reblog": "{name} подсили ваша публикация",

View file

@ -263,6 +263,8 @@
"follow_request.authorize": "Aotren", "follow_request.authorize": "Aotren",
"follow_request.reject": "Nac'hañ", "follow_request.reject": "Nac'hañ",
"follow_requests.unlocked_explanation": "Daoust ma n'eo ket ho kont prennet, skipailh {domain} a soñj e fellfe deoc'h gwiriekaat pedadennoù heuliañ deus ar c'hontoù-se diwar-zorn.", "follow_requests.unlocked_explanation": "Daoust ma n'eo ket ho kont prennet, skipailh {domain} a soñj e fellfe deoc'h gwiriekaat pedadennoù heuliañ deus ar c'hontoù-se diwar-zorn.",
"follow_suggestions.friends_of_friends_longer": "Diouzh ar c'hiz e-touez an dud heuliet ganeoc'h",
"follow_suggestions.popular_suggestion_longer": "Diouzh ar c'hiz war {domain}",
"follow_suggestions.view_all": "Gwelet pep tra", "follow_suggestions.view_all": "Gwelet pep tra",
"followed_tags": "Hashtagoù o heuliañ", "followed_tags": "Hashtagoù o heuliañ",
"footer.about": "Diwar-benn", "footer.about": "Diwar-benn",
@ -395,6 +397,7 @@
"notification.follow": "heuliañ a ra {name} ac'hanoc'h", "notification.follow": "heuliañ a ra {name} ac'hanoc'h",
"notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ", "notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ",
"notification.mention": "Gant {name} oc'h bet meneget", "notification.mention": "Gant {name} oc'h bet meneget",
"notification.moderation-warning.learn_more": "Gouzout hiroc'h",
"notification.own_poll": "Echu eo ho sontadeg", "notification.own_poll": "Echu eo ho sontadeg",
"notification.poll": "Ur sontadeg ho deus mouezhet warnañ a zo echuet", "notification.poll": "Ur sontadeg ho deus mouezhet warnañ a zo echuet",
"notification.reblog": "Gant {name} eo bet skignet ho toud", "notification.reblog": "Gant {name} eo bet skignet ho toud",

View file

@ -318,7 +318,7 @@
"follow_suggestions.personalized_suggestion": "Suggeriment personalitzat", "follow_suggestions.personalized_suggestion": "Suggeriment personalitzat",
"follow_suggestions.popular_suggestion": "Suggeriment popular", "follow_suggestions.popular_suggestion": "Suggeriment popular",
"follow_suggestions.popular_suggestion_longer": "Popular a {domain}", "follow_suggestions.popular_suggestion_longer": "Popular a {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Semblant a perfils que has seguit fa poc", "follow_suggestions.similar_to_recently_followed_longer": "Semblant a perfils que seguiu fa poc",
"follow_suggestions.view_all": "Mostra-ho tot", "follow_suggestions.view_all": "Mostra-ho tot",
"follow_suggestions.who_to_follow": "A qui seguir", "follow_suggestions.who_to_follow": "A qui seguir",
"followed_tags": "Etiquetes seguides", "followed_tags": "Etiquetes seguides",
@ -473,6 +473,14 @@
"notification.follow": "{name} et segueix", "notification.follow": "{name} et segueix",
"notification.follow_request": "{name} ha sol·licitat de seguir-te", "notification.follow_request": "{name} ha sol·licitat de seguir-te",
"notification.mention": "{name} t'ha esmentat", "notification.mention": "{name} t'ha esmentat",
"notification.moderation_warning": "Heu rebut un avís de moderació",
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
"notification.moderation_warning.action_disable": "S'ha desactivat el vostre compte.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "S'ha marcat com a sensibles algunes de les vostres publicacions.",
"notification.moderation_warning.action_none": "El vostre compte ha rebut un avís de moderació.",
"notification.moderation_warning.action_sensitive": "A partir d'ara les vostres publicacions es marcaran com sensibles.",
"notification.moderation_warning.action_silence": "S'ha limitat el vostre compte.",
"notification.moderation_warning.action_suspend": "S'ha suspès el vostre compte.",
"notification.own_poll": "La teva enquesta ha finalitzat", "notification.own_poll": "La teva enquesta ha finalitzat",
"notification.poll": "Ha finalitzat una enquesta en què has votat", "notification.poll": "Ha finalitzat una enquesta en què has votat",
"notification.reblog": "{name} t'ha impulsat", "notification.reblog": "{name} t'ha impulsat",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, personál {domain} usoudil, že byste mohli chtít tyto požadavky na sledování zkontrolovat ručně.", "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, personál {domain} usoudil, že byste mohli chtít tyto požadavky na sledování zkontrolovat ručně.",
"follow_suggestions.curated_suggestion": "Výběr personálů", "follow_suggestions.curated_suggestion": "Výběr personálů",
"follow_suggestions.dismiss": "Znovu nezobrazovat", "follow_suggestions.dismiss": "Znovu nezobrazovat",
"follow_suggestions.featured_longer": "Ručně vybráno týmem {domain}",
"follow_suggestions.friends_of_friends_longer": "Populární mezi lidmi, které sledujete",
"follow_suggestions.hints.featured": "Tento profil byl ručně vybrán týmem {domain}.", "follow_suggestions.hints.featured": "Tento profil byl ručně vybrán týmem {domain}.",
"follow_suggestions.hints.friends_of_friends": "Tento profil je populární mezi lidmi, které sledujete.", "follow_suggestions.hints.friends_of_friends": "Tento profil je populární mezi lidmi, které sledujete.",
"follow_suggestions.hints.most_followed": "Tento profil je jedním z nejvíce sledovaných na {domain}.", "follow_suggestions.hints.most_followed": "Tento profil je jedním z nejvíce sledovaných na {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilům, které jste nedávno sledovali.", "follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilům, které jste nedávno sledovali.",
"follow_suggestions.personalized_suggestion": "Přizpůsobený návrh", "follow_suggestions.personalized_suggestion": "Přizpůsobený návrh",
"follow_suggestions.popular_suggestion": "Populární návrh", "follow_suggestions.popular_suggestion": "Populární návrh",
"follow_suggestions.popular_suggestion_longer": "Populární na {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Podobné profilům, které jste nedávno sledovali",
"follow_suggestions.view_all": "Zobrazit vše", "follow_suggestions.view_all": "Zobrazit vše",
"follow_suggestions.who_to_follow": "Koho sledovat", "follow_suggestions.who_to_follow": "Koho sledovat",
"followed_tags": "Sledované hashtagy", "followed_tags": "Sledované hashtagy",
@ -469,6 +473,15 @@
"notification.follow": "Uživatel {name} vás začal sledovat", "notification.follow": "Uživatel {name} vás začal sledovat",
"notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat", "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
"notification.mention": "Uživatel {name} vás zmínil", "notification.mention": "Uživatel {name} vás zmínil",
"notification.moderation-warning.learn_more": "Zjistit více",
"notification.moderation_warning": "Obdrželi jste moderační varování",
"notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.",
"notification.moderation_warning.action_disable": "Váš účet je zablokován.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Některé z vašich příspěvků byly označeny jako citlivé.",
"notification.moderation_warning.action_none": "Váš účet obdržel moderační varování.",
"notification.moderation_warning.action_sensitive": "Vaše příspěvky budou od nynějška označeny jako citlivé.",
"notification.moderation_warning.action_silence": "Váš účet byl omezen.",
"notification.moderation_warning.action_suspend": "Váš účet byl pozastaven.",
"notification.own_poll": "Vaše anketa skončila", "notification.own_poll": "Vaše anketa skončila",
"notification.poll": "Anketa, ve které jste hlasovali, skončila", "notification.poll": "Anketa, ve které jste hlasovali, skončila",
"notification.reblog": "Uživatel {name} boostnul váš příspěvek", "notification.reblog": "Uživatel {name} boostnul váš příspěvek",

View file

@ -89,6 +89,14 @@
"announcement.announcement": "Cyhoeddiad", "announcement.announcement": "Cyhoeddiad",
"attachments_list.unprocessed": "(heb eu prosesu)", "attachments_list.unprocessed": "(heb eu prosesu)",
"audio.hide": "Cuddio sain", "audio.hide": "Cuddio sain",
"block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystro mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.",
"block_modal.show_less": "Dangos llai",
"block_modal.show_more": "Dangos mwy",
"block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.",
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
"block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
"block_modal.title": "Rhwystro defnyddiwr?",
"block_modal.you_wont_see_mentions": "Ni welwch bostiadau sy'n sôn amdanynt.",
"boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa", "boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa",
"bundle_column_error.copy_stacktrace": "Copïo'r adroddiad gwall", "bundle_column_error.copy_stacktrace": "Copïo'r adroddiad gwall",
"bundle_column_error.error.body": "Nid oedd modd cynhyrchu'r dudalen honno. Gall fod oherwydd gwall yn ein cod neu fater cydnawsedd porwr.", "bundle_column_error.error.body": "Nid oedd modd cynhyrchu'r dudalen honno. Gall fod oherwydd gwall yn ein cod neu fater cydnawsedd porwr.",
@ -169,6 +177,7 @@
"confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?", "confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?",
"confirmations.discard_edit_media.confirm": "Dileu", "confirmations.discard_edit_media.confirm": "Dileu",
"confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?", "confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?",
"confirmations.domain_block.confirm": "Rhwystro gweinydd",
"confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.", "confirmations.domain_block.message": "Ydych chi wir, wir eisiau blocio'r holl {domain}? Fel arfer, mae blocio neu dewi pobl penodol yn broses mwy effeithiol. Fyddwch chi ddim yn gweld cynnwys o'r parth hwnnw mewn ffrydiau cyhoeddus neu yn eich hysbysiadau. Bydd eich dilynwyr o'r parth hwnnw yn cael eu ddileu.",
"confirmations.edit.confirm": "Golygu", "confirmations.edit.confirm": "Golygu",
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?", "confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
@ -200,6 +209,27 @@
"dismissable_banner.explore_statuses": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n cael eu graddio'n uwch.", "dismissable_banner.explore_statuses": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n cael eu graddio'n uwch.",
"dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.", "dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.",
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.", "dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
"domain_block_modal.block": "Rhwystro gweinydd",
"domain_block_modal.block_account_instead": "Rhwystro @{name} yn lle hynny",
"domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.",
"domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.",
"domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu rhwystro.",
"domain_block_modal.title": "Rhwystro parth?",
"domain_block_modal.you_will_lose_followers": "Bydd eich holl ddilynwyr o'r gweinydd hwn yn cael eu tynnu.",
"domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.",
"domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.",
"domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.",
"domain_pill.server": "Gweinydd",
"domain_pill.their_handle": "Eu handlen:",
"domain_pill.their_server": "Eu cartref digidol, lle mae eu holl negeseuon yn byw.",
"domain_pill.their_username": "Eu dynodwr unigryw ar eu gweinydd. Mae'n bosibl dod o hyd i ddefnyddwyr gyda'r un enw defnyddiwr ar wahanol weinyddion.",
"domain_pill.username": "Enw Defnyddiwr",
"domain_pill.whats_in_a_handle": "Beth sydd mewn handlen?",
"domain_pill.who_they_are": "Gan fod handlen yn dweud pwy yw rhywun a ble maen nhw, gallwch chi ryngweithio â phobl ar draws gwe gymdeithasol <button>llwyfannau wedi'u pweru gan ActivityPub</button> .",
"domain_pill.who_you_are": "Oherwydd bod eich handlen yn dweud pwy ydych chi a ble rydych chi, gall pobl ryngweithio â chi ar draws gwe gymdeithasol <button>llwyfannau wedi'u pweru gan ActivityPub</button> .",
"domain_pill.your_handle": "Eich handlen:",
"domain_pill.your_server": "Eich cartref digidol, lle mae'ch holl bostiadau'n byw. Ddim yn hoffi'r un hon? Trosglwyddwch weinyddion ar unrhyw adeg a dewch â'ch dilynwyr hefyd.",
"domain_pill.your_username": "Eich dynodwr unigryw ar y gweinydd hwn. Mae'n bosibl dod o hyd i ddefnyddwyr gyda'r un enw defnyddiwr ar wahanol weinyddion.",
"embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.instructions": "Gosodwch y post hwn ar eich gwefan drwy gopïo'r côd isod.",
"embed.preview": "Dyma sut olwg fydd arno:", "embed.preview": "Dyma sut olwg fydd arno:",
"emoji_button.activity": "Gweithgarwch", "emoji_button.activity": "Gweithgarwch",
@ -267,6 +297,8 @@
"filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd",
"filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.select_filter.title": "Hidlo'r postiad hwn",
"filter_modal.title.status": "Hidlo postiad", "filter_modal.title.status": "Hidlo postiad",
"filtered_notifications_banner.mentions": "{count, plural, one {crybwylliad} other {crybwylliad}}",
"filtered_notifications_banner.pending_requests": "Hysbysiadau gan {count, plural, =0 {neb} one {un person} other {# person}} efallai y gwyddoch amdanyn nhw",
"filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo",
"firehose.all": "Popeth", "firehose.all": "Popeth",
"firehose.local": "Gweinydd hwn", "firehose.local": "Gweinydd hwn",
@ -276,6 +308,8 @@
"follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, roedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.", "follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, roedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.",
"follow_suggestions.curated_suggestion": "Dewis staff", "follow_suggestions.curated_suggestion": "Dewis staff",
"follow_suggestions.dismiss": "Peidio â dangos hwn eto", "follow_suggestions.dismiss": "Peidio â dangos hwn eto",
"follow_suggestions.featured_longer": "Wedi'i ddewis â llaw gan dîm {domain}",
"follow_suggestions.friends_of_friends_longer": "Yn boblogaidd ymhlith y bobl rydych chi'n eu dilyn",
"follow_suggestions.hints.featured": "Mae'r proffil hwn wedi'i ddewis yn arbennig gan dîm {domain}.", "follow_suggestions.hints.featured": "Mae'r proffil hwn wedi'i ddewis yn arbennig gan dîm {domain}.",
"follow_suggestions.hints.friends_of_friends": "Mae'r proffil hwn yn boblogaidd ymhlith y bobl rydych chi'n eu dilyn.", "follow_suggestions.hints.friends_of_friends": "Mae'r proffil hwn yn boblogaidd ymhlith y bobl rydych chi'n eu dilyn.",
"follow_suggestions.hints.most_followed": "Mae'r proffil hwn yn un o'r rhai sy'n cael ei ddilyn fwyaf ar {domain}.", "follow_suggestions.hints.most_followed": "Mae'r proffil hwn yn un o'r rhai sy'n cael ei ddilyn fwyaf ar {domain}.",
@ -283,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Mae'r proffil hwn yn debyg i'r proffiliau rydych chi wedi'u dilyn yn fwyaf diweddar.", "follow_suggestions.hints.similar_to_recently_followed": "Mae'r proffil hwn yn debyg i'r proffiliau rydych chi wedi'u dilyn yn fwyaf diweddar.",
"follow_suggestions.personalized_suggestion": "Awgrym personol", "follow_suggestions.personalized_suggestion": "Awgrym personol",
"follow_suggestions.popular_suggestion": "Awgrym poblogaidd", "follow_suggestions.popular_suggestion": "Awgrym poblogaidd",
"follow_suggestions.popular_suggestion_longer": "Yn boblogaidd ar {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Yn debyg i broffiliau y gwnaethoch chi eu dilyn yn ddiweddar",
"follow_suggestions.view_all": "Gweld y cyfan", "follow_suggestions.view_all": "Gweld y cyfan",
"follow_suggestions.who_to_follow": "Pwy i ddilyn", "follow_suggestions.who_to_follow": "Pwy i ddilyn",
"followed_tags": "Hashnodau rydych yn eu dilyn", "followed_tags": "Hashnodau rydych yn eu dilyn",
@ -396,6 +432,15 @@
"loading_indicator.label": "Yn llwytho…", "loading_indicator.label": "Yn llwytho…",
"media_gallery.toggle_visible": "{number, plural, one {Cuddio delwedd} other {Cuddio delwedd}}", "media_gallery.toggle_visible": "{number, plural, one {Cuddio delwedd} other {Cuddio delwedd}}",
"moved_to_account_banner.text": "Ar hyn y bryd, mae eich cyfrif {disabledAccount} wedi ei analluogi am i chi symud i {movedToAccount}.", "moved_to_account_banner.text": "Ar hyn y bryd, mae eich cyfrif {disabledAccount} wedi ei analluogi am i chi symud i {movedToAccount}.",
"mute_modal.hide_from_notifications": "Cuddio rhag hysbysiadau",
"mute_modal.hide_options": "Cuddio'r dewis",
"mute_modal.indefinite": "Nes i mi eu dad-dewi",
"mute_modal.show_options": "Dangos y dewis",
"mute_modal.they_can_mention_and_follow": "Gallan nhw eich crybwyll a'ch dilyn, ond fyddwch chi ddim yn eu gweld.",
"mute_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu tawelu.",
"mute_modal.title": "Tewi defnyddiwr?",
"mute_modal.you_wont_see_mentions": "Welwch chi ddim postiadau sy'n sôn amdanyn nhw.",
"mute_modal.you_wont_see_posts": "Gallan nhw weld eich postiadau o hyd, ond fyddwch chi ddim yn gweld eu rhai hwy.",
"navigation_bar.about": "Ynghylch", "navigation_bar.about": "Ynghylch",
"navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch", "navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch",
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
@ -428,9 +473,23 @@
"notification.follow": "Dilynodd {name} chi", "notification.follow": "Dilynodd {name} chi",
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
"notification.mention": "Crybwyllodd {name} amdanoch chi", "notification.mention": "Crybwyllodd {name} amdanoch chi",
"notification.moderation-warning.learn_more": "Dysgu mwy",
"notification.moderation_warning": "Rydych wedi derbyn rhybudd cymedroli",
"notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.",
"notification.moderation_warning.action_disable": "Mae eich cyfrif wedi'i analluogi.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Mae rhai o'ch postiadau wedi'u marcio'n sensitif.",
"notification.moderation_warning.action_none": "Mae eich cyfrif wedi derbyn rhybudd cymedroli.",
"notification.moderation_warning.action_sensitive": "Bydd eich postiadau'n cael eu marcio'n sensitif o hyn ymlaen.",
"notification.moderation_warning.action_silence": "Mae eich cyfrif wedi'i gyfyngu.",
"notification.moderation_warning.action_suspend": "Mae eich cyfrif wedi'i hatal.",
"notification.own_poll": "Mae eich pleidlais wedi dod i ben", "notification.own_poll": "Mae eich pleidlais wedi dod i ben",
"notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben", "notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben",
"notification.reblog": "Hybodd {name} eich post", "notification.reblog": "Hybodd {name} eich post",
"notification.relationships_severance_event": "Wedi colli cysylltiad â {name}",
"notification.relationships_severance_event.account_suspension": "Mae gweinyddwr o {from} wedi atal {target}, sy'n golygu na allwch dderbyn diweddariadau ganddynt mwyach na rhyngweithio â nhw.",
"notification.relationships_severance_event.domain_block": "Mae gweinyddwr o {from} wedi rhwystro {target}, gan gynnwys {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {# cyfrif}} arall rydych chi'n ei ddilyn.",
"notification.relationships_severance_event.learn_more": "Dysgu mwy",
"notification.relationships_severance_event.user_domain_block": "Rydych wedi rhwystro {target}, gan ddileu {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {#cyfrifon}} arall rydych yn ei ddilyn.",
"notification.status": "{name} newydd ei bostio", "notification.status": "{name} newydd ei bostio",
"notification.update": "Golygodd {name} bostiad", "notification.update": "Golygodd {name} bostiad",
"notification_requests.accept": "Derbyn", "notification_requests.accept": "Derbyn",
@ -443,6 +502,8 @@
"notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:", "notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:",
"notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith",
"notifications.column_settings.favourite": "Ffefrynnau:", "notifications.column_settings.favourite": "Ffefrynnau:",
"notifications.column_settings.filter_bar.advanced": "Dangos pob categori",
"notifications.column_settings.filter_bar.category": "Bar hidlo cyflym",
"notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:", "notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:",
"notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.mention": "Crybwylliadau:",
@ -653,9 +714,11 @@
"status.direct": "Crybwyll yn breifat @{name}", "status.direct": "Crybwyll yn breifat @{name}",
"status.direct_indicator": "Crybwyll preifat", "status.direct_indicator": "Crybwyll preifat",
"status.edit": "Golygu", "status.edit": "Golygu",
"status.edited": "Golygwyd ddiwethaf {date}",
"status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}", "status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}",
"status.embed": "Mewnblannu", "status.embed": "Mewnblannu",
"status.favourite": "Hoffi", "status.favourite": "Hoffi",
"status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}",
"status.filter": "Hidlo'r postiad hwn", "status.filter": "Hidlo'r postiad hwn",
"status.filtered": "Wedi'i hidlo", "status.filtered": "Wedi'i hidlo",
"status.hide": "Cuddio'r postiad", "status.hide": "Cuddio'r postiad",
@ -676,6 +739,7 @@
"status.reblog": "Hybu", "status.reblog": "Hybu",
"status.reblog_private": "Hybu i'r gynulleidfa wreiddiol", "status.reblog_private": "Hybu i'r gynulleidfa wreiddiol",
"status.reblogged_by": "Hybodd {name}", "status.reblogged_by": "Hybodd {name}",
"status.reblogs": "{count, plural, one {hwb} other {hwb}}",
"status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.", "status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.",
"status.redraft": "Dileu ac ailddrafftio", "status.redraft": "Dileu ac ailddrafftio",
"status.remove_bookmark": "Tynnu nod tudalen", "status.remove_bookmark": "Tynnu nod tudalen",

View file

@ -241,7 +241,7 @@
"emoji_button.nature": "Naturaleza", "emoji_button.nature": "Naturaleza",
"emoji_button.not_found": "No se encontraron emojis coincidentes", "emoji_button.not_found": "No se encontraron emojis coincidentes",
"emoji_button.objects": "Objetos", "emoji_button.objects": "Objetos",
"emoji_button.people": "Gente", "emoji_button.people": "Cuentas",
"emoji_button.recent": "Usados frecuentemente", "emoji_button.recent": "Usados frecuentemente",
"emoji_button.search": "Buscar...", "emoji_button.search": "Buscar...",
"emoji_button.search_results": "Resultados de búsqueda", "emoji_button.search_results": "Resultados de búsqueda",
@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.", "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el equipo de {domain} pensó que podrías querer revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Selección del equipo", "follow_suggestions.curated_suggestion": "Selección del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo", "follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.featured_longer": "Seleccionada a mano por el equipo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Populares entre las cuentas que seguís",
"follow_suggestions.hints.featured": "Este perfil fue seleccionado a mano por el equipo de {domain}.", "follow_suggestions.hints.featured": "Este perfil fue seleccionado a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las cuentas que seguís.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las cuentas que seguís.",
"follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.", "follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los que comenzaste a seguir.", "follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los que comenzaste a seguir.",
"follow_suggestions.personalized_suggestion": "Sugerencia personalizada", "follow_suggestions.personalized_suggestion": "Sugerencia personalizada",
"follow_suggestions.popular_suggestion": "Sugerencia popular", "follow_suggestions.popular_suggestion": "Sugerencia popular",
"follow_suggestions.popular_suggestion_longer": "Popular en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similares a perfiles que comenzaste a seguir recientemente",
"follow_suggestions.view_all": "Ver todo", "follow_suggestions.view_all": "Ver todo",
"follow_suggestions.who_to_follow": "A quién seguir", "follow_suggestions.who_to_follow": "A quién seguir",
"followed_tags": "Etiquetas seguidas", "followed_tags": "Etiquetas seguidas",
@ -469,6 +473,15 @@
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.follow_request": "{name} solicitó seguirte", "notification.follow_request": "{name} solicitó seguirte",
"notification.mention": "{name} te mencionó", "notification.mention": "{name} te mencionó",
"notification.moderation-warning.learn_more": "Aprendé más",
"notification.moderation_warning": "Recibiste una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
"notification.moderation_warning.action_disable": "Se deshabilitó tu cuenta.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Se marcaron como sensibles a algunos de tus mensajes.",
"notification.moderation_warning.action_none": "Tu cuenta recibió una advertencia de moderación.",
"notification.moderation_warning.action_sensitive": "A partir de ahora, tus mensajes serán marcados como sensibles.",
"notification.moderation_warning.action_silence": "Tu cuenta fue limitada.",
"notification.moderation_warning.action_suspend": "Tu cuenta fue suspendida.",
"notification.own_poll": "Tu encuesta finalizó", "notification.own_poll": "Tu encuesta finalizó",
"notification.poll": "Finalizó una encuesta en la que votaste", "notification.poll": "Finalizó una encuesta en la que votaste",
"notification.reblog": "{name} adhirió a tu mensaje", "notification.reblog": "{name} adhirió a tu mensaje",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.curated_suggestion": "Recomendaciones del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo", "follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues",
"follow_suggestions.hints.featured": "Este perfil ha sido seleccionado a mano por el equipo de {domain}.", "follow_suggestions.hints.featured": "Este perfil ha sido seleccionado a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.",
"follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.", "follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.", "follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.",
"follow_suggestions.personalized_suggestion": "Sugerencia personalizada", "follow_suggestions.personalized_suggestion": "Sugerencia personalizada",
"follow_suggestions.popular_suggestion": "Sugerencia popular", "follow_suggestions.popular_suggestion": "Sugerencia popular",
"follow_suggestions.popular_suggestion_longer": "Populares en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similares a los perfiles que has seguido recientemente",
"follow_suggestions.view_all": "Ver todo", "follow_suggestions.view_all": "Ver todo",
"follow_suggestions.who_to_follow": "Recomendamos seguir", "follow_suggestions.who_to_follow": "Recomendamos seguir",
"followed_tags": "Hashtags seguidos", "followed_tags": "Hashtags seguidos",
@ -469,6 +473,15 @@
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request": "{name} ha solicitado seguirte",
"notification.mention": "{name} te ha mencionado", "notification.mention": "{name} te ha mencionado",
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
"notification.moderation_warning.action_disable": "Se ha desactivado su cuenta.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Se han marcado como sensibles algunas de tus publicaciones.",
"notification.moderation_warning.action_none": "Tu cuenta ha recibido un aviso de moderación.",
"notification.moderation_warning.action_sensitive": "De ahora en adelante, todas tus publicaciones se marcarán como sensibles.",
"notification.moderation_warning.action_silence": "Se ha limitado tu cuenta.",
"notification.moderation_warning.action_suspend": "Se ha suspendido tu cuenta.",
"notification.own_poll": "Tu encuesta ha terminado", "notification.own_poll": "Tu encuesta ha terminado",
"notification.poll": "Una encuesta en la que has votado ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado",
"notification.reblog": "{name} ha retooteado tu estado", "notification.reblog": "{name} ha retooteado tu estado",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.",
"follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.curated_suggestion": "Recomendaciones del equipo",
"follow_suggestions.dismiss": "No mostrar de nuevo", "follow_suggestions.dismiss": "No mostrar de nuevo",
"follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues",
"follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.", "follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.",
"follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.", "follow_suggestions.hints.most_followed": "Este perfil es uno de los más seguidos en {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.", "follow_suggestions.hints.similar_to_recently_followed": "Este perfil es similar a los perfiles que has seguido recientemente.",
"follow_suggestions.personalized_suggestion": "Sugerencia personalizada", "follow_suggestions.personalized_suggestion": "Sugerencia personalizada",
"follow_suggestions.popular_suggestion": "Sugerencia popular", "follow_suggestions.popular_suggestion": "Sugerencia popular",
"follow_suggestions.popular_suggestion_longer": "Populares en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similares a los perfiles que has seguido recientemente",
"follow_suggestions.view_all": "Ver todo", "follow_suggestions.view_all": "Ver todo",
"follow_suggestions.who_to_follow": "A quién seguir", "follow_suggestions.who_to_follow": "A quién seguir",
"followed_tags": "Etiquetas seguidas", "followed_tags": "Etiquetas seguidas",
@ -469,6 +473,15 @@
"notification.follow": "{name} te empezó a seguir", "notification.follow": "{name} te empezó a seguir",
"notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request": "{name} ha solicitado seguirte",
"notification.mention": "{name} te ha mencionado", "notification.mention": "{name} te ha mencionado",
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
"notification.moderation_warning.action_disable": "Se ha desactivado su cuenta.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Se han marcado como sensibles algunas de tus publicaciones.",
"notification.moderation_warning.action_none": "Tu cuenta ha recibido un aviso de moderación.",
"notification.moderation_warning.action_sensitive": "De ahora en adelante, todas tus publicaciones se marcarán como sensibles.",
"notification.moderation_warning.action_silence": "Se ha limitado tu cuenta.",
"notification.moderation_warning.action_suspend": "Se ha suspendido tu cuenta.",
"notification.own_poll": "Tu encuesta ha terminado", "notification.own_poll": "Tu encuesta ha terminado",
"notification.poll": "Una encuesta en la que has votado ha terminado", "notification.poll": "Una encuesta en la que has votado ha terminado",
"notification.reblog": "{name} ha impulsado tu publicación", "notification.reblog": "{name} ha impulsado tu publicación",

View file

@ -473,6 +473,15 @@
"notification.follow": "{name} במעקב אחרייך", "notification.follow": "{name} במעקב אחרייך",
"notification.follow_request": "{name} ביקשו לעקוב אחריך", "notification.follow_request": "{name} ביקשו לעקוב אחריך",
"notification.mention": "אוזכרת על ידי {name}", "notification.mention": "אוזכרת על ידי {name}",
"notification.moderation-warning.learn_more": "למידע נוסף",
"notification.moderation_warning": "קיבלת אזהרה מצוות ניהול התוכן",
"notification.moderation_warning.action_delete_statuses": "חלק מהודעותיך הוסרו.",
"notification.moderation_warning.action_disable": "חשבונך הושבת.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "חלק מהודעותיך סומנו כרגישות.",
"notification.moderation_warning.action_none": "חשבונך קיבל אזהרה מצוות ניהול התוכן.",
"notification.moderation_warning.action_sensitive": "הודעותיך יסומנו כרגישות מעתה ואילך.",
"notification.moderation_warning.action_silence": "חשבונך הוגבל.",
"notification.moderation_warning.action_suspend": "חשבונך הושעה.",
"notification.own_poll": "הסקר שלך הסתיים", "notification.own_poll": "הסקר שלך הסתיים",
"notification.poll": "סקר שהצבעת בו הסתיים", "notification.poll": "סקר שהצבעת בו הסתיים",
"notification.reblog": "הודעתך הודהדה על ידי {name}", "notification.reblog": "הודעתך הודהדה על ידי {name}",

View file

@ -309,7 +309,7 @@
"follow_suggestions.curated_suggestion": "A stáb választása", "follow_suggestions.curated_suggestion": "A stáb választása",
"follow_suggestions.dismiss": "Ne jelenjen meg újra", "follow_suggestions.dismiss": "Ne jelenjen meg újra",
"follow_suggestions.featured_longer": "A {domain} csapata által kézzel kiválasztott", "follow_suggestions.featured_longer": "A {domain} csapata által kézzel kiválasztott",
"follow_suggestions.friends_of_friends_longer": "Népszerű az Ön által követett emberek körében", "follow_suggestions.friends_of_friends_longer": "Népszerű az általad követett emberek körében",
"follow_suggestions.hints.featured": "Ezt a profilt a(z) {domain} csapata választotta ki.", "follow_suggestions.hints.featured": "Ezt a profilt a(z) {domain} csapata választotta ki.",
"follow_suggestions.hints.friends_of_friends": "Ez a profil népszerű az általad követett emberek körében.", "follow_suggestions.hints.friends_of_friends": "Ez a profil népszerű az általad követett emberek körében.",
"follow_suggestions.hints.most_followed": "Ez a profil a leginkább követett a(z) {domain} oldalon.", "follow_suggestions.hints.most_followed": "Ez a profil a leginkább követett a(z) {domain} oldalon.",
@ -318,7 +318,7 @@
"follow_suggestions.personalized_suggestion": "Személyre szabott javaslat", "follow_suggestions.personalized_suggestion": "Személyre szabott javaslat",
"follow_suggestions.popular_suggestion": "Népszerű javaslat", "follow_suggestions.popular_suggestion": "Népszerű javaslat",
"follow_suggestions.popular_suggestion_longer": "Népszerű itt: {domain}", "follow_suggestions.popular_suggestion_longer": "Népszerű itt: {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Hasonló profilok, melyeket nemrég követett", "follow_suggestions.similar_to_recently_followed_longer": "Hasonló azokhoz a profilokhoz, melyeket nemrég követtél be",
"follow_suggestions.view_all": "Összes megtekintése", "follow_suggestions.view_all": "Összes megtekintése",
"follow_suggestions.who_to_follow": "Kit érdemes követni", "follow_suggestions.who_to_follow": "Kit érdemes követni",
"followed_tags": "Követett hashtagek", "followed_tags": "Követett hashtagek",
@ -473,7 +473,7 @@
"notification.follow": "{name} követ téged", "notification.follow": "{name} követ téged",
"notification.follow_request": "{name} követni szeretne téged", "notification.follow_request": "{name} követni szeretne téged",
"notification.mention": "{name} megemlített", "notification.mention": "{name} megemlített",
"notification.moderation-warning.learn_more": "További információk", "notification.moderation-warning.learn_more": "További információ",
"notification.moderation_warning": "Moderációs figyelmeztetést kaptál", "notification.moderation_warning": "Moderációs figyelmeztetést kaptál",
"notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.", "notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.",
"notification.moderation_warning.action_disable": "A fiókod le van tiltva.", "notification.moderation_warning.action_disable": "A fiókod le van tiltva.",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Benque tu conto non es serrate, le personal de {domain} pensa que es un bon idea que tu revide manualmente le sequente requestas de iste contos.", "follow_requests.unlocked_explanation": "Benque tu conto non es serrate, le personal de {domain} pensa que es un bon idea que tu revide manualmente le sequente requestas de iste contos.",
"follow_suggestions.curated_suggestion": "Selection del equipa", "follow_suggestions.curated_suggestion": "Selection del equipa",
"follow_suggestions.dismiss": "Non monstrar novemente", "follow_suggestions.dismiss": "Non monstrar novemente",
"follow_suggestions.featured_longer": "Seligite con cura per le equipa de {domain}",
"follow_suggestions.friends_of_friends_longer": "Popular inter le gente que tu seque",
"follow_suggestions.hints.featured": "Iste profilo ha essite seligite manualmente per le equipa de {domain}.", "follow_suggestions.hints.featured": "Iste profilo ha essite seligite manualmente per le equipa de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Iste profilo es popular inter le gente que tu seque.", "follow_suggestions.hints.friends_of_friends": "Iste profilo es popular inter le gente que tu seque.",
"follow_suggestions.hints.most_followed": "Iste profilo es un del plus sequites sur {domain}.", "follow_suggestions.hints.most_followed": "Iste profilo es un del plus sequites sur {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Iste profilo es similar al profilos que tu ha recentemente sequite.", "follow_suggestions.hints.similar_to_recently_followed": "Iste profilo es similar al profilos que tu ha recentemente sequite.",
"follow_suggestions.personalized_suggestion": "Suggestion personalisate", "follow_suggestions.personalized_suggestion": "Suggestion personalisate",
"follow_suggestions.popular_suggestion": "Suggestion personalisate", "follow_suggestions.popular_suggestion": "Suggestion personalisate",
"follow_suggestions.popular_suggestion_longer": "Popular sur {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similar al profilos que tu ha sequite recentemente",
"follow_suggestions.view_all": "Vider toto", "follow_suggestions.view_all": "Vider toto",
"follow_suggestions.who_to_follow": "Qui sequer", "follow_suggestions.who_to_follow": "Qui sequer",
"followed_tags": "Hashtags sequite", "followed_tags": "Hashtags sequite",
@ -469,6 +473,15 @@
"notification.follow": "{name} te ha sequite", "notification.follow": "{name} te ha sequite",
"notification.follow_request": "{name} ha requestate de sequer te", "notification.follow_request": "{name} ha requestate de sequer te",
"notification.mention": "{name} te ha mentionate", "notification.mention": "{name} te ha mentionate",
"notification.moderation-warning.learn_more": "Apprender plus",
"notification.moderation_warning": "Tu ha recipite un advertimento de moderation",
"notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.",
"notification.moderation_warning.action_disable": "Tu conto ha essite disactivate.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Alcunes de tu messages ha essite marcate como sensibile.",
"notification.moderation_warning.action_none": "Tu conto ha recipite un advertimento de moderation.",
"notification.moderation_warning.action_sensitive": "Tu messages essera marcate como sensibile a partir de ora.",
"notification.moderation_warning.action_silence": "Tu conto ha essite limitate.",
"notification.moderation_warning.action_suspend": "Tu conto ha essite suspendite.",
"notification.own_poll": "Tu sondage ha finite", "notification.own_poll": "Tu sondage ha finite",
"notification.poll": "Un sondage in le qual tu ha votate ha finite", "notification.poll": "Un sondage in le qual tu ha votate ha finite",
"notification.reblog": "{name} ha impulsate tu message", "notification.reblog": "{name} ha impulsate tu message",

View file

@ -393,7 +393,7 @@
"filter_modal.title.status": "投稿をフィルターする", "filter_modal.title.status": "投稿をフィルターする",
"filtered_notifications_banner.mentions": "{count, plural, one {メンション} other {メンション}}", "filtered_notifications_banner.mentions": "{count, plural, one {メンション} other {メンション}}",
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {通知がブロックされているアカウントはありません} other {#アカウントからの通知がブロックされています}}", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {通知がブロックされているアカウントはありません} other {#アカウントからの通知がブロックされています}}",
"filtered_notifications_banner.title": "ブロック済みの通知", "filtered_notifications_banner.title": "保留中の通知",
"firehose.all": "すべて", "firehose.all": "すべて",
"firehose.local": "このサーバー", "firehose.local": "このサーバー",
"firehose.remote": "ほかのサーバー", "firehose.remote": "ほかのサーバー",
@ -402,6 +402,8 @@
"follow_requests.unlocked_explanation": "あなたのアカウントは承認制ではありませんが、{domain}のスタッフはこれらのアカウントからのフォローリクエストの確認が必要であると判断しました。", "follow_requests.unlocked_explanation": "あなたのアカウントは承認制ではありませんが、{domain}のスタッフはこれらのアカウントからのフォローリクエストの確認が必要であると判断しました。",
"follow_suggestions.curated_suggestion": "サーバースタッフ公認", "follow_suggestions.curated_suggestion": "サーバースタッフ公認",
"follow_suggestions.dismiss": "今後表示しない", "follow_suggestions.dismiss": "今後表示しない",
"follow_suggestions.featured_longer": "{domain} スタッフ公認",
"follow_suggestions.friends_of_friends_longer": "フォロー中のユーザーに人気",
"follow_suggestions.hints.featured": "{domain} の運営スタッフが選んだアカウントです。", "follow_suggestions.hints.featured": "{domain} の運営スタッフが選んだアカウントです。",
"follow_suggestions.hints.friends_of_friends": "フォロー中のユーザーのあいだで人気のアカウントです。", "follow_suggestions.hints.friends_of_friends": "フォロー中のユーザーのあいだで人気のアカウントです。",
"follow_suggestions.hints.most_followed": "{domain} でもっともフォローされているアカウントのひとつです。", "follow_suggestions.hints.most_followed": "{domain} でもっともフォローされているアカウントのひとつです。",
@ -409,6 +411,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "最近フォローしたユーザーに似ているアカウントです。", "follow_suggestions.hints.similar_to_recently_followed": "最近フォローしたユーザーに似ているアカウントです。",
"follow_suggestions.personalized_suggestion": "フォローに基づく提案", "follow_suggestions.personalized_suggestion": "フォローに基づく提案",
"follow_suggestions.popular_suggestion": "人気のアカウント", "follow_suggestions.popular_suggestion": "人気のアカウント",
"follow_suggestions.popular_suggestion_longer": "{domain} で人気",
"follow_suggestions.similar_to_recently_followed_longer": "最近フォローしたユーザーと似ているアカウント",
"follow_suggestions.view_all": "すべて表示", "follow_suggestions.view_all": "すべて表示",
"follow_suggestions.who_to_follow": "フォローを増やしてみませんか?", "follow_suggestions.who_to_follow": "フォローを増やしてみませんか?",
"followed_tags": "フォロー中のハッシュタグ", "followed_tags": "フォロー中のハッシュタグ",
@ -588,7 +592,7 @@
"notification_requests.accept": "受け入れる", "notification_requests.accept": "受け入れる",
"notification_requests.dismiss": "無視", "notification_requests.dismiss": "無視",
"notification_requests.notifications_from": "{name}からの通知", "notification_requests.notifications_from": "{name}からの通知",
"notification_requests.title": "ブロック済みの通知", "notification_requests.title": "保留中の通知",
"notifications.clear": "通知を消去", "notifications.clear": "通知を消去",
"notifications.clear_confirmation": "本当に通知を消去しますか?", "notifications.clear_confirmation": "本当に通知を消去しますか?",
"notifications.column_settings.admin.report": "新しい通報:", "notifications.column_settings.admin.report": "新しい通報:",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "귀하의 계정이 잠긴 계정이 아닐지라도, {domain} 스태프는 이 계정들의 팔로우 요청을 수동으로 처리해 주시면 좋겠다고 생각했습니다.", "follow_requests.unlocked_explanation": "귀하의 계정이 잠긴 계정이 아닐지라도, {domain} 스태프는 이 계정들의 팔로우 요청을 수동으로 처리해 주시면 좋겠다고 생각했습니다.",
"follow_suggestions.curated_suggestion": "스태프의 추천", "follow_suggestions.curated_suggestion": "스태프의 추천",
"follow_suggestions.dismiss": "다시 보지 않기", "follow_suggestions.dismiss": "다시 보지 않기",
"follow_suggestions.featured_longer": "{domain} 팀이 손수 고름",
"follow_suggestions.friends_of_friends_longer": "내가 팔로우 하는 사람들 사이에서 인기",
"follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.", "follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.",
"follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.", "follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.",
"follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.", "follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "이 프로필은 내가 최근에 팔로우 한 프로필들과 유사합니다.", "follow_suggestions.hints.similar_to_recently_followed": "이 프로필은 내가 최근에 팔로우 한 프로필들과 유사합니다.",
"follow_suggestions.personalized_suggestion": "개인화된 추천", "follow_suggestions.personalized_suggestion": "개인화된 추천",
"follow_suggestions.popular_suggestion": "인기있는 추천", "follow_suggestions.popular_suggestion": "인기있는 추천",
"follow_suggestions.popular_suggestion_longer": "{domain}에서 인기",
"follow_suggestions.similar_to_recently_followed_longer": "내가 최근에 팔로우 한 프로필들과 유사",
"follow_suggestions.view_all": "모두 보기", "follow_suggestions.view_all": "모두 보기",
"follow_suggestions.who_to_follow": "팔로우할 만한 사람", "follow_suggestions.who_to_follow": "팔로우할 만한 사람",
"followed_tags": "팔로우 중인 해시태그", "followed_tags": "팔로우 중인 해시태그",
@ -469,6 +473,15 @@
"notification.follow": "{name} 님이 나를 팔로우했습니다", "notification.follow": "{name} 님이 나를 팔로우했습니다",
"notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
"notification.mention": "{name} 님의 멘션", "notification.mention": "{name} 님의 멘션",
"notification.moderation-warning.learn_more": "더 알아보기",
"notification.moderation_warning": "중재 경고를 받았습니다",
"notification.moderation_warning.action_delete_statuses": "게시물 몇 개가 삭제되었습니다.",
"notification.moderation_warning.action_disable": "계정이 비활성화되었습니다.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "게시물 몇 개가 민감함 처리되었습니다.",
"notification.moderation_warning.action_none": "계정에 중재 경고를 받았습니다.",
"notification.moderation_warning.action_sensitive": "앞으로의 게시물을 민감한 것으로 표시됩니다.",
"notification.moderation_warning.action_silence": "계정이 제한되었습니다.",
"notification.moderation_warning.action_suspend": "계정이 정지되었습니다.",
"notification.own_poll": "설문을 마침", "notification.own_poll": "설문을 마침",
"notification.poll": "참여한 설문이 종료됨", "notification.poll": "참여한 설문이 종료됨",
"notification.reblog": "{name} 님이 부스트했습니다", "notification.reblog": "{name} 님이 부스트했습니다",

View file

@ -295,6 +295,7 @@
"follow_requests.unlocked_explanation": "Aunke tu kuento no esta serrado, la taifa de {domain} kreye ke talvez keres revizar manualmente las solisitudes de segimento de estos kuentos.", "follow_requests.unlocked_explanation": "Aunke tu kuento no esta serrado, la taifa de {domain} kreye ke talvez keres revizar manualmente las solisitudes de segimento de estos kuentos.",
"follow_suggestions.curated_suggestion": "Seleksyon de la taifa", "follow_suggestions.curated_suggestion": "Seleksyon de la taifa",
"follow_suggestions.dismiss": "No amostra mas", "follow_suggestions.dismiss": "No amostra mas",
"follow_suggestions.friends_of_friends_longer": "Popular entre personas a las kualas siges",
"follow_suggestions.hints.featured": "Este profil tiene sido eskojido por la taifa de {domain}.", "follow_suggestions.hints.featured": "Este profil tiene sido eskojido por la taifa de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este profil es popular entre las personas ke siges.", "follow_suggestions.hints.friends_of_friends": "Este profil es popular entre las personas ke siges.",
"follow_suggestions.hints.most_followed": "Este profil es uno de los mas segidos en {domain}.", "follow_suggestions.hints.most_followed": "Este profil es uno de los mas segidos en {domain}.",
@ -454,6 +455,9 @@
"notification.follow": "{name} te ampeso a segir", "notification.follow": "{name} te ampeso a segir",
"notification.follow_request": "{name} tiene solisitado segirte", "notification.follow_request": "{name} tiene solisitado segirte",
"notification.mention": "{name} te enmento", "notification.mention": "{name} te enmento",
"notification.moderation-warning.learn_more": "Ambezate mas",
"notification.moderation_warning.action_silence": "Tu kuento tiene sido limitado.",
"notification.moderation_warning.action_suspend": "Tu kuento tiene sido suspendido.",
"notification.own_poll": "Tu anketa eskapo", "notification.own_poll": "Tu anketa eskapo",
"notification.poll": "Anketa en ke votates eskapo", "notification.poll": "Anketa en ke votates eskapo",
"notification.reblog": "{name} repartajo tu publikasyon", "notification.reblog": "{name} repartajo tu publikasyon",

View file

@ -282,6 +282,7 @@
"filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.", "filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.",
"filter_modal.select_filter.title": "Filtruoti šį įrašą", "filter_modal.select_filter.title": "Filtruoti šį įrašą",
"filter_modal.title.status": "Filtruoti įrašą", "filter_modal.title.status": "Filtruoti įrašą",
"filtered_notifications_banner.mentions": "{count, plural, one {paminėjimas} few {paminėjimai} many {paminėjimo} other {paminėjimų}}",
"firehose.all": "Visi", "firehose.all": "Visi",
"firehose.local": "Šis serveris", "firehose.local": "Šis serveris",
"firehose.remote": "Kiti serveriai", "firehose.remote": "Kiti serveriai",
@ -290,6 +291,8 @@
"follow_requests.unlocked_explanation": "Nors tavo paskyra neužrakinta, {domain} personalas mano, kad galbūt norėsi rankiniu būdu patikrinti šių paskyrų sekimo prašymus.", "follow_requests.unlocked_explanation": "Nors tavo paskyra neužrakinta, {domain} personalas mano, kad galbūt norėsi rankiniu būdu patikrinti šių paskyrų sekimo prašymus.",
"follow_suggestions.curated_suggestion": "Personalo pasirinkimai", "follow_suggestions.curated_suggestion": "Personalo pasirinkimai",
"follow_suggestions.dismiss": "Daugiau nerodyti", "follow_suggestions.dismiss": "Daugiau nerodyti",
"follow_suggestions.featured_longer": "Rankomis atrinkta {domain} komanda",
"follow_suggestions.friends_of_friends_longer": "Populiarus tarp žmonių, kurių seki",
"follow_suggestions.hints.featured": "Šį profilį atrinko {domain} komanda.", "follow_suggestions.hints.featured": "Šį profilį atrinko {domain} komanda.",
"follow_suggestions.hints.friends_of_friends": "Šis profilis yra populiarus tarp žmonių, kuriuos seki.", "follow_suggestions.hints.friends_of_friends": "Šis profilis yra populiarus tarp žmonių, kuriuos seki.",
"follow_suggestions.hints.most_followed": "Šis profilis yra vienas iš labiausiai sekamų {domain}.", "follow_suggestions.hints.most_followed": "Šis profilis yra vienas iš labiausiai sekamų {domain}.",
@ -297,6 +300,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Šis profilis panašus į profilius, kuriuos neseniai sekei.", "follow_suggestions.hints.similar_to_recently_followed": "Šis profilis panašus į profilius, kuriuos neseniai sekei.",
"follow_suggestions.personalized_suggestion": "Suasmenintas pasiūlymas", "follow_suggestions.personalized_suggestion": "Suasmenintas pasiūlymas",
"follow_suggestions.popular_suggestion": "Populiarus pasiūlymas", "follow_suggestions.popular_suggestion": "Populiarus pasiūlymas",
"follow_suggestions.popular_suggestion_longer": "Populiarus domene {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Panašūs į profilius, kuriuos neseniai seki",
"follow_suggestions.view_all": "Peržiūrėti viską", "follow_suggestions.view_all": "Peržiūrėti viską",
"follow_suggestions.who_to_follow": "Ką sekti", "follow_suggestions.who_to_follow": "Ką sekti",
"followed_tags": "Sekami saitažodžiai", "followed_tags": "Sekami saitažodžiai",
@ -442,6 +447,15 @@
"notification.follow": "{name} seka tave", "notification.follow": "{name} seka tave",
"notification.follow_request": "{name} paprašė tave sekti", "notification.follow_request": "{name} paprašė tave sekti",
"notification.mention": "{name} paminėjo tave", "notification.mention": "{name} paminėjo tave",
"notification.moderation-warning.learn_more": "Sužinoti daugiau",
"notification.moderation_warning": "Gavai prižiūrėjimo įspėjimą",
"notification.moderation_warning.action_delete_statuses": "Kai kurie tavo įrašai buvo pašalintos.",
"notification.moderation_warning.action_disable": "Tavo paskyra buvo išjungta.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Kai kurie tavo įrašai buvo pažymėtos kaip jautrios.",
"notification.moderation_warning.action_none": "Tavo paskyra gavo prižiūrėjimo įspėjimą.",
"notification.moderation_warning.action_sensitive": "Nuo šiol tavo įrašai bus pažymėti kaip jautrūs.",
"notification.moderation_warning.action_silence": "Tavo paskyra buvo apribota.",
"notification.moderation_warning.action_suspend": "Tavo paskyra buvo sustabdyta.",
"notification.own_poll": "Tavo apklausa baigėsi", "notification.own_poll": "Tavo apklausa baigėsi",
"notification.poll": "Apklausa, kurioje balsavai, pasibaigė", "notification.poll": "Apklausa, kurioje balsavai, pasibaigė",
"notification.reblog": "{name} pakėlė tavo įrašą", "notification.reblog": "{name} pakėlė tavo įrašą",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Apesar de seu perfil não ser trancado, {domain} exige que você revise a solicitação para te seguir destes perfis manualmente.", "follow_requests.unlocked_explanation": "Apesar de seu perfil não ser trancado, {domain} exige que você revise a solicitação para te seguir destes perfis manualmente.",
"follow_suggestions.curated_suggestion": "Escolha da equipe", "follow_suggestions.curated_suggestion": "Escolha da equipe",
"follow_suggestions.dismiss": "Não mostrar novamente", "follow_suggestions.dismiss": "Não mostrar novamente",
"follow_suggestions.featured_longer": "Escolhido à mão pela equipe de {domain}",
"follow_suggestions.friends_of_friends_longer": "Popular entre as pessoas que você segue",
"follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipe {domain}.", "follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipe {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que você segue.", "follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que você segue.",
"follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos em {domain}.", "follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos em {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que você seguiu recentemente.", "follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que você seguiu recentemente.",
"follow_suggestions.personalized_suggestion": "Sugestão personalizada", "follow_suggestions.personalized_suggestion": "Sugestão personalizada",
"follow_suggestions.popular_suggestion": "Sugestão popular", "follow_suggestions.popular_suggestion": "Sugestão popular",
"follow_suggestions.popular_suggestion_longer": "Popular em {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similar a perfis que você seguiu recentemente",
"follow_suggestions.view_all": "Visualizar tudo", "follow_suggestions.view_all": "Visualizar tudo",
"follow_suggestions.who_to_follow": "Quem seguir", "follow_suggestions.who_to_follow": "Quem seguir",
"followed_tags": "Hashtags seguidas", "followed_tags": "Hashtags seguidas",
@ -469,6 +473,15 @@
"notification.follow": "{name} te seguiu", "notification.follow": "{name} te seguiu",
"notification.follow_request": "{name} quer te seguir", "notification.follow_request": "{name} quer te seguir",
"notification.mention": "{name} te mencionou", "notification.mention": "{name} te mencionou",
"notification.moderation-warning.learn_more": "Aprender mais",
"notification.moderation_warning": "Você recebeu um aviso de moderação",
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
"notification.moderation_warning.action_disable": "Sua conta foi desativada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas de suas publicações foram marcadas por ter conteúdo sensível.",
"notification.moderation_warning.action_none": "Sua conta recebeu um aviso de moderação.",
"notification.moderation_warning.action_sensitive": "Suas publicações serão marcadas como sensíveis a partir de agora.",
"notification.moderation_warning.action_silence": "Sua conta foi limitada.",
"notification.moderation_warning.action_suspend": "Sua conta foi suspensa.",
"notification.own_poll": "Sua enquete terminou", "notification.own_poll": "Sua enquete terminou",
"notification.poll": "Uma enquete que você votou terminou", "notification.poll": "Uma enquete que você votou terminou",
"notification.reblog": "{name} deu boost no teu toot", "notification.reblog": "{name} deu boost no teu toot",

View file

@ -246,6 +246,7 @@
"empty_column.list": "Tento zoznam je zatiaľ prázdny. Keď ale členovia tohoto zoznamu uverejnia nové príspevky, objavia sa tu.", "empty_column.list": "Tento zoznam je zatiaľ prázdny. Keď ale členovia tohoto zoznamu uverejnia nové príspevky, objavia sa tu.",
"empty_column.lists": "Zatiaľ nemáte žiadne zoznamy. Keď nejaký vytvoríte, zobrazí sa tu.", "empty_column.lists": "Zatiaľ nemáte žiadne zoznamy. Keď nejaký vytvoríte, zobrazí sa tu.",
"empty_column.mutes": "Zatiaľ ste si nikoho nestíšili.", "empty_column.mutes": "Zatiaľ ste si nikoho nestíšili.",
"empty_column.notification_requests": "Všetko čisté! Nič tu nieje. Keď dostaneš nové oboznámenia, zobrazia sa tu podľa tvojich nastavení.",
"empty_column.notifications": "Zatiaľ nemáte žiadne upozornenia. Začnú vám pribúdať, keď s vami začnú interagovať ostatní.", "empty_column.notifications": "Zatiaľ nemáte žiadne upozornenia. Začnú vám pribúdať, keď s vami začnú interagovať ostatní.",
"empty_column.public": "Zatiaľ tu nič nie je. Napíšte niečo verejné alebo začnite sledovať účty z iných serverov, aby tu niečo pribudlo.", "empty_column.public": "Zatiaľ tu nič nie je. Napíšte niečo verejné alebo začnite sledovať účty z iných serverov, aby tu niečo pribudlo.",
"error.unexpected_crash.explanation": "Pre chybu v našom kóde alebo problém s kompatibilitou prehliadača nebolo túto stránku možné zobraziť správne.", "error.unexpected_crash.explanation": "Pre chybu v našom kóde alebo problém s kompatibilitou prehliadača nebolo túto stránku možné zobraziť správne.",
@ -293,6 +294,7 @@
"follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilom, ktoré ste nedávno začali sledovať.", "follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilom, ktoré ste nedávno začali sledovať.",
"follow_suggestions.personalized_suggestion": "Prispôsobený návrh", "follow_suggestions.personalized_suggestion": "Prispôsobený návrh",
"follow_suggestions.popular_suggestion": "Obľúbený návrh", "follow_suggestions.popular_suggestion": "Obľúbený návrh",
"follow_suggestions.popular_suggestion_longer": "Populárne na {domain}",
"follow_suggestions.view_all": "Zobraziť všetky", "follow_suggestions.view_all": "Zobraziť všetky",
"follow_suggestions.who_to_follow": "Koho sledovať", "follow_suggestions.who_to_follow": "Koho sledovať",
"followed_tags": "Sledované hashtagy", "followed_tags": "Sledované hashtagy",
@ -442,9 +444,11 @@
"notification.follow": "{name} vás sleduje", "notification.follow": "{name} vás sleduje",
"notification.follow_request": "{name} vás žiada sledovať", "notification.follow_request": "{name} vás žiada sledovať",
"notification.mention": "{name} vás spomína", "notification.mention": "{name} vás spomína",
"notification.moderation-warning.learn_more": "Zisti viac",
"notification.own_poll": "Vaša anketa sa skončila", "notification.own_poll": "Vaša anketa sa skončila",
"notification.poll": "Anketa, v ktorej ste hlasovali, sa skončila", "notification.poll": "Anketa, v ktorej ste hlasovali, sa skončila",
"notification.reblog": "{name} zdieľa váš príspevok", "notification.reblog": "{name} zdieľa váš príspevok",
"notification.relationships_severance_event": "Stratené prepojenia s {name}",
"notification.relationships_severance_event.learn_more": "Zisti viac", "notification.relationships_severance_event.learn_more": "Zisti viac",
"notification.status": "{name} uverejňuje niečo nové", "notification.status": "{name} uverejňuje niečo nové",
"notification.update": "{name} upravuje príspevok", "notification.update": "{name} upravuje príspevok",
@ -487,6 +491,7 @@
"notifications.policy.filter_new_accounts_title": "Nové účty", "notifications.policy.filter_new_accounts_title": "Nové účty",
"notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú", "notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú",
"notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ", "notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ",
"notifications.policy.filter_private_mentions_title": "Nevyžiadané priame spomenutia",
"notifications.policy.title": "Filtrovať oznámenia od…", "notifications.policy.title": "Filtrovať oznámenia od…",
"notifications_permission_banner.enable": "Povoliť upozornenia na ploche", "notifications_permission_banner.enable": "Povoliť upozornenia na ploche",
"notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Iako vaš nalog nije zaključan, osoblje {domain} smatra da biste možda želeli da ručno pregledate zahteve za praćenje sa ovih naloga.", "follow_requests.unlocked_explanation": "Iako vaš nalog nije zaključan, osoblje {domain} smatra da biste možda želeli da ručno pregledate zahteve za praćenje sa ovih naloga.",
"follow_suggestions.curated_suggestion": "Izbor osoblja", "follow_suggestions.curated_suggestion": "Izbor osoblja",
"follow_suggestions.dismiss": "Ne prikazuj ponovo", "follow_suggestions.dismiss": "Ne prikazuj ponovo",
"follow_suggestions.featured_longer": "Ručno odabrao tim {domain}",
"follow_suggestions.friends_of_friends_longer": "Popularno među ljudima koje pratite",
"follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.", "follow_suggestions.hints.featured": "Ovaj profil je ručno izabrao tim {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.", "follow_suggestions.hints.friends_of_friends": "Ovaj profil je popularan među ljudima koje pratite.",
"follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.", "follow_suggestions.hints.most_followed": "Ovaj profil je jedan od najpraćenijih na {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.", "follow_suggestions.hints.similar_to_recently_followed": "Ovaj profil je sličan profilima koje ste nedavno zapratili.",
"follow_suggestions.personalized_suggestion": "Personalizovani predlog", "follow_suggestions.personalized_suggestion": "Personalizovani predlog",
"follow_suggestions.popular_suggestion": "Popularni predlog", "follow_suggestions.popular_suggestion": "Popularni predlog",
"follow_suggestions.popular_suggestion_longer": "Popularno na {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Slično profilima koje ste nedavno zapratili",
"follow_suggestions.view_all": "Prikaži sve", "follow_suggestions.view_all": "Prikaži sve",
"follow_suggestions.who_to_follow": "Koga pratiti", "follow_suggestions.who_to_follow": "Koga pratiti",
"followed_tags": "Praćene heš oznake", "followed_tags": "Praćene heš oznake",
@ -469,6 +473,15 @@
"notification.follow": "{name} vas je zapratio", "notification.follow": "{name} vas je zapratio",
"notification.follow_request": "{name} je zatražio da vas prati", "notification.follow_request": "{name} je zatražio da vas prati",
"notification.mention": "{name} vas je pomenuo", "notification.mention": "{name} vas je pomenuo",
"notification.moderation-warning.learn_more": "Saznajte više",
"notification.moderation_warning": "Dobili ste moderatorsko upozorenje",
"notification.moderation_warning.action_delete_statuses": "Neke od vaših objava su uklonjene.",
"notification.moderation_warning.action_disable": "Vaš nalog je onemogućen.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Neke od vaših objava su obeležene kao osetljive.",
"notification.moderation_warning.action_none": "Vaš nalog je dobio moderatorsko upozorenje.",
"notification.moderation_warning.action_sensitive": "Vaše objave će ubuduće biti označene kao osetljive.",
"notification.moderation_warning.action_silence": "Vaš nalog je ograničen.",
"notification.moderation_warning.action_suspend": "Vaš nalog je suspendovan.",
"notification.own_poll": "Vaša anketa je završena", "notification.own_poll": "Vaša anketa je završena",
"notification.poll": "Završena je anketa u kojoj ste glasali", "notification.poll": "Završena je anketa u kojoj ste glasali",
"notification.reblog": "{name} je podržao vašu objavu", "notification.reblog": "{name} je podržao vašu objavu",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} сматра да бисте можда желели да ручно прегледате захтеве за праћење са ових налога.", "follow_requests.unlocked_explanation": "Иако ваш налог није закључан, особље {domain} сматра да бисте можда желели да ручно прегледате захтеве за праћење са ових налога.",
"follow_suggestions.curated_suggestion": "Избор особља", "follow_suggestions.curated_suggestion": "Избор особља",
"follow_suggestions.dismiss": "Не приказуј поново", "follow_suggestions.dismiss": "Не приказуј поново",
"follow_suggestions.featured_longer": "Ручно одабрао тим {domain}",
"follow_suggestions.friends_of_friends_longer": "Популарно међу људима које пратите",
"follow_suggestions.hints.featured": "Овај профил је ручно изабрао тим {domain}.", "follow_suggestions.hints.featured": "Овај профил је ручно изабрао тим {domain}.",
"follow_suggestions.hints.friends_of_friends": "Овај профил је популаран међу људима које пратите.", "follow_suggestions.hints.friends_of_friends": "Овај профил је популаран међу људима које пратите.",
"follow_suggestions.hints.most_followed": "Овај профил је један од најпраћенијих на {domain}.", "follow_suggestions.hints.most_followed": "Овај профил је један од најпраћенијих на {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Овај профил је сличан профилима које сте недавно запратили.", "follow_suggestions.hints.similar_to_recently_followed": "Овај профил је сличан профилима које сте недавно запратили.",
"follow_suggestions.personalized_suggestion": "Персонализовани предлог", "follow_suggestions.personalized_suggestion": "Персонализовани предлог",
"follow_suggestions.popular_suggestion": "Популарни предлог", "follow_suggestions.popular_suggestion": "Популарни предлог",
"follow_suggestions.popular_suggestion_longer": "Популарно на {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Слично профилима које сте недавно запратили",
"follow_suggestions.view_all": "Прикажи све", "follow_suggestions.view_all": "Прикажи све",
"follow_suggestions.who_to_follow": "Кога пратити", "follow_suggestions.who_to_follow": "Кога пратити",
"followed_tags": "Праћене хеш ознаке", "followed_tags": "Праћене хеш ознаке",
@ -469,6 +473,15 @@
"notification.follow": "{name} вас је запратио", "notification.follow": "{name} вас је запратио",
"notification.follow_request": "{name} је затражио да вас прати", "notification.follow_request": "{name} је затражио да вас прати",
"notification.mention": "{name} вас је поменуо", "notification.mention": "{name} вас је поменуо",
"notification.moderation-warning.learn_more": "Сазнајте више",
"notification.moderation_warning": "Добили сте модераторско упозорење",
"notification.moderation_warning.action_delete_statuses": "Неке од ваших објава су уклоњене.",
"notification.moderation_warning.action_disable": "Ваш налог је онемогућен.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Неке од ваших објава су обележене као осетљиве.",
"notification.moderation_warning.action_none": "Ваш налог је добио модераторско упозорење.",
"notification.moderation_warning.action_sensitive": "Ваше објаве ће убудуће бити означене као осетљиве.",
"notification.moderation_warning.action_silence": "Ваш налог је ограничен.",
"notification.moderation_warning.action_suspend": "Ваш налог је суспендован.",
"notification.own_poll": "Ваша анкета је завршена", "notification.own_poll": "Ваша анкета је завршена",
"notification.poll": "Завршена је анкета у којој сте гласали", "notification.poll": "Завршена је анкета у којој сте гласали",
"notification.reblog": "{name} је подржао вашу објаву", "notification.reblog": "{name} је подржао вашу објаву",

View file

@ -297,6 +297,7 @@
"filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny", "filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny",
"filter_modal.select_filter.title": "Filtrera detta inlägg", "filter_modal.select_filter.title": "Filtrera detta inlägg",
"filter_modal.title.status": "Filtrera ett inlägg", "filter_modal.title.status": "Filtrera ett inlägg",
"filtered_notifications_banner.mentions": "{count, plural, one {omnämning} other {omnämnanden}}",
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner", "filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
"filtered_notifications_banner.title": "Filtrerade aviseringar", "filtered_notifications_banner.title": "Filtrerade aviseringar",
"firehose.all": "Allt", "firehose.all": "Allt",
@ -307,6 +308,8 @@
"follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain}-personalen att du kanske vill granska dessa följares förfrågningar manuellt.", "follow_requests.unlocked_explanation": "Även om ditt konto inte är låst tror {domain}-personalen att du kanske vill granska dessa följares förfrågningar manuellt.",
"follow_suggestions.curated_suggestion": "Utvald av personalen", "follow_suggestions.curated_suggestion": "Utvald av personalen",
"follow_suggestions.dismiss": "Visa inte igen", "follow_suggestions.dismiss": "Visa inte igen",
"follow_suggestions.featured_longer": "Handplockad av {domain}-teamet",
"follow_suggestions.friends_of_friends_longer": "Populärt bland personer du följer",
"follow_suggestions.hints.featured": "Denna profil är handplockad av {domain}-teamet.", "follow_suggestions.hints.featured": "Denna profil är handplockad av {domain}-teamet.",
"follow_suggestions.hints.friends_of_friends": "Denna profil är populär bland de personer du följer.", "follow_suggestions.hints.friends_of_friends": "Denna profil är populär bland de personer du följer.",
"follow_suggestions.hints.most_followed": "Denna profil är en av de mest följda på {domain}.", "follow_suggestions.hints.most_followed": "Denna profil är en av de mest följda på {domain}.",
@ -314,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Denna profil liknar de profiler som du nyligen har följt.", "follow_suggestions.hints.similar_to_recently_followed": "Denna profil liknar de profiler som du nyligen har följt.",
"follow_suggestions.personalized_suggestion": "Personligt förslag", "follow_suggestions.personalized_suggestion": "Personligt förslag",
"follow_suggestions.popular_suggestion": "Populärt förslag", "follow_suggestions.popular_suggestion": "Populärt förslag",
"follow_suggestions.popular_suggestion_longer": "Populärt på {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Liknar profiler du nyligen följde",
"follow_suggestions.view_all": "Visa alla", "follow_suggestions.view_all": "Visa alla",
"follow_suggestions.who_to_follow": "Rekommenderade profiler", "follow_suggestions.who_to_follow": "Rekommenderade profiler",
"followed_tags": "Följda hashtags", "followed_tags": "Följda hashtags",
@ -469,10 +474,14 @@
"notification.follow_request": "{name} har begärt att följa dig", "notification.follow_request": "{name} har begärt att följa dig",
"notification.mention": "{name} nämnde dig", "notification.mention": "{name} nämnde dig",
"notification.moderation-warning.learn_more": "Läs mer", "notification.moderation-warning.learn_more": "Läs mer",
"notification.moderation_warning": "Du har mottagit en modereringsvarning",
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.", "notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
"notification.moderation_warning.action_disable": "Ditt konto har inaktiverats.", "notification.moderation_warning.action_disable": "Ditt konto har inaktiverats.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Några av dina inlägg har markerats som känsliga.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Några av dina inlägg har markerats som känsliga.",
"notification.moderation_warning.action_none": "Ditt konto har mottagit en modereringsvarning.",
"notification.moderation_warning.action_sensitive": "Dina inlägg kommer markeras som känsliga från och med nu.",
"notification.moderation_warning.action_silence": "Ditt konto har begränsats.", "notification.moderation_warning.action_silence": "Ditt konto har begränsats.",
"notification.moderation_warning.action_suspend": "Ditt konto har stängts av.",
"notification.own_poll": "Din röstning har avslutats", "notification.own_poll": "Din röstning har avslutats",
"notification.poll": "En omröstning du röstat i har avslutats", "notification.poll": "En omröstning du röstat i har avslutats",
"notification.reblog": "{name} boostade ditt inlägg", "notification.reblog": "{name} boostade ditt inlägg",

View file

@ -308,13 +308,17 @@
"follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง", "follow_requests.unlocked_explanation": "แม้ว่าไม่มีการล็อคบัญชีของคุณ พนักงานของ {domain} คิดว่าคุณอาจต้องการตรวจทานคำขอติดตามจากบัญชีเหล่านี้ด้วยตนเอง",
"follow_suggestions.curated_suggestion": "คัดสรรโดยพนักงาน", "follow_suggestions.curated_suggestion": "คัดสรรโดยพนักงาน",
"follow_suggestions.dismiss": "ไม่ต้องแสดงอีก", "follow_suggestions.dismiss": "ไม่ต้องแสดงอีก",
"follow_suggestions.featured_longer": "คัดสรรโดยทีม {domain}",
"follow_suggestions.friends_of_friends_longer": "เป็นที่นิยมในหมู่ผู้คนที่คุณติดตาม",
"follow_suggestions.hints.featured": "โปรไฟล์นี้ได้รับการคัดสรรโดยทีม {domain}", "follow_suggestions.hints.featured": "โปรไฟล์นี้ได้รับการคัดสรรโดยทีม {domain}",
"follow_suggestions.hints.friends_of_friends": "โปรไฟล์นี้ได้รับความนิยมในหมู่ผู้คนที่คุณติดตาม", "follow_suggestions.hints.friends_of_friends": "โปรไฟล์นี้เป็นที่นิยมในหมู่ผู้คนที่คุณติดตาม",
"follow_suggestions.hints.most_followed": "โปรไฟล์นี้เป็นหนึ่งในโปรไฟล์ที่ได้รับการติดตามมากที่สุดใน {domain}", "follow_suggestions.hints.most_followed": "โปรไฟล์นี้เป็นหนึ่งในโปรไฟล์ที่ได้รับการติดตามมากที่สุดใน {domain}",
"follow_suggestions.hints.most_interactions": "โปรไฟล์นี้เพิ่งได้รับความสนใจอย่างมากใน {domain}", "follow_suggestions.hints.most_interactions": "โปรไฟล์นี้เพิ่งได้รับความสนใจอย่างมากใน {domain}",
"follow_suggestions.hints.similar_to_recently_followed": "โปรไฟล์นี้คล้ายกับโปรไฟล์ที่คุณได้ติดตามล่าสุด", "follow_suggestions.hints.similar_to_recently_followed": "โปรไฟล์นี้คล้ายกับโปรไฟล์ที่คุณได้ติดตามล่าสุด",
"follow_suggestions.personalized_suggestion": "ข้อเสนอแนะเฉพาะบุคคล", "follow_suggestions.personalized_suggestion": "ข้อเสนอแนะเฉพาะบุคคล",
"follow_suggestions.popular_suggestion": "ข้อเสนอแนะยอดนิยม", "follow_suggestions.popular_suggestion": "ข้อเสนอแนะยอดนิยม",
"follow_suggestions.popular_suggestion_longer": "เป็นที่นิยมใน {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "คล้ายกับโปรไฟล์ที่คุณได้ติดตามล่าสุด",
"follow_suggestions.view_all": "ดูทั้งหมด", "follow_suggestions.view_all": "ดูทั้งหมด",
"follow_suggestions.who_to_follow": "ติดตามใครดี", "follow_suggestions.who_to_follow": "ติดตามใครดี",
"followed_tags": "แฮชแท็กที่ติดตาม", "followed_tags": "แฮชแท็กที่ติดตาม",
@ -469,6 +473,15 @@
"notification.follow": "{name} ได้ติดตามคุณ", "notification.follow": "{name} ได้ติดตามคุณ",
"notification.follow_request": "{name} ได้ขอติดตามคุณ", "notification.follow_request": "{name} ได้ขอติดตามคุณ",
"notification.mention": "{name} ได้กล่าวถึงคุณ", "notification.mention": "{name} ได้กล่าวถึงคุณ",
"notification.moderation-warning.learn_more": "เรียนรู้เพิ่มเติม",
"notification.moderation_warning": "คุณได้รับคำเตือนการกลั่นกรอง",
"notification.moderation_warning.action_delete_statuses": "เอาโพสต์บางส่วนของคุณออกแล้ว",
"notification.moderation_warning.action_disable": "ปิดใช้งานบัญชีของคุณแล้ว",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "ทำเครื่องหมายโพสต์บางส่วนของคุณว่าละเอียดอ่อนแล้ว",
"notification.moderation_warning.action_none": "บัญชีของคุณได้รับคำเตือนการกลั่นกรอง",
"notification.moderation_warning.action_sensitive": "จะทำเครื่องหมายโพสต์ของคุณว่าละเอียดอ่อนนับจากนี้ไป",
"notification.moderation_warning.action_silence": "จำกัดบัญชีของคุณแล้ว",
"notification.moderation_warning.action_suspend": "ระงับบัญชีของคุณแล้ว",
"notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว", "notification.own_poll": "การสำรวจความคิดเห็นของคุณได้สิ้นสุดแล้ว",
"notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.poll": "การสำรวจความคิดเห็นที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว",
"notification.reblog": "{name} ได้ดันโพสต์ของคุณ", "notification.reblog": "{name} ได้ดันโพสต์ของคุณ",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa da, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.", "follow_requests.unlocked_explanation": "Hesabınız kilitli olmasa da, {domain} personeli bu hesaplardan gelen takip isteklerini gözden geçirmek isteyebileceğinizi düşündü.",
"follow_suggestions.curated_suggestion": "Çalışanların seçtikleri", "follow_suggestions.curated_suggestion": "Çalışanların seçtikleri",
"follow_suggestions.dismiss": "Tekrar gösterme", "follow_suggestions.dismiss": "Tekrar gösterme",
"follow_suggestions.featured_longer": "{domain} takımı tarafından elle seçildi",
"follow_suggestions.friends_of_friends_longer": "Takip ettiğiniz kişiler arasında popüler",
"follow_suggestions.hints.featured": "Bu profil {domain} ekibi tarafından elle seçilmiştir.", "follow_suggestions.hints.featured": "Bu profil {domain} ekibi tarafından elle seçilmiştir.",
"follow_suggestions.hints.friends_of_friends": "Bu profil takip ettiğiniz insanlar arasında popülerdir.", "follow_suggestions.hints.friends_of_friends": "Bu profil takip ettiğiniz insanlar arasında popülerdir.",
"follow_suggestions.hints.most_followed": "Bu, {domain} sunucusunda en fazla izlenen profildir.", "follow_suggestions.hints.most_followed": "Bu, {domain} sunucusunda en fazla izlenen profildir.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Bu profil, son zamanlarda takip ettiğiniz profillere benziyor.", "follow_suggestions.hints.similar_to_recently_followed": "Bu profil, son zamanlarda takip ettiğiniz profillere benziyor.",
"follow_suggestions.personalized_suggestion": "Kişiselleşmiş öneriler", "follow_suggestions.personalized_suggestion": "Kişiselleşmiş öneriler",
"follow_suggestions.popular_suggestion": "Popüler öneriler", "follow_suggestions.popular_suggestion": "Popüler öneriler",
"follow_suggestions.popular_suggestion_longer": "{domain} üzerinde popüler",
"follow_suggestions.similar_to_recently_followed_longer": "Yakın zamanda takip ettiğiniz hesaplara benziyor",
"follow_suggestions.view_all": "Tümünü gör", "follow_suggestions.view_all": "Tümünü gör",
"follow_suggestions.who_to_follow": "Takip edebileceklerin", "follow_suggestions.who_to_follow": "Takip edebileceklerin",
"followed_tags": "Takip edilen etiketler", "followed_tags": "Takip edilen etiketler",
@ -469,6 +473,15 @@
"notification.follow": "{name} seni takip etti", "notification.follow": "{name} seni takip etti",
"notification.follow_request": "{name} size takip isteği gönderdi", "notification.follow_request": "{name} size takip isteği gönderdi",
"notification.mention": "{name} senden bahsetti", "notification.mention": "{name} senden bahsetti",
"notification.moderation-warning.learn_more": "Daha fazlası",
"notification.moderation_warning": "Bir denetim uyarısı aldınız",
"notification.moderation_warning.action_delete_statuses": "Bazı gönderileriniz kaldırıldı.",
"notification.moderation_warning.action_disable": "Hesabınız devre dışı bırakıldı.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Bazı gönderileriniz hassas olarak işaretlendi.",
"notification.moderation_warning.action_none": "Hesabınız bir denetim uyarısı aldı.",
"notification.moderation_warning.action_sensitive": "Gönderileriniz artık hassas olarak işaretlenecek.",
"notification.moderation_warning.action_silence": "Hesabınız sınırlandırıldı.",
"notification.moderation_warning.action_suspend": "Hesabınız askıya alındı.",
"notification.own_poll": "Anketiniz sona erdi", "notification.own_poll": "Anketiniz sona erdi",
"notification.poll": "Oy verdiğiniz bir anket sona erdi", "notification.poll": "Oy verdiğiniz bir anket sona erdi",
"notification.reblog": "{name} gönderini yeniden paylaştı", "notification.reblog": "{name} gönderini yeniden paylaştı",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.", "follow_requests.unlocked_explanation": "Mặc dù tài khoản của bạn đang ở chế độ công khai, quản trị viên của {domain} vẫn tin rằng bạn sẽ muốn xem lại yêu cầu theo dõi từ những người khác.",
"follow_suggestions.curated_suggestion": "Gợi ý từ máy chủ", "follow_suggestions.curated_suggestion": "Gợi ý từ máy chủ",
"follow_suggestions.dismiss": "Không hiện lại", "follow_suggestions.dismiss": "Không hiện lại",
"follow_suggestions.featured_longer": "Tuyển chọn bởi {domain}",
"follow_suggestions.friends_of_friends_longer": "Nổi tiếng với những người mà bạn theo dõi",
"follow_suggestions.hints.featured": "Người này được đội ngũ {domain} đề xuất.", "follow_suggestions.hints.featured": "Người này được đội ngũ {domain} đề xuất.",
"follow_suggestions.hints.friends_of_friends": "Người này nổi tiếng với những người bạn theo dõi.", "follow_suggestions.hints.friends_of_friends": "Người này nổi tiếng với những người bạn theo dõi.",
"follow_suggestions.hints.most_followed": "Người này được theo dõi nhiều nhất trên {domain}.", "follow_suggestions.hints.most_followed": "Người này được theo dõi nhiều nhất trên {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Người này có nét giống những người mà bạn theo dõi gần đây.", "follow_suggestions.hints.similar_to_recently_followed": "Người này có nét giống những người mà bạn theo dõi gần đây.",
"follow_suggestions.personalized_suggestion": "Gợi ý cá nhân hóa", "follow_suggestions.personalized_suggestion": "Gợi ý cá nhân hóa",
"follow_suggestions.popular_suggestion": "Những người nổi tiếng", "follow_suggestions.popular_suggestion": "Những người nổi tiếng",
"follow_suggestions.popular_suggestion_longer": "Nổi tiếng trên {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Tương tự những người mà bạn theo dõi gần đây",
"follow_suggestions.view_all": "Xem tất cả", "follow_suggestions.view_all": "Xem tất cả",
"follow_suggestions.who_to_follow": "Gợi ý theo dõi", "follow_suggestions.who_to_follow": "Gợi ý theo dõi",
"followed_tags": "Hashtag theo dõi", "followed_tags": "Hashtag theo dõi",
@ -469,6 +473,15 @@
"notification.follow": "{name} theo dõi bạn", "notification.follow": "{name} theo dõi bạn",
"notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.follow_request": "{name} yêu cầu theo dõi bạn",
"notification.mention": "{name} nhắc đến bạn", "notification.mention": "{name} nhắc đến bạn",
"notification.moderation-warning.learn_more": "Tìm hiểu",
"notification.moderation_warning": "Bạn đã nhận một cảnh báo kiểm duyệt",
"notification.moderation_warning.action_delete_statuses": "Một vài tút của bạn bị gỡ.",
"notification.moderation_warning.action_disable": "Tài khoản của bạn đã bị vô hiệu hóa.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Vài tút bạn bị đánh dấu nhạy cảm.",
"notification.moderation_warning.action_none": "Bạn đã nhận một cảnh báo kiểm duyệt.",
"notification.moderation_warning.action_sensitive": "Tút của bạn sẽ bị đánh dấu nhạy cảm kể từ bây giờ.",
"notification.moderation_warning.action_silence": "Tài khoản của bạn đã bị hạn chế.",
"notification.moderation_warning.action_suspend": "Tài khoản của bạn đã bị vô hiệu hóa.",
"notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc",
"notification.poll": "Cuộc bình chọn đã kết thúc", "notification.poll": "Cuộc bình chọn đã kết thúc",
"notification.reblog": "{name} đăng lại tút của bạn", "notification.reblog": "{name} đăng lại tút của bạn",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "即使您的帳號未上鎖,{domain} 的工作人員認為您可能會想手動審核來自這些帳號的追蹤請求。", "follow_requests.unlocked_explanation": "即使您的帳號未上鎖,{domain} 的工作人員認為您可能會想手動審核來自這些帳號的追蹤請求。",
"follow_suggestions.curated_suggestion": "編輯精選", "follow_suggestions.curated_suggestion": "編輯精選",
"follow_suggestions.dismiss": "不再顯示", "follow_suggestions.dismiss": "不再顯示",
"follow_suggestions.featured_longer": "{domain} 團隊精選",
"follow_suggestions.friends_of_friends_longer": "受你的追蹤對象歡迎",
"follow_suggestions.hints.featured": "這個人檔案是由 {domain} 團隊精挑細選。", "follow_suggestions.hints.featured": "這個人檔案是由 {domain} 團隊精挑細選。",
"follow_suggestions.hints.friends_of_friends": "這個人檔案在你追蹤的人當中很受歡迎。", "follow_suggestions.hints.friends_of_friends": "這個人檔案在你追蹤的人當中很受歡迎。",
"follow_suggestions.hints.most_followed": "這個人檔案是在 {domain} 上最多追蹤之一。", "follow_suggestions.hints.most_followed": "這個人檔案是在 {domain} 上最多追蹤之一。",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "這個人檔案與你最近追蹤的類似。", "follow_suggestions.hints.similar_to_recently_followed": "這個人檔案與你最近追蹤的類似。",
"follow_suggestions.personalized_suggestion": "個人化推薦", "follow_suggestions.personalized_suggestion": "個人化推薦",
"follow_suggestions.popular_suggestion": "熱門推薦", "follow_suggestions.popular_suggestion": "熱門推薦",
"follow_suggestions.popular_suggestion_longer": "{domain} 熱門",
"follow_suggestions.similar_to_recently_followed_longer": "與你最近追蹤的帳號相似",
"follow_suggestions.view_all": "查看所有", "follow_suggestions.view_all": "查看所有",
"follow_suggestions.who_to_follow": "追蹤對象", "follow_suggestions.who_to_follow": "追蹤對象",
"followed_tags": "已追蹤標籤", "followed_tags": "已追蹤標籤",
@ -469,6 +473,15 @@
"notification.follow": "{name} 開始追蹤你", "notification.follow": "{name} 開始追蹤你",
"notification.follow_request": "{name} 要求追蹤你", "notification.follow_request": "{name} 要求追蹤你",
"notification.mention": "{name} 提及你", "notification.mention": "{name} 提及你",
"notification.moderation-warning.learn_more": "了解更多",
"notification.moderation_warning": "你收到一則審核警告",
"notification.moderation_warning.action_delete_statuses": "你的部份帖文已被刪除。",
"notification.moderation_warning.action_disable": "你的帳號已被停用。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "你某些帖文已被標記為敏感內容。",
"notification.moderation_warning.action_none": "你的帳號收到一則審核警告。",
"notification.moderation_warning.action_sensitive": "從現在起,你的帖文將被標記為敏感內容。",
"notification.moderation_warning.action_silence": "你的帳號已受到限制。",
"notification.moderation_warning.action_suspend": "你的帳號已被停權。",
"notification.own_poll": "你的投票已結束", "notification.own_poll": "你的投票已結束",
"notification.poll": "你參與過的一個投票已經結束", "notification.poll": "你參與過的一個投票已經結束",
"notification.reblog": "{name} 轉推你的文章", "notification.reblog": "{name} 轉推你的文章",

View file

@ -50,6 +50,7 @@ export default function search(state = initialState, action) {
return state.set('hidden', true); return state.set('hidden', true);
case SEARCH_FETCH_REQUEST: case SEARCH_FETCH_REQUEST:
return state.withMutations(map => { return state.withMutations(map => {
map.set('results', ImmutableMap());
map.set('isLoading', true); map.set('isLoading', true);
map.set('submitted', true); map.set('submitted', true);
map.set('type', action.searchType); map.set('type', action.searchType);

View file

@ -5896,7 +5896,7 @@ a.status-card {
user-select: text; user-select: text;
display: flex; display: flex;
@media screen and (max-width: $no-gap-breakpoint) { @media screen and (width <= 630px) {
margin-top: auto; margin-top: auto;
} }
} }
@ -10576,6 +10576,7 @@ noscript {
font-weight: 500; font-weight: 500;
font-size: 11px; font-size: 11px;
line-height: 16px; line-height: 16px;
word-break: keep-all;
&__badge { &__badge {
background: $ui-button-background-color; background: $ui-button-background-color;

View file

@ -75,6 +75,9 @@ class Account < ApplicationRecord
MENTION_RE = %r{(?<![=/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i MENTION_RE = %r{(?<![=/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i
URL_PREFIX_RE = %r{\Ahttp(s?)://[^/]+} URL_PREFIX_RE = %r{\Ahttp(s?)://[^/]+}
USERNAME_ONLY_RE = /\A#{USERNAME_RE}\z/i USERNAME_ONLY_RE = /\A#{USERNAME_RE}\z/i
USERNAME_LENGTH_LIMIT = 30
DISPLAY_NAME_LENGTH_LIMIT = 30
NOTE_LENGTH_LIMIT = 500
include Attachmentable # Load prior to Avatar & Header concerns include Attachmentable # Load prior to Avatar & Header concerns
@ -107,10 +110,10 @@ class Account < ApplicationRecord
validates :uri, presence: true, unless: :local?, on: :create validates :uri, presence: true, unless: :local?, on: :create
# Local user validations # Local user validations
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: USERNAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? } validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? }
validates :note, note_length: { maximum: 500 }, if: -> { local? && will_save_change_to_note? } validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? }
validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? } validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? }
validates :uri, absence: true, if: :local?, on: :create validates :uri, absence: true, if: :local?, on: :create
validates :inbox_url, absence: true, if: :local?, on: :create validates :inbox_url, absence: true, if: :local?, on: :create
@ -143,7 +146,6 @@ class Account < ApplicationRecord
scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) } scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat) }
scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.by_recent_status).references(:account_stat) } scope :by_recent_status, -> { includes(:account_stat).merge(AccountStat.by_recent_status).references(:account_stat) }
scope :by_recent_activity, -> { left_joins(:user, :account_stat).order(coalesced_activity_timestamps.desc).order(id: :desc) } scope :by_recent_activity, -> { left_joins(:user, :account_stat).order(coalesced_activity_timestamps.desc).order(id: :desc) }
scope :popular, -> { order('account_stats.followers_count desc') }
scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) } scope :by_domain_and_subdomains, ->(domain) { where(domain: Instance.by_domain_and_subdomains(domain).select(:domain)) }
scope :not_excluded_by_account, ->(account) { where.not(id: account.excluded_from_timeline_account_ids) } scope :not_excluded_by_account, ->(account) { where.not(id: account.excluded_from_timeline_account_ids) }
scope :not_domain_blocked_by_account, ->(account) { where(arel_table[:domain].eq(nil).or(arel_table[:domain].not_in(account.excluded_from_timeline_domains))) } scope :not_domain_blocked_by_account, ->(account) { where(arel_table[:domain].eq(nil).or(arel_table[:domain].not_in(account.excluded_from_timeline_domains))) }

View file

@ -22,4 +22,10 @@ class ApplicationRecord < ActiveRecord::Base
value value
end end
end end
# Prevent implicit serialization in ActiveModel::Serializer or other code paths.
# This is a hardening step to avoid accidental leaking of attributes.
def as_json
raise NotImplementedError
end
end end

View file

@ -81,7 +81,7 @@ module Account::Associations
has_many :aliases, class_name: 'AccountAlias', dependent: :destroy, inverse_of: :account has_many :aliases, class_name: 'AccountAlias', dependent: :destroy, inverse_of: :account
# Hashtags # Hashtags
has_and_belongs_to_many :tags has_and_belongs_to_many :tags # rubocop:disable Rails/HasAndBelongsToMany
has_many :featured_tags, -> { includes(:tag) }, dependent: :destroy, inverse_of: :account has_many :featured_tags, -> { includes(:tag) }, dependent: :destroy, inverse_of: :account
# Account deletion requests # Account deletion requests

View file

@ -0,0 +1,77 @@
# frozen_string_literal: true
# TODO: This file is here for legacy support during devise-two-factor upgrade.
# It should be removed after all records have been migrated.
module LegacyOtpSecret
extend ActiveSupport::Concern
private
# Decrypt and return the `encrypted_otp_secret` attribute which was used in
# prior versions of devise-two-factor
# @return [String] The decrypted OTP secret
def legacy_otp_secret
return nil unless self[:encrypted_otp_secret]
return nil unless self.class.otp_secret_encryption_key
hmac_iterations = 2000 # a default set by the Encryptor gem
key = self.class.otp_secret_encryption_key
salt = Base64.decode64(encrypted_otp_secret_salt)
iv = Base64.decode64(encrypted_otp_secret_iv)
raw_cipher_text = Base64.decode64(encrypted_otp_secret)
# The last 16 bytes of the ciphertext are the authentication tag - we use
# Galois Counter Mode which is an authenticated encryption mode
cipher_text = raw_cipher_text[0..-17]
auth_tag = raw_cipher_text[-16..-1] # rubocop:disable Style/SlicingWithRange
# this alrorithm lifted from
# https://github.com/attr-encrypted/encryptor/blob/master/lib/encryptor.rb#L54
# create an OpenSSL object which will decrypt the AES cipher with 256 bit
# keys in Galois Counter Mode (GCM). See
# https://ruby.github.io/openssl/OpenSSL/Cipher.html
cipher = OpenSSL::Cipher.new('aes-256-gcm')
# tell the cipher we want to decrypt. Symmetric algorithms use a very
# similar process for encryption and decryption, hence the same object can
# do both.
cipher.decrypt
# Use a Password-Based Key Derivation Function to generate the key actually
# used for encryptoin from the key we got as input.
cipher.key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(key, salt, hmac_iterations, cipher.key_len)
# set the Initialization Vector (IV)
cipher.iv = iv
# The tag must be set after calling Cipher#decrypt, Cipher#key= and
# Cipher#iv=, but before calling Cipher#final. After all decryption is
# performed, the tag is verified automatically in the call to Cipher#final.
#
# If the auth_tag does not verify, then #final will raise OpenSSL::Cipher::CipherError
cipher.auth_tag = auth_tag
# auth_data must be set after auth_tag has been set when decrypting See
# http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html#method-i-auth_data-3D
# we are not adding any authenticated data but OpenSSL docs say this should
# still be called.
cipher.auth_data = ''
# #update is (somewhat confusingly named) the method which actually
# performs the decryption on the given chunk of data. Our OTP secret is
# short so we only need to call it once.
#
# It is very important that we call #final because:
#
# 1. The authentication tag is checked during the call to #final
# 2. Block based cipher modes (e.g. CBC) work on fixed size chunks. We need
# to call #final to get it to process the last chunk properly. The output
# of #final should be appended to the decrypted value. This isn't
# required for streaming cipher modes but including it is a best practice
# so that your code will continue to function correctly even if you later
# change to a block cipher mode.
cipher.update(cipher_text) + cipher.final
end
end

View file

@ -32,6 +32,8 @@ class CustomFilter < ApplicationRecord
explore explore
).freeze ).freeze
EXPIRATION_DURATIONS = [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week, 2.weeks, 1.month, 3.months].freeze
include Expireable include Expireable
include Redisable include Redisable
@ -53,10 +55,9 @@ class CustomFilter < ApplicationRecord
after_commit :invalidate_cache! after_commit :invalidate_cache!
def expires_in def expires_in
return @expires_in if defined?(@expires_in)
return nil if expires_at.nil? return nil if expires_at.nil?
[30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week, 2.weeks, 1.month, 3.months].find { |expires_in| expires_in.from_now >= expires_at } EXPIRATION_DURATIONS.find { |expires_in| expires_in.from_now >= expires_at }
end end
def irreversible=(value) def irreversible=(value)

View file

@ -109,7 +109,7 @@ class Status < ApplicationRecord
has_many :local_emoji_reacted, -> { merge(Account.local) }, through: :emoji_reactions, source: :account has_many :local_emoji_reacted, -> { merge(Account.local) }, through: :emoji_reactions, source: :account
has_many :local_referenced, -> { merge(Account.local) }, through: :referenced_by_statuses, source: :account has_many :local_referenced, -> { merge(Account.local) }, through: :referenced_by_statuses, source: :account
has_and_belongs_to_many :tags has_and_belongs_to_many :tags # rubocop:disable Rails/HasAndBelongsToMany
has_one :preview_cards_status, inverse_of: :status, dependent: :delete has_one :preview_cards_status, inverse_of: :status, dependent: :delete
@ -136,7 +136,9 @@ class Status < ApplicationRecord
scope :remote, -> { where(local: false).where.not(uri: nil) } scope :remote, -> { where(local: false).where.not(uri: nil) }
scope :local, -> { where(local: true).or(where(uri: nil)) } scope :local, -> { where(local: true).or(where(uri: nil)) }
scope :with_accounts, ->(ids) { where(id: ids).includes(:account) } scope :with_accounts, ->(ids) { where(id: ids).includes(:account) }
scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') } scope :without_replies, -> { not_reply.or(reply_to_account) }
scope :not_reply, -> { where(reply: false) }
scope :reply_to_account, -> { where(arel_table[:in_reply_to_account_id].eq arel_table[:account_id]) }
scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) } scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) }
scope :with_public_visibility, -> { where(visibility: [:public, :public_unlisted, :login]) } scope :with_public_visibility, -> { where(visibility: [:public, :public_unlisted, :login]) }
scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: [:public, :public_unlisted]))) } scope :with_public_search_visibility, -> { merge(where(visibility: [:public, :public_unlisted, :login]).or(Status.where(searchability: [:public, :public_unlisted]))) }

View file

@ -21,8 +21,10 @@
class Tag < ApplicationRecord class Tag < ApplicationRecord
include Paginable include Paginable
# rubocop:disable Rails/HasAndBelongsToMany
has_and_belongs_to_many :statuses has_and_belongs_to_many :statuses
has_and_belongs_to_many :accounts has_and_belongs_to_many :accounts
# rubocop:enable Rails/HasAndBelongsToMany
has_many :passive_relationships, class_name: 'TagFollow', inverse_of: :tag, dependent: :destroy has_many :passive_relationships, class_name: 'TagFollow', inverse_of: :tag, dependent: :destroy
has_many :featured_tags, dependent: :destroy, inverse_of: :tag has_many :featured_tags, dependent: :destroy, inverse_of: :tag

View file

@ -39,6 +39,7 @@
# role_id :bigint(8) # role_id :bigint(8)
# settings :text # settings :text
# time_zone :string # time_zone :string
# otp_secret :string
# #
class User < ApplicationRecord class User < ApplicationRecord
@ -75,6 +76,8 @@ class User < ApplicationRecord
devise :two_factor_authenticatable, devise :two_factor_authenticatable,
otp_secret_encryption_key: Rails.configuration.x.otp_secret otp_secret_encryption_key: Rails.configuration.x.otp_secret
include LegacyOtpSecret # Must be after the above `devise` line in order to override the legacy method
devise :two_factor_backupable, devise :two_factor_backupable,
otp_number_of_backup_codes: 10 otp_number_of_backup_codes: 10
@ -134,11 +137,6 @@ class User < ApplicationRecord
normalizes :time_zone, with: ->(time_zone) { ActiveSupport::TimeZone[time_zone].nil? ? nil : time_zone } normalizes :time_zone, with: ->(time_zone) { ActiveSupport::TimeZone[time_zone].nil? ? nil : time_zone }
normalizes :chosen_languages, with: ->(chosen_languages) { chosen_languages.compact_blank.presence } normalizes :chosen_languages, with: ->(chosen_languages) { chosen_languages.compact_blank.presence }
# This avoids a deprecation warning from Rails 5.1
# It seems possible that a future release of devise-two-factor will
# handle this itself, and this can be removed from our User class.
attribute :otp_secret
has_many :session_activations, dependent: :destroy has_many :session_activations, dependent: :destroy
delegate :can?, to: :role delegate :can?, to: :role

View file

@ -0,0 +1,7 @@
.fields-group
= form.input :text,
wrapper: :with_block_label
.fields-group
= form.input :hint,
wrapper: :with_block_label

View file

@ -1,14 +1,10 @@
- content_for :page_title do - content_for :page_title do
= t('admin.rules.edit') = t('admin.rules.edit')
= simple_form_for @rule, url: admin_rule_path(@rule) do |f| = simple_form_for @rule, url: admin_rule_path(@rule) do |form|
= render 'shared/error_messages', object: @rule = render 'shared/error_messages', object: @rule
.fields-group = render form
= f.input :text, wrapper: :with_block_label
.fields-group
= f.input :hint, wrapper: :with_block_label
.actions .actions
= f.button :button, t('generic.save_changes'), type: :submit = form.button :button, t('generic.save_changes'), type: :submit

View file

@ -6,17 +6,13 @@
%hr.spacer/ %hr.spacer/
- if can? :create, :rule - if can? :create, :rule
= simple_form_for @rule, url: admin_rules_path do |f| = simple_form_for @rule, url: admin_rules_path do |form|
= render 'shared/error_messages', object: @rule = render 'shared/error_messages', object: @rule
.fields-group = render form
= f.input :text, wrapper: :with_block_label
.fields-group
= f.input :hint, wrapper: :with_block_label
.actions .actions
= f.button :button, t('admin.rules.add_new'), type: :submit = form.button :button, t('admin.rules.add_new'), type: :submit
%hr.spacer/ %hr.spacer/

View file

@ -0,0 +1,7 @@
.fields-group
= form.input :title,
wrapper: :with_block_label
.fields-group
= form.input :text,
wrapper: :with_block_label

View file

@ -1,14 +1,10 @@
- content_for :page_title do - content_for :page_title do
= t('admin.warning_presets.edit_preset') = t('admin.warning_presets.edit_preset')
= simple_form_for @warning_preset, url: admin_warning_preset_path(@warning_preset) do |f| = simple_form_for @warning_preset, url: admin_warning_preset_path(@warning_preset) do |form|
= render 'shared/error_messages', object: @warning_preset = render 'shared/error_messages', object: @warning_preset
.fields-group = render form
= f.input :title, wrapper: :with_block_label
.fields-group
= f.input :text, wrapper: :with_block_label
.actions .actions
= f.button :button, t('generic.save_changes'), type: :submit = form.button :button, t('generic.save_changes'), type: :submit

View file

@ -2,17 +2,13 @@
= t('admin.warning_presets.title') = t('admin.warning_presets.title')
- if can? :create, :account_warning_preset - if can? :create, :account_warning_preset
= simple_form_for @warning_preset, url: admin_warning_presets_path do |f| = simple_form_for @warning_preset, url: admin_warning_presets_path do |form|
= render 'shared/error_messages', object: @warning_preset = render 'shared/error_messages', object: @warning_preset
.fields-group = render form
= f.input :title, wrapper: :with_block_label
.fields-group
= f.input :text, wrapper: :with_block_label
.actions .actions
= f.button :button, t('admin.warning_presets.add_new'), type: :submit = form.button :button, t('admin.warning_presets.add_new'), type: :submit
%hr.spacer/ %hr.spacer/

View file

@ -2,6 +2,6 @@
= t('admin.webhooks.edit') = t('admin.webhooks.edit')
= simple_form_for @webhook, url: admin_webhook_path(@webhook) do |form| = simple_form_for @webhook, url: admin_webhook_path(@webhook) do |form|
= render partial: 'form', object: form = render form
.actions .actions
= form.button :button, t('generic.save_changes'), type: :submit = form.button :button, t('generic.save_changes'), type: :submit

View file

@ -2,6 +2,6 @@
= t('admin.webhooks.new') = t('admin.webhooks.new')
= simple_form_for @webhook, url: admin_webhooks_path do |form| = simple_form_for @webhook, url: admin_webhooks_path do |form|
= render partial: 'form', object: form = render form
.actions .actions
= form.button :button, t('admin.webhooks.add_new'), type: :submit = form.button :button, t('admin.webhooks.add_new'), type: :submit

View file

@ -6,7 +6,7 @@
wrapper: :with_label wrapper: :with_label
.fields-row__column.fields-row__column-6.fields-group .fields-row__column.fields-row__column-6.fields-group
= f.input :expires_in, = f.input :expires_in,
collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week, 2.weeks, 1.month, 3.months].map(&:to_i), collection: CustomFilter::EXPIRATION_DURATIONS.map(&:to_i),
include_blank: I18n.t('invites.expires_in_prompt'), include_blank: I18n.t('invites.expires_in_prompt'),
label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, label_method: ->(i) { I18n.t("invites.expires_in.#{i}") },
wrapper: :with_label wrapper: :with_label

View file

@ -51,12 +51,8 @@ require_relative '../lib/active_record/database_tasks_extensions'
require_relative '../lib/active_record/batches' require_relative '../lib/active_record/batches'
require_relative '../lib/simple_navigation/item_extensions' require_relative '../lib/simple_navigation/item_extensions'
Dotenv::Rails.load
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true' Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
require_relative '../lib/mastodon/redis_config'
module Mastodon module Mastodon
class Application < Rails::Application class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version. # Initialize configuration defaults for originally generated Rails version.
@ -98,6 +94,10 @@ module Mastodon
app.deprecators[:mastodon] = ActiveSupport::Deprecation.new('4.3', 'mastodon/mastodon') app.deprecators[:mastodon] = ActiveSupport::Deprecation.new('4.3', 'mastodon/mastodon')
end end
config.before_configuration do
require 'mastodon/redis_config'
end
config.to_prepare do config.to_prepare do
Doorkeeper::AuthorizationsController.layout 'modal' Doorkeeper::AuthorizationsController.layout 'modal'
Doorkeeper::AuthorizedApplicationsController.layout 'admin' Doorkeeper::AuthorizedApplicationsController.layout 'admin'

View file

@ -87,8 +87,7 @@ Rails.application.configure do
# Otherwise, use letter_opener, which launches a browser window to view sent mail. # Otherwise, use letter_opener, which launches a browser window to view sent mail.
config.action_mailer.delivery_method = ENV['HEROKU'] || ENV['VAGRANT'] || ENV['REMOTE_DEV'] ? :letter_opener_web : :letter_opener config.action_mailer.delivery_method = ENV['HEROKU'] || ENV['VAGRANT'] || ENV['REMOTE_DEV'] ? :letter_opener_web : :letter_opener
# We provide a default secret for the development environment here. # TODO: Remove once devise-two-factor data migration complete
# This value should not be used in production environments!
config.x.otp_secret = ENV.fetch('OTP_SECRET', '1fc2b87989afa6351912abeebe31ffc5c476ead9bf8b3d74cbc4a302c7b69a45b40b1bbef3506ddad73e942e15ed5ca4b402bf9a66423626051104f4b5f05109') config.x.otp_secret = ENV.fetch('OTP_SECRET', '1fc2b87989afa6351912abeebe31ffc5c476ead9bf8b3d74cbc4a302c7b69a45b40b1bbef3506ddad73e942e15ed5ca4b402bf9a66423626051104f4b5f05109')
# Raise error when a before_action's only/except options reference missing actions # Raise error when a before_action's only/except options reference missing actions

View file

@ -157,6 +157,7 @@ Rails.application.configure do
'Referrer-Policy' => 'same-origin', 'Referrer-Policy' => 'same-origin',
} }
# TODO: Remove once devise-two-factor data migration complete
config.x.otp_secret = ENV.fetch('OTP_SECRET') config.x.otp_secret = ENV.fetch('OTP_SECRET')
# Enable DNS rebinding protection and other `Host` header attacks. # Enable DNS rebinding protection and other `Host` header attacks.

View file

@ -44,6 +44,7 @@ Rails.application.configure do
# Print deprecation notices to the stderr. # Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr config.active_support.deprecation = :stderr
# TODO: Remove once devise-two-factor data migration complete
config.x.otp_secret = '100c7faeef00caa29242f6b04156742bf76065771fd4117990c4282b8748ff3d99f8fdae97c982ab5bd2e6756a159121377cce4421f4a8ecd2d67bd7749a3fb4' config.x.otp_secret = '100c7faeef00caa29242f6b04156742bf76065771fd4117990c4282b8748ff3d99f8fdae97c982ab5bd2e6756a159121377cce4421f4a8ecd2d67bd7749a3fb4'
# Generate random VAPID keys # Generate random VAPID keys

View file

@ -621,6 +621,9 @@ be:
actions_description_html: Вырашыце, якія дзеянні распачаць, каб вырашыць гэтую скаргу. Калі вы прымеце меры пакарання ў дачыненні да ўліковага запісу, пра які паведамляецца, ім будзе адпраўлена апавяшчэнне па электроннай пошце, за выключэннем выпадкаў, калі выбрана катэгорыя <strong>Спам</strong>. actions_description_html: Вырашыце, якія дзеянні распачаць, каб вырашыць гэтую скаргу. Калі вы прымеце меры пакарання ў дачыненні да ўліковага запісу, пра які паведамляецца, ім будзе адпраўлена апавяшчэнне па электроннай пошце, за выключэннем выпадкаў, калі выбрана катэгорыя <strong>Спам</strong>.
actions_description_remote_html: Вырашыце як паступіць з гэтай скаргай. Гэта паўплывае толькі на тое як <strong>ваш</strong> сервер звязваецца з аддалёным уліковым запісам і апрацоўвае яго кантэнт. actions_description_remote_html: Вырашыце як паступіць з гэтай скаргай. Гэта паўплывае толькі на тое як <strong>ваш</strong> сервер звязваецца з аддалёным уліковым запісам і апрацоўвае яго кантэнт.
add_to_report: Дадаць яшчэ дэталяў да скаргі add_to_report: Дадаць яшчэ дэталяў да скаргі
already_suspended_badges:
local: Ужо прыпынена на гэтым сэрвэры
remote: Ужо прыпынена на іх сэрвэры
are_you_sure: Вы ўпэўнены? are_you_sure: Вы ўпэўнены?
assign_to_self: Прызначыць мне assign_to_self: Прызначыць мне
assigned: Прызначаны мадэратар assigned: Прызначаны мадэратар
@ -1708,6 +1711,7 @@ be:
preferences: Налады preferences: Налады
profile: Профіль profile: Профіль
relationships: Падпіскі і падпісчыкі relationships: Падпіскі і падпісчыкі
severed_relationships: Разрыў сувязяў
statuses_cleanup: Аўтавыдаленне допісаў statuses_cleanup: Аўтавыдаленне допісаў
strikes: Папярэджанні мадэратараў strikes: Папярэджанні мадэратараў
two_factor_authentication: Двухфактарная аўтэнтыфікацыя two_factor_authentication: Двухфактарная аўтэнтыфікацыя
@ -1715,10 +1719,13 @@ be:
severed_relationships: severed_relationships:
download: Спампаваць (%{count}) download: Спампаваць (%{count})
event_type: event_type:
account_suspension: Прыпыненне ўліковага запісу (%{target_name})
domain_block: Прыпыненне сервера (%{target_name})
user_domain_block: Вы заблакіравалі %{target_name} user_domain_block: Вы заблакіравалі %{target_name}
lost_followers: Страчаныя падпісчыкі lost_followers: Страчаныя падпісчыкі
lost_follows: Страчаныя падпіскі lost_follows: Страчаныя падпіскі
preamble: Вы можаце страціць падпіскі і падпісчыкаў, калі заблакіруеце дамен або калі вашы мадэратары вырашаць прыпыніць зносіны з серверам. Калі гэта адбудзецца, вы зможаце загрузіць спіс страчаных зносін, каб праверыць іх і, магчыма, імпартаваць на іншы сервер. preamble: Вы можаце страціць падпіскі і падпісчыкаў, калі заблакіруеце дамен або калі вашы мадэратары вырашаць прыпыніць зносіны з серверам. Калі гэта адбудзецца, вы зможаце загрузіць спіс страчаных зносін, каб праверыць іх і, магчыма, імпартаваць на іншы сервер.
purged: Інфармацыя аб гэтым серверы была выдалена адміністратарамі вашага сервера.
type: Падзея type: Падзея
statuses: statuses:
attached: attached:
@ -1825,6 +1832,7 @@ be:
contrast: Mastodon (высокі кантраст) contrast: Mastodon (высокі кантраст)
default: Mastodon (цёмная) default: Mastodon (цёмная)
mastodon-light: Mastodon (светлая) mastodon-light: Mastodon (светлая)
system: Аўтаматычна (выкарыстоўваць сістэмную тэму)
time: time:
formats: formats:
default: "%d.%m.%Y %H:%M" default: "%d.%m.%Y %H:%M"

View file

@ -751,6 +751,7 @@ bg:
desc_html: Това разчита на външни скриптове от hCaptcha, което може да е проблем за сигурността и поверителността. В допълнение <strong>това може да направи процеса на регистриране значимо по-малко достъпно за някои хора (особено с увреждания).</strong>. Заради тези причини, то обмислете алтернативни мерки такива като регистрация на базата на одобрение или на покана. desc_html: Това разчита на външни скриптове от hCaptcha, което може да е проблем за сигурността и поверителността. В допълнение <strong>това може да направи процеса на регистриране значимо по-малко достъпно за някои хора (особено с увреждания).</strong>. Заради тези причини, то обмислете алтернативни мерки такива като регистрация на базата на одобрение или на покана.
title: Изисква се новите потребители да разгадават капчата, за да потвърдят акаунтите си title: Изисква се новите потребители да разгадават капчата, за да потвърдят акаунтите си
content_retention: content_retention:
danger_zone: Опасна зона
preamble: Управление на това как съдържание, породено от потребители, се съхранява в Mastodon. preamble: Управление на това как съдържание, породено от потребители, се съхранява в Mastodon.
title: Задържане на съдържание title: Задържане на съдържание
default_noindex: default_noindex:

View file

@ -245,6 +245,8 @@ br:
title: Diwar-benn title: Diwar-benn
appearance: appearance:
title: Neuz title: Neuz
content_retention:
danger_zone: Takad dañjer
discovery: discovery:
title: Dizoloadur title: Dizoloadur
trends: Luskadoù trends: Luskadoù

View file

@ -751,6 +751,7 @@ ca:
desc_html: Això es basa en scripts externs de hCaptcha, que poden ser un problema de privacitat i seguretat. A més, <strong>això pot fer que el procés de registre sigui significativament menys accesible per algunes (especialment discapacitades) persones</strong>. Per aquestes raons, si us plau considera alternatives com ara registre amb aprovació necessària o basada en invitacions. desc_html: Això es basa en scripts externs de hCaptcha, que poden ser un problema de privacitat i seguretat. A més, <strong>això pot fer que el procés de registre sigui significativament menys accesible per algunes (especialment discapacitades) persones</strong>. Per aquestes raons, si us plau considera alternatives com ara registre amb aprovació necessària o basada en invitacions.
title: Demana als nous usuaris que resolguin un CAPTCHA per a confirmar el seu compte title: Demana als nous usuaris que resolguin un CAPTCHA per a confirmar el seu compte
content_retention: content_retention:
danger_zone: Zona de perill
preamble: Controla com es desa a Mastodon el contingut generat per l'usuari. preamble: Controla com es desa a Mastodon el contingut generat per l'usuari.
title: Retenció de contingut title: Retenció de contingut
default_noindex: default_noindex:

View file

@ -779,6 +779,7 @@ cs:
desc_html: Toto spoléhá na externí skripty z hCaptcha, což může být budit obavy o bezpečnost a soukromí. Navíc <strong>to může způsobit, že proces registrace bude pro některé osoby (zejména se zdravotním postižením) hůře přístupný</strong>. Z těchto důvodů zvažte alternativní přístup, jako je schvalování registrace nebo pozvánky. desc_html: Toto spoléhá na externí skripty z hCaptcha, což může být budit obavy o bezpečnost a soukromí. Navíc <strong>to může způsobit, že proces registrace bude pro některé osoby (zejména se zdravotním postižením) hůře přístupný</strong>. Z těchto důvodů zvažte alternativní přístup, jako je schvalování registrace nebo pozvánky.
title: Vyžadovat po nových uživatelích, aby vyřešili CAPTCHU pro potvrzení jejich účtu title: Vyžadovat po nových uživatelích, aby vyřešili CAPTCHU pro potvrzení jejich účtu
content_retention: content_retention:
danger_zone: Nebezpečná zóna
preamble: Určuje, jak je obsah generovaný uživatelem uložen v Mastodonu. preamble: Určuje, jak je obsah generovaný uživatelem uložen v Mastodonu.
title: Uchovávání obsahu title: Uchovávání obsahu
default_noindex: default_noindex:

View file

@ -645,6 +645,9 @@ cy:
actions_description_html: Penderfynwch pa gamau i'w cymryd i ddatrys yr adroddiad hwn. Os byddwch yn cymryd camau cosbol yn erbyn y cyfrif a adroddwyd, bydd hysbysiad e-bost yn cael ei anfon atyn nhw, ac eithrio pan fydd y categori <strong>Sbam</strong> yn cael ei ddewis. actions_description_html: Penderfynwch pa gamau i'w cymryd i ddatrys yr adroddiad hwn. Os byddwch yn cymryd camau cosbol yn erbyn y cyfrif a adroddwyd, bydd hysbysiad e-bost yn cael ei anfon atyn nhw, ac eithrio pan fydd y categori <strong>Sbam</strong> yn cael ei ddewis.
actions_description_remote_html: Penderfynwch pa gamau i'w cymryd i ddatrys yr adroddiad hwn. Bydd hyn ond yn effeithio ar sut <strong>mae'ch</strong> gweinydd yn cyfathrebu â'r cyfrif hwn o bell ac yn trin ei gynnwys. actions_description_remote_html: Penderfynwch pa gamau i'w cymryd i ddatrys yr adroddiad hwn. Bydd hyn ond yn effeithio ar sut <strong>mae'ch</strong> gweinydd yn cyfathrebu â'r cyfrif hwn o bell ac yn trin ei gynnwys.
add_to_report: Ychwanegu rhagor i adroddiad add_to_report: Ychwanegu rhagor i adroddiad
already_suspended_badges:
local: Wedi atal dros dro ar y gweinydd hwn yn barod
remote: Wedi'i atal eisoes ar eu gweinydd
are_you_sure: Ydych chi'n siŵr? are_you_sure: Ydych chi'n siŵr?
assign_to_self: Neilltuo i mi assign_to_self: Neilltuo i mi
assigned: Cymedrolwr wedi'i neilltuo assigned: Cymedrolwr wedi'i neilltuo
@ -804,6 +807,7 @@ cy:
desc_html: Mae hyn yn dibynnu ar sgriptiau allanol gan hCaptcha, a all fod yn bryder diogelwch a phreifatrwydd. Yn ogystal, <strong>gall hyn wneud y broses gofrestru yn llawer llai hygyrch i rai pobl (yn enwedig yr anabl)</strong>. Am y rhesymau hyn, ystyriwch fesurau eraill fel cofrestru ar sail cymeradwyaeth neu ar sail gwahoddiad. desc_html: Mae hyn yn dibynnu ar sgriptiau allanol gan hCaptcha, a all fod yn bryder diogelwch a phreifatrwydd. Yn ogystal, <strong>gall hyn wneud y broses gofrestru yn llawer llai hygyrch i rai pobl (yn enwedig yr anabl)</strong>. Am y rhesymau hyn, ystyriwch fesurau eraill fel cofrestru ar sail cymeradwyaeth neu ar sail gwahoddiad.
title: Ei gwneud yn ofynnol i ddefnyddwyr newydd ddatrys CAPTCHA i gadarnhau eu cyfrif title: Ei gwneud yn ofynnol i ddefnyddwyr newydd ddatrys CAPTCHA i gadarnhau eu cyfrif
content_retention: content_retention:
danger_zone: Parth perygl
preamble: Rheoli sut mae cynnwys sy'n cael ei gynhyrchu gan ddefnyddwyr yn cael ei storio yn Mastodon. preamble: Rheoli sut mae cynnwys sy'n cael ei gynhyrchu gan ddefnyddwyr yn cael ei storio yn Mastodon.
title: Cadw cynnwys title: Cadw cynnwys
default_noindex: default_noindex:
@ -1756,13 +1760,26 @@ cy:
import: Mewnforio import: Mewnforio
import_and_export: Mewnforio ac allforio import_and_export: Mewnforio ac allforio
migrate: Mudo cyfrif migrate: Mudo cyfrif
notifications: Hysbysiadau e-bost
preferences: Dewisiadau preferences: Dewisiadau
profile: Proffil cyhoeddus profile: Proffil cyhoeddus
relationships: Yn dilyn a dilynwyr relationships: Yn dilyn a dilynwyr
severed_relationships: Perthynasau wedi'u torri
statuses_cleanup: Dileu postiadau'n awtomatig statuses_cleanup: Dileu postiadau'n awtomatig
strikes: Rhybuddion cymedroli strikes: Rhybuddion cymedroli
two_factor_authentication: Dilysu dau-ffactor two_factor_authentication: Dilysu dau-ffactor
webauthn_authentication: Allweddi diogelwch webauthn_authentication: Allweddi diogelwch
severed_relationships:
download: Llwytho i lawr (%{count})
event_type:
account_suspension: Atal cyfrif (%{target_name})
domain_block: Ataliad gweinydd (%{target_name})
user_domain_block: Rydych wedi rhwystro %{target_name}
lost_followers: Dilynwyr coll
lost_follows: Yn dilyn coll
preamble: Efallai y byddwch yn colli dilynwyr a'r rhai rydych yn eu dilyn pan fyddwch yn rhwystro parth neu pan fydd eich cymedrolwyr yn penderfynu atal gweinydd o bell. Pan fydd hynny'n digwydd, byddwch yn gallu llwytho i lawr rhestrau o berthnasoedd wedi'u torri, i'w harchwilio ac o bosibl eu mewnforio ar weinydd arall.
purged: Mae gwybodaeth am y gweinydd hwn wedi'i dynnu gan weinyddwyr eich gweinydd.
type: Digwyddiad
statuses: statuses:
attached: attached:
audio: audio:
@ -1880,6 +1897,7 @@ cy:
contrast: Mastodon (Cyferbyniad uchel) contrast: Mastodon (Cyferbyniad uchel)
default: Mastodon (Tywyll) default: Mastodon (Tywyll)
mastodon-light: Mastodon (Golau) mastodon-light: Mastodon (Golau)
system: Awtomatig (defnyddio thema system)
time: time:
formats: formats:
default: "%b %d, %Y, %H:%M" default: "%b %d, %Y, %H:%M"
@ -1992,6 +2010,13 @@ cy:
follows_subtitle: Dilynwch gyfrifon adnabyddus follows_subtitle: Dilynwch gyfrifon adnabyddus
follows_title: Pwy i ddilyn follows_title: Pwy i ddilyn
follows_view_more: Gweld mwy o bobl i ddilyn follows_view_more: Gweld mwy o bobl i ddilyn
hashtags_recent_count:
few: "%{people} o bobl yn y 2 ddiwrnod diwethaf"
many: "%{people} o bobl yn y 2 ddiwrnod diwethaf"
one: "%{people} person yn ystod y 2 ddiwrnod diwethaf"
other: "%{people} o bobl yn y 2 ddiwrnod diwethaf"
two: "%{people} o bobl yn y 2 ddiwrnod diwethaf"
zero: "%{people} o bobl yn y 2 ddiwrnod diwethaf"
hashtags_subtitle: Gweld beth sy'n tueddu dros y 2 ddiwrnod diwethaf hashtags_subtitle: Gweld beth sy'n tueddu dros y 2 ddiwrnod diwethaf
hashtags_title: Hashnodau tuedd hashtags_title: Hashnodau tuedd
hashtags_view_more: Gweld mwy o hashnodau tuedd hashtags_view_more: Gweld mwy o hashnodau tuedd
@ -1999,7 +2024,7 @@ cy:
post_step: Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn. post_step: Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn.
post_title: Creu'ch postiad cyntaf post_title: Creu'ch postiad cyntaf
share_action: Rhannu share_action: Rhannu
share_step: Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon! share_step: Gadewch i'ch ffrindiau wybod sut i ddod o hyd i chi ar Mastodon.
share_title: Rhannwch eich proffil Mastodon share_title: Rhannwch eich proffil Mastodon
sign_in_action: Mewngofnodi sign_in_action: Mewngofnodi
subject: Croeso i Mastodon subject: Croeso i Mastodon

View file

@ -751,6 +751,7 @@ da:
desc_html: Dette er afhængig af eksterne scripts fra hCaptcha, som kan være en sikkerhed og privatlivets fred. Derudover kan <strong>dette gøre registreringsprocessen betydeligt mindre tilgængelig for nogle (især deaktiveret) personer</strong>. Af disse grunde bedes De overveje alternative foranstaltninger såsom godkendelsesbaseret eller inviteret til at blive registreret. desc_html: Dette er afhængig af eksterne scripts fra hCaptcha, som kan være en sikkerhed og privatlivets fred. Derudover kan <strong>dette gøre registreringsprocessen betydeligt mindre tilgængelig for nogle (især deaktiveret) personer</strong>. Af disse grunde bedes De overveje alternative foranstaltninger såsom godkendelsesbaseret eller inviteret til at blive registreret.
title: Kræv nye brugere for at løse en CAPTCHA for at bekræfte deres konto title: Kræv nye brugere for at løse en CAPTCHA for at bekræfte deres konto
content_retention: content_retention:
danger_zone: Farezone
preamble: Styr, hvordan Mastodon gemmer brugergenereret indhold. preamble: Styr, hvordan Mastodon gemmer brugergenereret indhold.
title: Indholdsopbevaring title: Indholdsopbevaring
default_noindex: default_noindex:

View file

@ -751,6 +751,7 @@ de:
desc_html: Dies beruht auf externen Skripten von hCaptcha, die ein Sicherheits- und Datenschutzproblem darstellen könnten. Darüber hinaus <strong>kann das den Registrierungsprozess für manche Menschen (insbesondere für Menschen mit Behinderung) erheblich erschweren</strong>. Aus diesen Gründen solltest du alternative Maßnahmen in Betracht ziehen, z. B. eine Registrierung basierend auf einer Einladung oder auf Genehmigungen. desc_html: Dies beruht auf externen Skripten von hCaptcha, die ein Sicherheits- und Datenschutzproblem darstellen könnten. Darüber hinaus <strong>kann das den Registrierungsprozess für manche Menschen (insbesondere für Menschen mit Behinderung) erheblich erschweren</strong>. Aus diesen Gründen solltest du alternative Maßnahmen in Betracht ziehen, z. B. eine Registrierung basierend auf einer Einladung oder auf Genehmigungen.
title: Neue Nutzer*innen müssen ein CAPTCHA lösen, um das Konto zu bestätigen title: Neue Nutzer*innen müssen ein CAPTCHA lösen, um das Konto zu bestätigen
content_retention: content_retention:
danger_zone: Gefahrenzone
preamble: Lege fest, wie lange Inhalte von Nutzer*innen auf deinem Mastodon-Server gespeichert bleiben. preamble: Lege fest, wie lange Inhalte von Nutzer*innen auf deinem Mastodon-Server gespeichert bleiben.
title: Cache & Archive title: Cache & Archive
default_noindex: default_noindex:

View file

@ -16,6 +16,7 @@ ia:
pending: Tu conto es ancora sub revision. pending: Tu conto es ancora sub revision.
timeout: Tu session ha expirate. Per favor reaperi session pro continuar. timeout: Tu session ha expirate. Per favor reaperi session pro continuar.
unauthenticated: Es necessari aperir session o crear un conto ante de continuar. unauthenticated: Es necessari aperir session o crear un conto ante de continuar.
unconfirmed: Es necessari confirmar tu adresse de e-mail ante de continuar.
mailer: mailer:
confirmation_instructions: confirmation_instructions:
action: Verificar adresse de e-mail action: Verificar adresse de e-mail

View file

@ -174,6 +174,7 @@ be:
read:filters: бачыць свае фільтры read:filters: бачыць свае фільтры
read:follows: бачыць свае падпіскі read:follows: бачыць свае падпіскі
read:lists: бачыць свае спісы read:lists: бачыць свае спісы
read:me: чытайце толькі базавую інфармацыю аб сваім уліковым запісе
read:mutes: бачыць свае ігнараванні read:mutes: бачыць свае ігнараванні
read:notifications: бачыць свае абвесткі read:notifications: бачыць свае абвесткі
read:reports: бачыць свае скаргі read:reports: бачыць свае скаргі

View file

@ -174,6 +174,7 @@ cs:
read:filters: vidět vaše filtry read:filters: vidět vaše filtry
read:follows: vidět vaše sledování read:follows: vidět vaše sledování
read:lists: vidět vaše seznamy read:lists: vidět vaše seznamy
read:me: číst pouze základní informace vašeho účtu
read:mutes: vidět vaše skrytí read:mutes: vidět vaše skrytí
read:notifications: vidět vaše oznámení read:notifications: vidět vaše oznámení
read:reports: vidět vaše hlášení read:reports: vidět vaše hlášení

View file

@ -174,6 +174,7 @@ cy:
read:filters: gweld eich hidlwyr read:filters: gweld eich hidlwyr
read:follows: gweld eich dilynwyr read:follows: gweld eich dilynwyr
read:lists: gweld eich rhestrau read:lists: gweld eich rhestrau
read:me: darllen dim ond manylion elfennol eich cyfrif
read:mutes: gweld eich anwybyddiadau read:mutes: gweld eich anwybyddiadau
read:notifications: gweld eich hysbysiadau read:notifications: gweld eich hysbysiadau
read:reports: gweld eich adroddiadau read:reports: gweld eich adroddiadau

View file

@ -174,6 +174,7 @@ fy:
read:filters: jo filters besjen read:filters: jo filters besjen
read:follows: de accounts dytsto folgest besjen read:follows: de accounts dytsto folgest besjen
read:lists: jo listen besjen read:lists: jo listen besjen
read:me: allinnich de basisgegevens fan jo account lêze
read:mutes: jo negearre brûkers besjen read:mutes: jo negearre brûkers besjen
read:notifications: jo meldingen besjen read:notifications: jo meldingen besjen
read:reports: jo rapportearre berjochten besjen read:reports: jo rapportearre berjochten besjen

View file

@ -174,6 +174,7 @@ ja:
read:filters: フィルターの読み取り read:filters: フィルターの読み取り
read:follows: フォローの読み取り read:follows: フォローの読み取り
read:lists: リストの読み取り read:lists: リストの読み取り
read:me: 自分のアカウントの基本的な情報の読み取りのみ
read:mutes: ミュートの読み取り read:mutes: ミュートの読み取り
read:notifications: 通知の読み取り read:notifications: 通知の読み取り
read:reports: 通報の読み取り read:reports: 通報の読み取り

View file

@ -174,6 +174,7 @@ lt:
read:filters: matyti tavo filtrus read:filters: matyti tavo filtrus
read:follows: matyti tavo sekimus read:follows: matyti tavo sekimus
read:lists: matyti tavo sąrašus read:lists: matyti tavo sąrašus
read:me: skaityti tik pagrindinę paskyros informaciją
read:mutes: matyti tavo nutildymus read:mutes: matyti tavo nutildymus
read:notifications: matyti tavo pranešimus read:notifications: matyti tavo pranešimus
read:reports: matyti tavo ataskaitas read:reports: matyti tavo ataskaitas

View file

@ -174,6 +174,7 @@ sr-Latn:
read:filters: pogledaj svoje filtere read:filters: pogledaj svoje filtere
read:follows: pogledaj koga pratiš read:follows: pogledaj koga pratiš
read:lists: pogledaj svoje liste read:lists: pogledaj svoje liste
read:me: čita samo osnovne informacije o vašem nalogu
read:mutes: pogledaj ignorisanja read:mutes: pogledaj ignorisanja
read:notifications: pogledaj svoja obaveštenja read:notifications: pogledaj svoja obaveštenja
read:reports: pogledaj svoje prijave read:reports: pogledaj svoje prijave

View file

@ -174,6 +174,7 @@ sr:
read:filters: погледај своје филтере read:filters: погледај своје филтере
read:follows: погледај кога пратиш read:follows: погледај кога пратиш
read:lists: погледај своје листе read:lists: погледај своје листе
read:me: чита само основне информације о вашем налогу
read:mutes: погледај игнорисања read:mutes: погледај игнорисања
read:notifications: погледај своја обавештења read:notifications: погледај своја обавештења
read:reports: погледај своје пријаве read:reports: погледај своје пријаве

View file

@ -174,6 +174,7 @@ th:
read:filters: ดูตัวกรองของคุณ read:filters: ดูตัวกรองของคุณ
read:follows: ดูการติดตามของคุณ read:follows: ดูการติดตามของคุณ
read:lists: ดูรายการของคุณ read:lists: ดูรายการของคุณ
read:me: อ่านเฉพาะข้อมูลพื้นฐานของบัญชีของคุณเท่านั้น
read:mutes: ดูการซ่อนของคุณ read:mutes: ดูการซ่อนของคุณ
read:notifications: ดูการแจ้งเตือนของคุณ read:notifications: ดูการแจ้งเตือนของคุณ
read:reports: ดูรายงานของคุณ read:reports: ดูรายงานของคุณ

View file

@ -751,6 +751,7 @@ es-AR:
desc_html: Esto depende de scripts externos de hCaptcha, que pueden ser una preocupación de seguridad y privacidad. Además, <strong>esto puede hacer el proceso de registro significativamente menos accesible para algunas personas (especialmente para gente con discapacidades)</strong>. Por estas razones, por favor, considerá medidas alternativas, como el registro basado en la aprobación o la invitación. desc_html: Esto depende de scripts externos de hCaptcha, que pueden ser una preocupación de seguridad y privacidad. Además, <strong>esto puede hacer el proceso de registro significativamente menos accesible para algunas personas (especialmente para gente con discapacidades)</strong>. Por estas razones, por favor, considerá medidas alternativas, como el registro basado en la aprobación o la invitación.
title: Solicitar a los nuevos usuarios que resuelvan una CAPTCHA para confirmar su cuenta title: Solicitar a los nuevos usuarios que resuelvan una CAPTCHA para confirmar su cuenta
content_retention: content_retention:
danger_zone: Zona de peligro
preamble: Controlá cómo el contenido generado por el usuario se almacena en Mastodon. preamble: Controlá cómo el contenido generado por el usuario se almacena en Mastodon.
title: Retención de contenido title: Retención de contenido
default_noindex: default_noindex:

View file

@ -751,6 +751,7 @@ es-MX:
desc_html: Esto se basa en scripts externos de hCaptcha, que pueden suponer una preocupación de seguridad y privacidad. Además, <strong>esto puede volver el proceso de registro significativamente menos accesible para algunas personas (especialmente con discapacidades)</strong>. Por estas razones, por favor, considera medidas alternativas como el registro por aprobación manual o con invitación. desc_html: Esto se basa en scripts externos de hCaptcha, que pueden suponer una preocupación de seguridad y privacidad. Además, <strong>esto puede volver el proceso de registro significativamente menos accesible para algunas personas (especialmente con discapacidades)</strong>. Por estas razones, por favor, considera medidas alternativas como el registro por aprobación manual o con invitación.
title: Solicita a los nuevos usuarios que resuelvan un CAPTCHA para confirmar su cuenta title: Solicita a los nuevos usuarios que resuelvan un CAPTCHA para confirmar su cuenta
content_retention: content_retention:
danger_zone: Zona peligrosa
preamble: Controlar cómo el contenido generado por el usuario se almacena en Mastodon. preamble: Controlar cómo el contenido generado por el usuario se almacena en Mastodon.
title: Retención de contenido title: Retención de contenido
default_noindex: default_noindex:

View file

@ -214,12 +214,12 @@ es:
resend_user: Reenviar Correo de Confirmación resend_user: Reenviar Correo de Confirmación
reset_password_user: Restablecer Contraseña reset_password_user: Restablecer Contraseña
resolve_report: Resolver Reporte resolve_report: Resolver Reporte
sensitive_account: Marcar multimedia en tu cuenta como sensible sensitive_account: Marcar cuenta como sensible
silence_account: Silenciar Cuenta silence_account: Silenciar Cuenta
suspend_account: Suspender Cuenta suspend_account: Suspender Cuenta
unassigned_report: Desasignar Reporte unassigned_report: Desasignar Reporte
unblock_email_account: Desbloquear dirección de correo unblock_email_account: Desbloquear dirección de correo
unsensitive_account: Desmarcar multimedia en tu cuenta como sensible unsensitive_account: Desmarcar cuenta como sensible
unsilence_account: Dejar de Silenciar Cuenta unsilence_account: Dejar de Silenciar Cuenta
unsuspend_account: Dejar de Suspender Cuenta unsuspend_account: Dejar de Suspender Cuenta
update_announcement: Actualizar Anuncio update_announcement: Actualizar Anuncio
@ -751,6 +751,7 @@ es:
desc_html: Esto se basa en scripts externos de hCaptcha, que pueden suponer una preocupación de seguridad y privacidad. Además, <strong>esto puede volver el proceso de registro significativamente menos accesible para algunas personas (especialmente con discapacidades)</strong>. Por estas razones, por favor, considera medidas alternativas como el registro por aprobación manual o con invitación. desc_html: Esto se basa en scripts externos de hCaptcha, que pueden suponer una preocupación de seguridad y privacidad. Además, <strong>esto puede volver el proceso de registro significativamente menos accesible para algunas personas (especialmente con discapacidades)</strong>. Por estas razones, por favor, considera medidas alternativas como el registro por aprobación manual o con invitación.
title: Solicita a los nuevos usuarios que resuelvan un CAPTCHA para confirmar su cuenta title: Solicita a los nuevos usuarios que resuelvan un CAPTCHA para confirmar su cuenta
content_retention: content_retention:
danger_zone: Zona peligrosa
preamble: Controlar cómo el contenido generado por el usuario se almacena en Mastodon. preamble: Controlar cómo el contenido generado por el usuario se almacena en Mastodon.
title: Retención de contenido title: Retención de contenido
default_noindex: default_noindex:

View file

@ -753,6 +753,7 @@ eu:
desc_html: Hori egiteko hCaptcha-ko scriptak behar dira, hirugarrenenak izanik, segurtasun eta pribatutasun arazoak ekarri ditzaketeenak. Horrez gain, <strong>script horiengatik nabarmen zailagoa egiten zaie pertsona batzuei izena ematea (batez ere desgaitasunen bat duenei)</strong>. Hori dela eta, hausnartu beste neurri batzuk hartu ditzakezun, esaterako onarpenean oinarritutako izen ematea, edo gonbidapenen bidezkoa. desc_html: Hori egiteko hCaptcha-ko scriptak behar dira, hirugarrenenak izanik, segurtasun eta pribatutasun arazoak ekarri ditzaketeenak. Horrez gain, <strong>script horiengatik nabarmen zailagoa egiten zaie pertsona batzuei izena ematea (batez ere desgaitasunen bat duenei)</strong>. Hori dela eta, hausnartu beste neurri batzuk hartu ditzakezun, esaterako onarpenean oinarritutako izen ematea, edo gonbidapenen bidezkoa.
title: Eskatu erabiltzaile berriei CAPTCHA bat ebazteko beren kontua berresteko title: Eskatu erabiltzaile berriei CAPTCHA bat ebazteko beren kontua berresteko
content_retention: content_retention:
danger_zone: Eremu arriskutsua
preamble: Kontrolatu erabiltzaileek sortutako edukia nola biltegiratzen den Mastodonen. preamble: Kontrolatu erabiltzaileek sortutako edukia nola biltegiratzen den Mastodonen.
title: Edukia atxikitzea title: Edukia atxikitzea
default_noindex: default_noindex:

View file

@ -751,6 +751,7 @@ fi:
desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi <strong>tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi</strong>. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä. desc_html: Tämä perustuu ulkoisiin skripteihin hCaptchasta, mikä voi olla turvallisuus- ja yksityisyysongelma. Lisäksi <strong>tämä voi tehdä rekisteröinnin ihmisille huomattavasti (erityisesti vammaisten) helpommaksi</strong>. Harkitse vaihtoehtoisia toimenpiteitä, kuten hyväksymisperusteista tai kutsupohjaista rekisteröintiä.
title: Vaadi uusia käyttäjiä vahvistaamaan tilinsä ratkaisemalla CAPTCHA-vahvistus title: Vaadi uusia käyttäjiä vahvistaamaan tilinsä ratkaisemalla CAPTCHA-vahvistus
content_retention: content_retention:
danger_zone: Vaaravyöhyke
preamble: Määritä, miten käyttäjän luoma sisältö tallennetaan Mastodoniin. preamble: Määritä, miten käyttäjän luoma sisältö tallennetaan Mastodoniin.
title: Sisällön säilyttäminen title: Sisällön säilyttäminen
default_noindex: default_noindex:

View file

@ -751,6 +751,7 @@ fo:
desc_html: Hetta er bundið at uttanhýsis skriptum frá hCaptcha, sum kann vera ein trygdar- og privatlívsváði. Harafturat, so <strong>kann hetta gera skrásetingartilgongdina munandi minni atkomuliga til summi (brekaði) fólk</strong>. Tískil eigur tú at umhugsa aðrar hættir sosum góðkenningar-grundaða ella innbjóðingar-grundaða skráseting. desc_html: Hetta er bundið at uttanhýsis skriptum frá hCaptcha, sum kann vera ein trygdar- og privatlívsváði. Harafturat, so <strong>kann hetta gera skrásetingartilgongdina munandi minni atkomuliga til summi (brekaði) fólk</strong>. Tískil eigur tú at umhugsa aðrar hættir sosum góðkenningar-grundaða ella innbjóðingar-grundaða skráseting.
title: Set krav til nýggjar brúkarar at loysa eina CAPTHA fyri at vátta teirra kontu title: Set krav til nýggjar brúkarar at loysa eina CAPTHA fyri at vátta teirra kontu
content_retention: content_retention:
danger_zone: Vandaøki
preamble: Stýr hvussu brúkara-skapt tilfar er goymt í Mastodon. preamble: Stýr hvussu brúkara-skapt tilfar er goymt í Mastodon.
title: Varðveitsla av tilfari title: Varðveitsla av tilfari
default_noindex: default_noindex:

View file

@ -597,6 +597,9 @@ fy:
actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wanneart jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wanneart de <strong>spam</strong>-kategory keazen is. actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wanneart jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wanneart de <strong>spam</strong>-kategory keazen is.
actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoet <strong>jo</strong> server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld. actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoet <strong>jo</strong> server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld.
add_to_report: Mear oan de rapportaazje tafoegje add_to_report: Mear oan de rapportaazje tafoegje
already_suspended_badges:
local: Al opskoarte op dizze server
remote: Al opskoarte op harren server
are_you_sure: Binne jo wis? are_you_sure: Binne jo wis?
assign_to_self: Oan my tawize assign_to_self: Oan my tawize
assigned: Tawizen moderator assigned: Tawizen moderator
@ -748,6 +751,7 @@ fy:
desc_html: Dit is ôfhinklik fan eksterne scripts fan hCaptcha, wat feilichheids- en privacyrisikos meibringe kin. Boppe dat kin <strong>dit it registraasjeproses bot minder tagonklik meitsje foar guon (foaral handicapte) minsken</strong>. Om dizze redenen kinne jo it beste alternative maatregels oerweagje, lykas registraasje op basis fan goedkarring of op útnûging. desc_html: Dit is ôfhinklik fan eksterne scripts fan hCaptcha, wat feilichheids- en privacyrisikos meibringe kin. Boppe dat kin <strong>dit it registraasjeproses bot minder tagonklik meitsje foar guon (foaral handicapte) minsken</strong>. Om dizze redenen kinne jo it beste alternative maatregels oerweagje, lykas registraasje op basis fan goedkarring of op útnûging.
title: Nije brûkers moatte in CAPTCHA oplosse om harren account te befêstigjen title: Nije brûkers moatte in CAPTCHA oplosse om harren account te befêstigjen
content_retention: content_retention:
danger_zone: Gefaresône
preamble: Tafersjoch hâlde op hoet berjochten en media fan brûkers op Mastodon bewarre wurde. preamble: Tafersjoch hâlde op hoet berjochten en media fan brûkers op Mastodon bewarre wurde.
title: Bewartermyn berjochten title: Bewartermyn berjochten
default_noindex: default_noindex:
@ -767,6 +771,7 @@ fy:
disabled: Oan net ien disabled: Oan net ien
users: Oan oanmelde lokale brûkers users: Oan oanmelde lokale brûkers
registrations: registrations:
moderation_recommandation: Soargje derfoar dat jo in adekwaat en responsyf moderaasjeteam hawwe eardat jo registraasjes foar elkenien iepenstelle!
preamble: Tafersjoch hâlde op wat in account op dizze server registrearje kin. preamble: Tafersjoch hâlde op wat in account op dizze server registrearje kin.
title: Registraasjes title: Registraasjes
registrations_mode: registrations_mode:
@ -1647,13 +1652,24 @@ fy:
import: Ymportearje import: Ymportearje
import_and_export: Ymportearje en eksportearje import_and_export: Ymportearje en eksportearje
migrate: Accountmigraasje migrate: Accountmigraasje
notifications: E-mailmeldingen
preferences: Ynstellingen preferences: Ynstellingen
profile: Profyl profile: Profyl
relationships: Folgers en folgjenden relationships: Folgers en folgjenden
severed_relationships: Ferbrutsen folchrelaasjes
statuses_cleanup: Automatysk berjochten fuortsmite statuses_cleanup: Automatysk berjochten fuortsmite
strikes: Fêststelde skeiningen strikes: Fêststelde skeiningen
two_factor_authentication: Twa-stapsferifikaasje two_factor_authentication: Twa-stapsferifikaasje
webauthn_authentication: Befeiligingskaaien webauthn_authentication: Befeiligingskaaien
severed_relationships:
download: Downloade (%{count})
event_type:
account_suspension: Accountopskoarting (%{target_name})
domain_block: Serveropskoarting (%{target_name})
user_domain_block: Jo hawwe %{target_name} blokkearre
lost_followers: Ferlerne folgers
lost_follows: Ferlerne folge accounts
type: Barren
statuses: statuses:
attached: attached:
audio: audio:
@ -1747,6 +1763,7 @@ fy:
contrast: Mastodon (heech kontrast) contrast: Mastodon (heech kontrast)
default: Mastodon (donker) default: Mastodon (donker)
mastodon-light: Mastodon (ljocht) mastodon-light: Mastodon (ljocht)
system: Automatysk (systeemtema brûke)
time: time:
formats: formats:
default: "%d %B %Y om %H:%M" default: "%d %B %Y om %H:%M"
@ -1838,13 +1855,30 @@ fy:
apps_ios_action: Fia de App Store downloade apps_ios_action: Fia de App Store downloade
apps_step: Us offisjele apps downloade apps_step: Us offisjele apps downloade
apps_title: Mastodon-apps apps_title: Mastodon-apps
checklist_subtitle: 'Litte wy oan dit nije sosjale aventoer begjinne:'
checklist_title: Wolkomstkontrôlelist
edit_profile_action: Personalisearje edit_profile_action: Personalisearje
edit_profile_step: Wanneart jo mear oer josels fertelle, krije jo mear ynteraksje mei oare minsken.
edit_profile_title: Jo profyl personalisearje edit_profile_title: Jo profyl personalisearje
explanation: Hjir binne inkelde tips om jo op wei te helpen explanation: Hjir binne inkelde tips om jo op wei te helpen
feature_action: Mear ynfo feature_action: Mear ynfo
feature_audience: Mastodon biedt jo in unike mooglikheid om jo publyk te behearen sûnder tuskenpersoanen. Mastodon, ymplemintearre yn jo eigen ynfrastruktuer, stelt jo yn steat om elke oare Mastodon-server online te folgjen en troch harren folge te wurden, en stiet ûnder kontrôle fan net ien, útsein dy fan jo.
feature_audience_title: Bou jo publyk yn fertrouwen op
feature_control: Jo witte sels it bêste wat jo op jo tiidline sjen wolle. Gjin algoritmen of advertinsjes om jo tiid te fergriemen. Folgje elkenien op elke Mastodon-server fan ien account ôf en ûntfang harren berjochten yn gronologyske folchoarder, en meitsje jo hoekje op it ynternet in bytsje mear as josels.
feature_control_title: Hâld kontrôle oer jo eigen tiidline
feature_creativity: Mastodon stipet audio-, fideo- en fotoberjochten, tagonklikheidsbeskriuwingen, enkêten, ynhâldswarskôgingen, animearre avatars, oanpaste emoji, kontrôle oer it bywurkjen fan miniatueren en mear, om jo te helpen josels online te uterjen. Oft jo no jo keunst, muzyk of podcast publisearje, Mastodon stiet foar jo klear.
feature_creativity_title: Bjusterbaarlike kreativiteit
feature_moderation: Mastodon leit de beslútfoarming wer yn jo hannen. Elke server makket harren eigen rigels en foarskriften, dyt lokaal hanthavene wurde en net fan boppe ôf, lykas sosjale media fan bedriuwen, wêrtroch it it meast fleksibel is yn it reagearjen op de behoeften fan ferskate groepen minsken. Wurd lid fan in server mei de rigels wêrmeit jo akkoard geane, of host jo eigen.
feature_moderation_title: Moderaasje sa as it heart
follow_action: Folgje follow_action: Folgje
follow_step: Op Mastodon draait it hielendal om it folgjen fan ynteressante minsken.
follow_title: Personalisearje jo starttiidline
follows_subtitle: Folgje bekende accounts
follows_title: Wa te folgjen follows_title: Wa te folgjen
follows_view_more: Mear minsken om te folgjen besjen follows_view_more: Mear minsken om te folgjen besjen
hashtags_recent_count:
one: "%{people} persoan yn de ôfrûne 2 dagen"
other: "%{people} persoanen yn de ôfrûne 2 dagen"
hashtags_subtitle: Wat der yn de ôfrûne 2 dagen bard is ferkenne hashtags_subtitle: Wat der yn de ôfrûne 2 dagen bard is ferkenne
hashtags_title: Populêre hashtags hashtags_title: Populêre hashtags
hashtags_view_more: Mear populêre hashtags besjen hashtags_view_more: Mear populêre hashtags besjen

View file

@ -751,6 +751,7 @@ gl:
desc_html: Ten dependencia de scripts externos desde hCaptcha, que podería ser un problema de seguridade e privacidade. Ademáis, <strong>pode diminuír a accesiblidade para algunhas persoas (principalmente as discapacitadas)</strong>. Por estas razóns, considera medidas alternativas como o rexistro por convite e a aprobación manual das contas. desc_html: Ten dependencia de scripts externos desde hCaptcha, que podería ser un problema de seguridade e privacidade. Ademáis, <strong>pode diminuír a accesiblidade para algunhas persoas (principalmente as discapacitadas)</strong>. Por estas razóns, considera medidas alternativas como o rexistro por convite e a aprobación manual das contas.
title: Pedirlle ás novas usuarias resolver un CAPTCHA para confirmar a súa conta title: Pedirlle ás novas usuarias resolver un CAPTCHA para confirmar a súa conta
content_retention: content_retention:
danger_zone: Zona perigosa
preamble: Controla como se gardan en Mastodon os contidos creados polas usuarias. preamble: Controla como se gardan en Mastodon os contidos creados polas usuarias.
title: Retención do contido title: Retención do contido
default_noindex: default_noindex:

View file

@ -779,6 +779,7 @@ he:
desc_html: אפשרות זו ניסמכת על קטעי קוד חיצוניים של hCaptcha שעלולים להיות סיכון אבטחה ופרטיות. בנוסף, <strong>זה עשוי להפוך את תהליך ההרשמה לבלתי נגיש לא.נשים, במיוחד בעלות ובעלי מוגבלויות</strong>. מסיבות אלו, כדאי לשקול חלופות כמו אשרור מנהלים ידני או הרשמה רק על בסיס הזמנה. desc_html: אפשרות זו ניסמכת על קטעי קוד חיצוניים של hCaptcha שעלולים להיות סיכון אבטחה ופרטיות. בנוסף, <strong>זה עשוי להפוך את תהליך ההרשמה לבלתי נגיש לא.נשים, במיוחד בעלות ובעלי מוגבלויות</strong>. מסיבות אלו, כדאי לשקול חלופות כמו אשרור מנהלים ידני או הרשמה רק על בסיס הזמנה.
title: לדרוש פתרון CAPTCHA כדי לאשרר למשתמשים את חשבונם title: לדרוש פתרון CAPTCHA כדי לאשרר למשתמשים את חשבונם
content_retention: content_retention:
danger_zone: אזור מסוכן
preamble: שליטה על דרך אחסון תוכן המשתמשים במסטודון. preamble: שליטה על דרך אחסון תוכן המשתמשים במסטודון.
title: תקופת השמירה של תכנים title: תקופת השמירה של תכנים
default_noindex: default_noindex:

View file

@ -751,6 +751,7 @@ hu:
desc_html: Ez hCaptcha-ból származó külső scripteket használ, mely biztonsági vagy adatvédelmi résnek bizonyulhat. Ezen kívül ez <strong>a regisztrációs folyamatot jelentősen megnehezítheti bizonyos (kifejezetten különleges szükségletű) emberek számára</strong>. Emiatt fontold meg más módszerek, mint pl. jóváhagyás-alapú vagy meghívásalapú regisztráció használatát. desc_html: Ez hCaptcha-ból származó külső scripteket használ, mely biztonsági vagy adatvédelmi résnek bizonyulhat. Ezen kívül ez <strong>a regisztrációs folyamatot jelentősen megnehezítheti bizonyos (kifejezetten különleges szükségletű) emberek számára</strong>. Emiatt fontold meg más módszerek, mint pl. jóváhagyás-alapú vagy meghívásalapú regisztráció használatát.
title: Az új felhasználóknak egy CAPTCHA-t kell megoldaniuk, hogy megerősítsék a fiókjuk regisztrációját title: Az új felhasználóknak egy CAPTCHA-t kell megoldaniuk, hogy megerősítsék a fiókjuk regisztrációját
content_retention: content_retention:
danger_zone: Veszélyzóna
preamble: A felhasználók által előállított tartalom Mastodonon való tárolásának szabályozása. preamble: A felhasználók által előállított tartalom Mastodonon való tárolásának szabályozása.
title: Tartalom megtartása title: Tartalom megtartása
default_noindex: default_noindex:

View file

@ -111,12 +111,23 @@ ia:
public: Public public: Public
push_subscription_expires: Subscription PuSH expira le push_subscription_expires: Subscription PuSH expira le
redownload: Actualisar profilo redownload: Actualisar profilo
redownloaded_msg: Le profilo de %{username} ha essite actualisate desde le origine
reject: Rejectar
rejected_msg: Le demanda de inscription de %{username} ha essite rejectate
remote_suspension_irreversible: Le datos de iste conto ha essite irreversibilemente delite.
remote_suspension_reversible_hint_html: Le conto ha essite suspendite sur su servitor, e le datos essera removite completemente le %{date}. Usque alora, le servitor remote pote restaurar iste conto sin effectos negative. Si tu vole remover immediatemente tote le datos del conto, tu pote facer lo hic infra.
remove_avatar: Remover avatar
remove_header: Remover capite
removed_avatar_msg: Le imagine de avatar de %{username} ha essite removite
removed_header_msg: Le imagine de capite de %{username} ha essite removite
resend_confirmation: resend_confirmation:
already_confirmed: Iste usator jam es confirmate already_confirmed: Iste usator jam es confirmate
send: Reinviar ligamine de confirmation send: Reinviar ligamine de confirmation
success: Ligamine de confirmation inviate con successo! success: Ligamine de confirmation inviate con successo!
reset: Reinitialisar reset: Reinitialisar
reset_password: Reinitialisar contrasigno reset_password: Reinitialisar contrasigno
resubscribe: Resubscriber
role: Rolo
search: Cercar search: Cercar
search_same_email_domain: Altere usatores con le mesme dominio de e-mail search_same_email_domain: Altere usatores con le mesme dominio de e-mail
search_same_ip: Altere usatores con le mesme IP search_same_ip: Altere usatores con le mesme IP
@ -124,27 +135,43 @@ ia:
security_measures: security_measures:
only_password: Solmente contrasigno only_password: Solmente contrasigno
password_and_2fa: Contrasigno e 2FA password_and_2fa: Contrasigno e 2FA
sensitive: Fortiar sensibile
sensitized: Marcate como sensibile
shared_inbox_url: URL del cassa de entrata condividite
show: show:
created_reports: Reportos facite created_reports: Reportos facite
targeted_reports: Signalate per alteres targeted_reports: Signalate per alteres
silence: Limitar
silenced: Limitate silenced: Limitate
statuses: Messages statuses: Messages
strikes: Previe admonitiones
subscribe: Subscriber subscribe: Subscriber
suspend: Suspender
suspended: Suspendite suspended: Suspendite
suspension_irreversible: Le datos de iste conto ha essite irreversibilemente delite. Tu pote disfacer le suspension de iste conto pro render lo usabile, ma isto non recuperara alcun datos precedente.
suspension_reversible_hint_html: Le conto ha essite suspendite, e le datos essera removite completemente le %{date}. Usque alora, le conto pote esser restaurate sin effectos negative. Si tu vole remover immediatemente tote le datos del conto, tu pote facer lo hic infra.
title: Contos title: Contos
unblock_email: Disblocar adresse de e-mail unblock_email: Disblocar adresse de e-mail
unblocked_email_msg: Adresse de e-mail de %{username} disblocate con successo unblocked_email_msg: Adresse de e-mail de %{username} disblocate con successo
unconfirmed_email: E-mail non confirmate unconfirmed_email: E-mail non confirmate
undo_sensitized: Non plus fortiar sensibile
undo_silenced: Disfacer le limite undo_silenced: Disfacer le limite
undo_suspension: Disfacer le suspension undo_suspension: Disfacer le suspension
unsilenced_msg: Le limite del conto de %{username} ha essite cancellate
unsubscribe: Desubscriber
username: Nomine de usator username: Nomine de usator
view_domain: Vider summario de dominio view_domain: Vider summario de dominio
warn: Avisar
web: Web
action_logs: action_logs:
action_types: action_types:
change_email_user: Cambiar e-mail pro le usator
change_role_user: Cambiar le rolo del usator
confirm_user: Confirmar le usator confirm_user: Confirmar le usator
create_account_warning: Crear un advertimento create_account_warning: Crear un advertimento
create_announcement: Crear annuncio create_announcement: Crear annuncio
create_ip_block: Crear un regula IP create_ip_block: Crear un regula IP
create_user_role: Crear un rolo
destroy_announcement: Deler annuncio destroy_announcement: Deler annuncio
destroy_ip_block: Deler le regula IP destroy_ip_block: Deler le regula IP
destroy_status: Deler le message destroy_status: Deler le message
@ -155,6 +182,7 @@ ia:
enable_custom_emoji: Activar emoji personalisate enable_custom_emoji: Activar emoji personalisate
enable_user: Activar le usator enable_user: Activar le usator
promote_user: Promover usator promote_user: Promover usator
resend_user: Reinviar message de confirmation
reset_password_user: Reinitialisar contrasigno reset_password_user: Reinitialisar contrasigno
silence_account: Limitar conto silence_account: Limitar conto
unblock_email_account: Disblocar adresse de e-mail unblock_email_account: Disblocar adresse de e-mail
@ -163,6 +191,7 @@ ia:
update_custom_emoji: Actualisar emoji personalisate update_custom_emoji: Actualisar emoji personalisate
update_ip_block: Actualisar le regula IP update_ip_block: Actualisar le regula IP
update_status: Actualisar le message update_status: Actualisar le message
update_user_role: Actualisar rolo
actions: actions:
change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}" change_email_user_html: "%{name} cambiava le adresse de e-mail address del usator %{target}"
create_announcement_html: "%{name} creava un nove annuncio %{target}" create_announcement_html: "%{name} creava un nove annuncio %{target}"
@ -187,6 +216,7 @@ ia:
delete: Deler delete: Deler
disable: Disactivar disable: Disactivar
disabled: Disactivate disabled: Disactivate
disabled_msg: Emoji disactivate con successo
enable: Activar enable: Activar
enabled: Activate enabled: Activate
enabled_msg: Emoji activate con successo enabled_msg: Emoji activate con successo
@ -200,6 +230,7 @@ ia:
media_storage: Immagazinage de medios media_storage: Immagazinage de medios
new_users: nove usatores new_users: nove usatores
opened_reports: reportos aperte opened_reports: reportos aperte
software: Software
top_languages: Linguas le plus active top_languages: Linguas le plus active
top_servers: Servitores le plus active top_servers: Servitores le plus active
website: Sito web website: Sito web
@ -215,6 +246,10 @@ ia:
edit: Modificar un bloco de dominio edit: Modificar un bloco de dominio
export: Exportar export: Exportar
import: Importar import: Importar
new:
severity:
silence: Limitar
suspend: Suspender
private_comment: Commento private private_comment: Commento private
public_comment: Commento public public_comment: Commento public
email_domain_blocks: email_domain_blocks:
@ -234,9 +269,16 @@ ia:
status: Stato status: Stato
title: Sequer le recommendationes title: Sequer le recommendationes
instances: instances:
back_to_all: Toto
back_to_limited: Limitate
back_to_warning: Advertimento back_to_warning: Advertimento
by_domain: Dominio by_domain: Dominio
content_policies: content_policies:
comment: Nota interne
policies:
silence: Limitar
suspend: Suspender
policy: Politica
reason: Ration public reason: Ration public
dashboard: dashboard:
instance_accounts_dimension: Contos le plus sequite instance_accounts_dimension: Contos le plus sequite
@ -244,14 +286,23 @@ ia:
delivery: delivery:
unavailable: Non disponibile unavailable: Non disponibile
empty: Necun dominios trovate. empty: Necun dominios trovate.
moderation:
all: Toto
limited: Limitate
title: Moderation
private_comment: Commento private private_comment: Commento private
public_comment: Commento public public_comment: Commento public
title: Federation
total_blocked_by_us: Blocate per nos total_blocked_by_us: Blocate per nos
total_followed_by_us: Sequite per nos total_followed_by_us: Sequite per nos
invites: invites:
deactivate_all: Disactivar toto deactivate_all: Disactivar toto
filter: filter:
all: Toto
available: Disponibile available: Disponibile
expired: Expirate
title: Filtro
title: Invitationes
ip_blocks: ip_blocks:
add_new: Crear regula add_new: Crear regula
delete: Deler delete: Deler
@ -259,15 +310,19 @@ ia:
'1209600': 2 septimanas '1209600': 2 septimanas
'15778476': 6 menses '15778476': 6 menses
'2629746': 1 mense '2629746': 1 mense
'31556952': 1 anno
'86400': 1 die '86400': 1 die
'94670856': 3 annos
new: new:
title: Crear un nove regula IP title: Crear un nove regula IP
title: Regulas IP title: Regulas IP
relays: relays:
delete: Deler delete: Deler
description_html: Un <strong>repetitor de federation</strong> es un servitor intermediari que excambia grande volumines de messages public inter le servitores que se inscribe e publica a illo. <strong>Illo pote adjutar le servitores micre e medie a discoperir le contento del fediverso</strong>, sin requirer que le usatores local seque manualmente altere personas sur servitores distante.
disable: Disactivar disable: Disactivar
disabled: Disactivate disabled: Disactivate
enable: Activar enable: Activar
enable_hint: Un vice activate, tu servitor se inscribera a tote le messages public de iste repetitor, e comenciara a inviar le messages public de iste servitor a illo.
enabled: Activate enabled: Activate
save_and_enable: Salveguardar e activar save_and_enable: Salveguardar e activar
status: Stato status: Stato
@ -278,9 +333,11 @@ ia:
category: Categoria category: Categoria
confirm: Confirmar confirm: Confirmar
delete_and_resolve: Deler le messages delete_and_resolve: Deler le messages
no_one_assigned: Nemo
notes: notes:
create: Adder un nota create: Adder un nota
delete: Deler delete: Deler
title: Notas
skip_to_actions: Saltar al actiones skip_to_actions: Saltar al actiones
status: Stato status: Stato
updated_at: Actualisate updated_at: Actualisate
@ -289,6 +346,11 @@ ia:
assigned_users: assigned_users:
one: "%{count} usator" one: "%{count} usator"
other: "%{count} usatores" other: "%{count} usatores"
categories:
invites: Invitationes
moderation: Moderation
special: Special
delete: Deler
everyone: Permissiones predefinite everyone: Permissiones predefinite
privileges: privileges:
delete_user_data: Deler le datos de usator delete_user_data: Deler le datos de usator
@ -297,6 +359,7 @@ ia:
manage_rules: Gerer le regulas manage_rules: Gerer le regulas
manage_settings: Gerer le parametros manage_settings: Gerer le parametros
manage_users: Gerer usatores manage_users: Gerer usatores
title: Rolos
rules: rules:
delete: Deler delete: Deler
settings: settings:
@ -312,8 +375,25 @@ ia:
title: Parametros de servitor title: Parametros de servitor
site_uploads: site_uploads:
delete: Deler file incargate delete: Deler file incargate
software_updates:
documentation_link: Pro saper plus
title: Actualisationes disponibile
type: Typo
types:
major: Version major
minor: Version minor
version: Version
statuses: statuses:
account: Autor
application: Application
batch:
report: Reporto
deleted: Delite
favourites: Favoritos
history: Chronologia del versiones
language: Lingua language: Lingua
media:
title: Medios
metadata: Metadatos metadata: Metadatos
open: Aperir message open: Aperir message
original_status: Message original original_status: Message original
@ -332,6 +412,8 @@ ia:
action: Vider le actualisationes disponibile action: Vider le actualisationes disponibile
upload_check_privacy_error: upload_check_privacy_error:
action: Verifica hic pro plus de information action: Verifica hic pro plus de information
application_mailer:
unsubscribe: Desubscriber
edit_profile: edit_profile:
other: Alteres other: Alteres
existing_username_validator: existing_username_validator:
@ -392,6 +474,21 @@ ia:
login_activities: login_activities:
authentication_methods: authentication_methods:
password: contrasigno password: contrasigno
mail_subscriptions:
unsubscribe:
action: Si, desubscriber
complete: Desubscribite
confirmation_html: Es tu secur de voler cancellar le subscription al %{type} de Mastodon sur %{domain} pro tu adresse de e-mail %{email}? Tu pote sempre resubscriber te a partir del <a href="%{settings_path}">parametros de notification in e-mail</a>.
emails:
notification_emails:
favourite: notificationes de favorites in e-mail
follow: notificationes de sequimento in e-mail
follow_request: requestas de sequimento in e-mail
mention: notificationes de mentiones in e-mail
reblog: notificationes de impulsos in e-mail
resubscribe_html: Si tu ha cancellate le subscription in error, tu pote resubscriber te a partir del <a href="%{settings_path}">parametros de notification in e-mail</a>.
success_html: Tu non recipera plus %{type} pro Mastodon sur %{domain} a tu adresse de e-mail %{email}.
title: Desubcriber
migrations: migrations:
errors: errors:
not_found: non poterea esser trovate not_found: non poterea esser trovate

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