Merge remote-tracking branch 'upstream/master'

Add audio uploads
This commit is contained in:
wuyingren 2019-06-22 11:39:49 +08:00
commit 7cb680fc83
139 changed files with 4035 additions and 1240 deletions

View file

@ -127,6 +127,7 @@ module Admin
:by_domain,
:active,
:pending,
:disabled,
:silenced,
:suspended,
:username,

View file

@ -13,7 +13,7 @@ module Admin
authorize :domain_block, :create?
@domain_block = DomainBlock.new(resource_params)
existing_domain_block = resource_params[:domain].present? ? DomainBlock.find_by(domain: resource_params[:domain]) : nil
existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
@domain_block.save

View file

@ -18,7 +18,7 @@ module Admin
@blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count
@available = DeliveryFailureTracker.available?(Account.select(:shared_inbox_url).where(domain: params[:id]).first&.shared_inbox_url)
@media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size)
@domain_block = DomainBlock.find_by(domain: params[:id])
@domain_block = DomainBlock.rule_for(params[:id])
end
private

View file

@ -0,0 +1,32 @@
# frozen_string_literal: true
class Api::V1::Admin::AccountActionsController < Api::BaseController
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' }
before_action :require_staff!
before_action :set_account
def create
account_action = Admin::AccountAction.new(resource_params)
account_action.target_account = @account
account_action.current_account = current_account
account_action.save!
render_empty
end
private
def set_account
@account = Account.find(params[:account_id])
end
def resource_params
params.permit(
:type,
:report_id,
:warning_preset_id,
:text,
:send_email_notification
)
end
end

View file

@ -0,0 +1,128 @@
# frozen_string_literal: true
class Api::V1::Admin::AccountsController < Api::BaseController
include Authorization
include AccountableConcern
LIMIT = 100
before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:accounts' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' }, except: [:index, :show]
before_action :require_staff!
before_action :set_accounts, only: :index
before_action :set_account, except: :index
before_action :require_local_account!, only: [:enable, :approve, :reject]
after_action :insert_pagination_headers, only: :index
FILTER_PARAMS = %i(
local
remote
by_domain
active
pending
disabled
silenced
suspended
username
display_name
email
ip
staff
).freeze
PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze
def index
authorize :account, :index?
render json: @accounts, each_serializer: REST::Admin::AccountSerializer
end
def show
authorize @account, :show?
render json: @account, serializer: REST::Admin::AccountSerializer
end
def enable
authorize @account.user, :enable?
@account.user.enable!
log_action :enable, @account.user
render json: @account, serializer: REST::Admin::AccountSerializer
end
def approve
authorize @account.user, :approve?
@account.user.approve!
render json: @account, serializer: REST::Admin::AccountSerializer
end
def reject
authorize @account.user, :reject?
SuspendAccountService.new.call(@account, including_user: true, destroy: true, skip_distribution: true)
render json: @account, serializer: REST::Admin::AccountSerializer
end
def unsilence
authorize @account, :unsilence?
@account.unsilence!
log_action :unsilence, @account
render json: @account, serializer: REST::Admin::AccountSerializer
end
def unsuspend
authorize @account, :unsuspend?
@account.unsuspend!
log_action :unsuspend, @account
render json: @account, serializer: REST::Admin::AccountSerializer
end
private
def set_accounts
@accounts = filtered_accounts.order(id: :desc).includes(user: [:invite_request, :invite]).paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def set_account
@account = Account.find(params[:id])
end
def filtered_accounts
AccountFilter.new(filter_params).results
end
def filter_params
params.permit(*FILTER_PARAMS)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
api_v1_admin_accounts_url(pagination_params(max_id: pagination_max_id)) if records_continue?
end
def prev_path
api_v1_admin_accounts_url(pagination_params(min_id: pagination_since_id)) unless @accounts.empty?
end
def pagination_max_id
@accounts.last.id
end
def pagination_since_id
@accounts.first.id
end
def records_continue?
@accounts.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
def require_local_account!
forbidden unless @account.local? && @account.user.present?
end
end

View file

@ -0,0 +1,108 @@
# frozen_string_literal: true
class Api::V1::Admin::ReportsController < Api::BaseController
include Authorization
include AccountableConcern
LIMIT = 100
before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:reports' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:reports' }, except: [:index, :show]
before_action :require_staff!
before_action :set_reports, only: :index
before_action :set_report, except: :index
after_action :insert_pagination_headers, only: :index
FILTER_PARAMS = %i(
resolved
account_id
target_account_id
).freeze
PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze
def index
authorize :report, :index?
render json: @reports, each_serializer: REST::Admin::ReportSerializer
end
def show
authorize @report, :show?
render json: @report, serializer: REST::Admin::ReportSerializer
end
def assign_to_self
authorize @report, :update?
@report.update!(assigned_account_id: current_account.id)
log_action :assigned_to_self, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def unassign
authorize @report, :update?
@report.update!(assigned_account_id: nil)
log_action :unassigned, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def reopen
authorize @report, :update?
@report.unresolve!
log_action :reopen, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def resolve
authorize @report, :update?
@report.resolve!(current_account)
log_action :resolve, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
private
def set_reports
@reports = filtered_reports.order(id: :desc).with_accounts.paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def set_report
@report = Report.find(params[:id])
end
def filtered_reports
ReportFilter.new(filter_params).results
end
def filter_params
params.permit(*FILTER_PARAMS)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
api_v1_admin_reports_url(pagination_params(max_id: pagination_max_id)) if records_continue?
end
def prev_path
api_v1_admin_reports_url(pagination_params(min_id: pagination_since_id)) unless @reports.empty?
end
def pagination_max_id
@reports.last.id
end
def pagination_since_id
@reports.first.id
end
def records_continue?
@reports.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -7,6 +7,8 @@ class MediaController < ApplicationController
before_action :set_media_attachment
before_action :verify_permitted_status!
before_action :check_playable, only: :player
before_action :allow_iframing, only: :player
content_security_policy only: :player do |p|
p.frame_ancestors(false)
@ -18,8 +20,6 @@ class MediaController < ApplicationController
def player
@body_classes = 'player'
response.headers['X-Frame-Options'] = 'ALLOWALL'
raise ActiveRecord::RecordNotFound unless @media_attachment.video? || @media_attachment.gifv?
end
private
@ -34,4 +34,12 @@ class MediaController < ApplicationController
# Reraise in order to get a 404 instead of a 403 error code
raise ActiveRecord::RecordNotFound
end
def check_playable
not_found unless @media_attachment.larger_media_format?
end
def allow_iframing
response.headers['X-Frame-Options'] = 'ALLOWALL'
end
end

View file

@ -39,6 +39,6 @@ class MediaProxyController < ApplicationController
end
def reject_media?
DomainBlock.find_by(domain: @media_attachment.account.domain)&.reject_media?
DomainBlock.reject_media?(@media_attachment.account.domain)
end
end

View file

@ -56,8 +56,4 @@ class Settings::IdentityProofsController < Settings::BaseController
def post_params
params.require(:account_identity_proof).permit(:post_status, :status_text)
end
def set_body_classes
@body_classes = ''
end
end

View file

@ -48,9 +48,14 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
let filtered = false;
if (notification.type === 'mention') {
const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible')));
const regex = regexFromFilters(filters);
const searchIndex = notification.status.spoiler_text + '\n' + unescapeHTML(notification.status.content);
if (dropRegex && dropRegex.test(searchIndex)) {
return;
}
filtered = regex && regex.test(searchIndex);
}

View file

@ -157,7 +157,7 @@ class Item extends React.PureComponent {
if (attachment.get('type') === 'unknown') {
return (
<div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ left: left, top: top, right: right, bottom: bottom, width: `${width}%`, height: `${height}%` }}>
<a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }}>
<a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }} title={attachment.get('description')}>
<canvas width={32} height={32} ref={this.setCanvasRef} className='media-gallery__preview' />
</a>
</div>

View file

@ -333,17 +333,17 @@ class Status extends ImmutablePureComponent {
media={status.get('media_attachments')}
/>
);
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
const video = status.getIn(['media_attachments', 0]);
} else if (['video', 'audio'].includes(status.getIn(['media_attachments', 0, 'type']))) {
const attachment = status.getIn(['media_attachments', 0]);
media = (
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >
{Component => (
<Component
preview={video.get('preview_url')}
blurhash={video.get('blurhash')}
src={video.get('url')}
alt={video.get('description')}
preview={attachment.get('preview_url')}
blurhash={attachment.get('blurhash')}
src={attachment.get('url')}
alt={attachment.get('description')}
width={this.props.cachedMediaWidth}
height={110}
inline

View file

@ -60,6 +60,7 @@ class ComposeForm extends ImmutablePureComponent {
onPickEmoji: PropTypes.func.isRequired,
showSearch: PropTypes.bool,
anyMedia: PropTypes.bool,
singleColumn: PropTypes.bool,
};
static defaultProps = {
@ -115,7 +116,7 @@ class ComposeForm extends ImmutablePureComponent {
}
handleFocus = () => {
if (this.composeForm) {
if (this.composeForm && !this.props.singleColumn) {
this.composeForm.scrollIntoView();
}
}

View file

@ -7,9 +7,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import ImmutablePropTypes from 'react-immutable-proptypes';
const messages = defineMessages({
upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' },
upload: { id: 'upload_button.label', defaultMessage: 'Add media ({formats})' },
});
const SUPPORTED_FORMATS = 'JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC';
const makeMapStateToProps = () => {
const mapStateToProps = state => ({
acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),
@ -60,9 +62,9 @@ class UploadButton extends ImmutablePureComponent {
return (
<div className='compose-form__upload-button'>
<IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
<IconButton icon='camera' title={intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.upload)}</span>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })}</span>
<input
key={resetFileKey}
ref={this.setRef}

View file

@ -3,7 +3,7 @@ import UploadButton from '../components/upload_button';
import { uploadCompose } from '../../../actions/compose';
const mapStateToProps = state => ({
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')),
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))),
unavailable: state.getIn(['compose', 'poll']) !== null,
resetFileKey: state.getIn(['compose', 'resetFileKey']),
});

View file

@ -107,15 +107,15 @@ export default class DetailedStatus extends ImmutablePureComponent {
}
if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
const video = status.getIn(['media_attachments', 0]);
if (['video', 'audio'].includes(status.getIn(['media_attachments', 0, 'type']))) {
const attachment = status.getIn(['media_attachments', 0]);
media = (
<Video
preview={video.get('preview_url')}
blurhash={video.get('blurhash')}
src={video.get('url')}
alt={video.get('description')}
preview={attachment.get('preview_url')}
blurhash={attachment.get('blurhash')}
src={attachment.get('url')}
alt={attachment.get('description')}
width={300}
height={150}
inline

View file

@ -8,7 +8,7 @@ const ComposePanel = () => (
<div className='compose-panel'>
<SearchContainer openInRoute />
<NavigationContainer />
<ComposeFormContainer />
<ComposeFormContainer singleColumn />
<LinkFooter withHotkeys />
</div>
);

View file

@ -45,7 +45,7 @@
"bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_modal_error.retry": "إعادة المحاولة",
"column.blocks": "الحسابات المحجوبة",
"column.community": "التَسَلْسُل الزَمني المحلي",
"column.community": "الخيط العام المحلي",
"column.direct": "الرسائل المباشرة",
"column.domain_blocks": "النطاقات المخفية",
"column.favourites": "المفضلة",
@ -109,7 +109,7 @@
"emoji_button.food": "الطعام والشراب",
"emoji_button.label": "أدرج إيموجي",
"emoji_button.nature": "الطبيعة",
"emoji_button.not_found": "لا إيموجو !! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "لا إيموجو!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "أشياء",
"emoji_button.people": "الناس",
"emoji_button.recent": "الشائعة الاستخدام",
@ -120,7 +120,7 @@
"empty_column.account_timeline": "ليس هناك تبويقات!",
"empty_column.account_unavailable": "الملف الشخصي غير متوفر",
"empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.",
"empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية!",
"empty_column.community": "الخط العام المحلي فارغ. أكتب شيئا ما للعامة كبداية!",
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
"empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.",
"empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.",
@ -164,8 +164,8 @@
"introduction.federation.federated.text": "كافة المنشورات التي نُشِرت إلى العامة على الخوادم الأخرى للفديفرس سوف يتم عرضها على الخيط المُوحَّد.",
"introduction.federation.home.headline": "الرئيسي",
"introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!",
"introduction.federation.local.headline": "المحلي",
"introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط الزمني المحلي.",
"introduction.federation.local.headline": "الخيط العام المحلي",
"introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط العام المحلي.",
"introduction.interactions.action": "إنهاء العرض التوضيحي!",
"introduction.interactions.favourite.headline": "الإضافة إلى المفضلة",
"introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.",
@ -192,7 +192,7 @@
"keyboard_shortcuts.home": "لفتح الخيط الرئيسي",
"keyboard_shortcuts.hotkey": "مفتاح الاختصار",
"keyboard_shortcuts.legend": "لعرض هذا المفتاح",
"keyboard_shortcuts.local": "لفتح الخيط الزمني المحلي",
"keyboard_shortcuts.local": "لفتح الخيط العام المحلي",
"keyboard_shortcuts.mention": "لذِكر الناشر",
"keyboard_shortcuts.muted": "لفتح قائمة المستخدِمين المكتومين",
"keyboard_shortcuts.my_profile": "لفتح ملفك الشخصي",
@ -221,7 +221,7 @@
"lists.new.title_placeholder": "عنوان القائمة الجديدة",
"lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
"lists.subheading": "قوائمك",
"loading_indicator.label": "تحميل ...",
"loading_indicator.label": "تحميل...",
"media_gallery.toggle_visible": "عرض / إخفاء",
"missing_indicator.label": "تعذر العثور عليه",
"missing_indicator.sublabel": "تعذر العثور على هذا المورد",
@ -358,7 +358,7 @@
"suggestions.header": "يمكن أن يهمك…",
"tabs_bar.federated_timeline": "الموحَّد",
"tabs_bar.home": "الرئيسية",
"tabs_bar.local_timeline": "المحلي",
"tabs_bar.local_timeline": "الخيط العام المحلي",
"tabs_bar.notifications": "الإخطارات",
"tabs_bar.search": "البحث",
"time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
"upload_area.title": "اسحب ثم أفلت للرفع",
"upload_button.label": "إضافة وسائط (JPEG، PNG، GIF، WebM، MP4، MOV)",
"upload_button.label": "إضافة وسائط ({formats})",
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
"upload_form.description": "وصف للمعاقين بصريا",

View file

@ -239,7 +239,7 @@
"navigation_bar.follow_requests": "অনুসরণের অনুরোধগুলি",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.info": "এই সার্ভার সম্পর্কে",
"navigation_bar.keyboard_shortcuts": "চাবি ব্যবহার",
"navigation_bar.keyboard_shortcuts": "হটকীগুলি",
"navigation_bar.lists": "তালিকাগুলো",
"navigation_bar.logout": "বাইরে যান",
"navigation_bar.mutes": "যেসব বেভহারকারীদের কার্যক্রম বন্ধ করা আছে",

View file

@ -161,7 +161,7 @@
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
"introduction.federation.action": "Cuntinuà",
"introduction.federation.federated.headline": "Federata",
"introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica federata.",
"introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica glubale.",
"introduction.federation.home.headline": "Accolta",
"introduction.federation.home.text": "I statuti da a ghjente che vo siguitate saranu affissati nant'à a linea d'accolta. Pudete seguità qualvogliasia nant'à tutti i servori!",
"introduction.federation.local.headline": "Lucale",
@ -187,7 +187,7 @@
"keyboard_shortcuts.enter": "apre u statutu",
"keyboard_shortcuts.favourite": "aghjunghje à i favuriti",
"keyboard_shortcuts.favourites": "per apre a lista di i favuriti",
"keyboard_shortcuts.federated": "per apre a linea pubblica federata",
"keyboard_shortcuts.federated": "per apre a linea pubblica glubale",
"keyboard_shortcuts.heading": "Accorte cù a tastera",
"keyboard_shortcuts.home": "per apre a linea d'accolta",
"keyboard_shortcuts.hotkey": "Accorta",
@ -286,9 +286,9 @@
"privacy.direct.short": "Direttu",
"privacy.private.long": "Mustrà solu à l'abbunati",
"privacy.private.short": "Privatu",
"privacy.public.long": "Mustrà à tuttu u mondu nant'a linea pubblica",
"privacy.public.long": "Mustrà à tuttu u mondu nant'à e linee pubbliche",
"privacy.public.short": "Pubblicu",
"privacy.unlisted.long": "Ùn mette micca nant'a linea pubblica (ma tutt'u mondu pò vede u statutu nant'à u vostru prufile)",
"privacy.unlisted.long": "Ùn mette micca nant'à e linee pubbliche",
"privacy.unlisted.short": "Micca listatu",
"regeneration_indicator.label": "Caricamentu…",
"regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!",

View file

@ -300,7 +300,7 @@
"reply_indicator.cancel": "Zrušit",
"report.forward": "Přeposlat na {target}",
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
"report.hint": "Toto nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
"report.hint": "Nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
"report.placeholder": "Dodatečné komentáře",
"report.submit": "Odeslat",
"report.target": "Nahlášení uživatele {target}",

View file

@ -264,7 +264,7 @@
"notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.mention": "Crybwylliadau:",
"notifications.column_settings.poll": "Canlyniadau pleidlais:",
"notifications.column_settings.push": "Hysbysiadau push",
"notifications.column_settings.push": "Hysbysiadau gwthiadwy",
"notifications.column_settings.reblog": "Hybiadau:",
"notifications.column_settings.show": "Dangos yn y golofn",
"notifications.column_settings.sound": "Chwarae sain",

View file

@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber",
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
"upload_area.title": "Zum Hochladen hereinziehen",
"upload_button.label": "Mediendatei hinzufügen (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "Mediendatei hinzufügen ({formats})",
"upload_error.limit": "Dateiupload-Limit erreicht.",
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",

View file

@ -1,7 +1,7 @@
{
"account.add_or_remove_from_list": "Προσθήκη ή Αφαίρεση από λίστες",
"account.badges.bot": "Μποτ",
"account.block": "Απόκλεισε τον/την @{name}",
"account.block": "Αποκλισμός @{name}",
"account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
"account.blocked": "Αποκλεισμένος/η",
"account.direct": "Προσωπικό μήνυμα προς @{name}",
@ -27,13 +27,13 @@
"account.posts_with_replies": "Τουτ και απαντήσεις",
"account.report": "Κατάγγειλε @{name}",
"account.requested": "Εκκρεμεί έγκριση. Κάνε κλικ για να ακυρώσεις το αίτημα παρακολούθησης",
"account.share": "Μοιράσου το προφίλ του/της @{name}",
"account.show_reblogs": "Δείξε τις προωθήσεις του/της @{name}",
"account.share": "Μοίρασμα του προφίλ @{name}",
"account.show_reblogs": "Εμφάνιση προωθήσεων από @{name}",
"account.unblock": "Ξεμπλόκαρε @{name}",
"account.unblock_domain": "Αποκάλυψε το {domain}",
"account.unendorse": "Άνευ προβολής στο προφίλ",
"account.unfollow": "Διακοπή παρακολούθησης",
"account.unmute": "Διακοπή αποσιώπησης του/της @{name}",
"account.unmute": "Διακοπή αποσιώπησης @{name}",
"account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
"alert.unexpected.title": "Εεπ!",
@ -41,8 +41,8 @@
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
"bundle_column_error.retry": "Δοκίμασε ξανά",
"bundle_column_error.title": "Σφάλμα δικτύου",
"bundle_modal_error.close": "Κλείσε",
"bundle_modal_error.message": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
"bundle_modal_error.close": "Κλείσιμο",
"bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.",
"bundle_modal_error.retry": "Δοκίμασε ξανά",
"column.blocks": "Αποκλεισμένοι χρήστες",
"column.community": "Τοπική ροή",
@ -69,7 +69,7 @@
"compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα",
"compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.",
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
"compose_form.lock_disclaimer.lock": "κλειδωμένος",
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
"compose_form.placeholder": "Τι σκέφτεσαι;",
"compose_form.poll.add_option": "Προσθήκη επιλογής",
"compose_form.poll.duration": "Διάρκεια δημοσκόπησης",
@ -88,7 +88,7 @@
"confirmations.block.confirm": "Απόκλεισε",
"confirmations.block.message": "Σίγουρα θες να αποκλείσεις {name};",
"confirmations.delete.confirm": "Διέγραψε",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την κατάσταση;",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;",
"confirmations.delete_list.confirm": "Διέγραψε",
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
"confirmations.domain_block.confirm": "Απόκρυψη ολόκληρου του τομέα",
@ -149,7 +149,7 @@
"hashtag.column_header.tag_mode.none": "χωρίς {additional}",
"hashtag.column_settings.select.no_options_message": "Δεν βρέθηκαν προτάσεις",
"hashtag.column_settings.select.placeholder": "Γράψε μερικές ταμπέλες…",
"hashtag.column_settings.tag_mode.all": "Όλα αυτα",
"hashtag.column_settings.tag_mode.all": "Όλα αυτά",
"hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά",
"hashtag.column_settings.tag_mode.none": "Κανένα από αυτά",
"hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",

View file

@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired",

View file

@ -17,7 +17,7 @@
"account.hide_reblogs": "Ocultar retoots de @{name}",
"account.link_verified_on": "El proprietario de este link fue verificado el {date}",
"account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
"account.media": "Media",
"account.media": "Multimedia",
"account.mention": "Mencionar a @{name}",
"account.moved_to": "{name} se ha mudado a:",
"account.mute": "Silenciar a @{name}",
@ -36,7 +36,7 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
"alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "Oops!",
"alert.unexpected.title": "¡Ups!",
"boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.",
"bundle_column_error.retry": "Inténtalo de nuevo",
@ -71,25 +71,25 @@
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
"compose_form.lock_disclaimer.lock": "bloqueado",
"compose_form.placeholder": "¿En qué estás pensando?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.add_option": "Añadir una opción",
"compose_form.poll.duration": "Duración de la encuesta",
"compose_form.poll.option_placeholder": "Elección {number}",
"compose_form.poll.remove_option": "Eliminar esta opción",
"compose_form.publish": "Tootear",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.hide": "Marcar multimedia como sensible",
"compose_form.sensitive.marked": "Material marcado como sensible",
"compose_form.sensitive.unmarked": "Material no marcado como sensible",
"compose_form.spoiler.marked": "Texto oculto tras la advertencia",
"compose_form.spoiler.unmarked": "Texto no oculto",
"compose_form.spoiler_placeholder": "Advertencia de contenido",
"confirmation_modal.cancel": "Cancelar",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "Bloquear y Reportar",
"confirmations.block.confirm": "Bloquear",
"confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?",
"confirmations.delete.confirm": "Eliminar",
"confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.confirm": "Eliminar",
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
"confirmations.domain_block.confirm": "Ocultar dominio entero",
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
@ -97,7 +97,7 @@
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
"confirmations.redraft.confirm": "Borrar y volver a borrador",
"confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
"confirmations.reply.confirm": "Reply",
"confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
@ -117,8 +117,8 @@
"emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.account_timeline": "¡No hay toots aquí!",
"empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
@ -137,21 +137,21 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rechazar",
"getting_started.developers": "Desarrolladores",
"getting_started.directory": "Profile directory",
"getting_started.documentation": "Documentation",
"getting_started.directory": "Directorio de perfil",
"getting_started.documentation": "Documentación",
"getting_started.heading": "Primeros pasos",
"getting_started.invite": "Invitar usuarios",
"getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.",
"getting_started.security": "Seguridad",
"getting_started.terms": "Términos de servicio",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_header.tag_mode.all": "y {additional}",
"hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "sin {additional}",
"hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias",
"hashtag.column_settings.select.placeholder": "Introduzca hashtags…",
"hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
"hashtag.column_settings.tag_mode.none": "Ninguno de estos",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"home.column_settings.basic": "Básico",
"home.column_settings.show_reblogs": "Mostrar retoots",
@ -159,29 +159,29 @@
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"introduction.federation.action": "Next",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.action": "Siguiente",
"introduction.federation.federated.headline": "Federado",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.headline": "Inicio",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.favourite.headline": "Favourite",
"introduction.interactions.action": "¡Terminar tutorial!",
"introduction.interactions.favourite.headline": "Favorito",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost",
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
"introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.headline": "Responder",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps",
"introduction.welcome.action": "¡Vamos!",
"introduction.welcome.headline": "Primeros pasos",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "volver atrás",
"keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados",
"keyboard_shortcuts.boost": "retootear",
"keyboard_shortcuts.column": "enfocar un estado en una de las columnas",
"keyboard_shortcuts.compose": "enfocar el área de texto de redacción",
"keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "abrir la columna de mensajes directos",
"keyboard_shortcuts.down": "mover hacia abajo en la lista",
"keyboard_shortcuts.enter": "to open status",
@ -211,10 +211,10 @@
"lightbox.close": "Cerrar",
"lightbox.next": "Siguiente",
"lightbox.previous": "Anterior",
"lightbox.view_context": "View context",
"lightbox.view_context": "Ver contexto",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Delete list",
"lists.delete": "Borrar lista",
"lists.edit": "Editar lista",
"lists.edit.submit": "Change title",
"lists.new.create": "Añadir lista",

View file

@ -23,7 +23,7 @@
"account.mute": "Mututu @{name}",
"account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak",
"account.muted": "Mutututa",
"account.posts": "Tootak",
"account.posts": "Toot",
"account.posts_with_replies": "Toot eta erantzunak",
"account.report": "Salatu @{name}",
"account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko",
@ -32,7 +32,7 @@
"account.unblock": "Desblokeatu @{name}",
"account.unblock_domain": "Berriz erakutsi {domain}",
"account.unendorse": "Ez nabarmendu profilean",
"account.unfollow": "Jarraitzeari utzi",
"account.unfollow": "Utzi jarraitzeari",
"account.unmute": "Desmututu @{name}",
"account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak",
"alert.unexpected.message": "Ustekabeko errore bat gertatu da.",

View file

@ -1,5 +1,5 @@
{
"account.add_or_remove_from_list": "افزودن یا برداشتن از فهرست",
"account.add_or_remove_from_list": "افزودن یا حذف از فهرست‌ها",
"account.badges.bot": "ربات",
"account.block": "مسدودسازی @{name}",
"account.block_domain": "پنهان‌سازی همه چیز از سرور {domain}",

View file

@ -71,20 +71,20 @@
"compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.",
"compose_form.lock_disclaimer.lock": "lukittu",
"compose_form.placeholder": "Mitä mietit?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.add_option": "Lisää valinta",
"compose_form.poll.duration": "Äänestyksen kesto",
"compose_form.poll.option_placeholder": "Valinta numero",
"compose_form.poll.remove_option": "Poista tämä valinta",
"compose_form.publish": "Tuuttaa",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.publish_loud": "Julkista!",
"compose_form.sensitive.hide": "Valitse tämä arkaluontoisena",
"compose_form.sensitive.marked": "Media on merkitty arkaluontoiseksi",
"compose_form.sensitive.unmarked": "Mediaa ei ole merkitty arkaluontoiseksi",
"compose_form.spoiler.marked": "Teksti on piilotettu varoituksen taakse",
"compose_form.spoiler.unmarked": "Teksti ei ole piilotettu",
"compose_form.spoiler_placeholder": "Sisältövaroitus",
"confirmation_modal.cancel": "Peruuta",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "Estä ja raportoi",
"confirmations.block.confirm": "Estä",
"confirmations.block.message": "Haluatko varmasti estää käyttäjän {name}?",
"confirmations.delete.confirm": "Poista",
@ -118,7 +118,7 @@
"emoji_button.symbols": "Symbolit",
"emoji_button.travel": "Matkailu",
"empty_column.account_timeline": "Ei ole 'toots' täällä!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.account_unavailable": "Profiilia ei löydy",
"empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.",
"empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!",
"empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.",
@ -138,7 +138,7 @@
"follow_request.reject": "Hylkää",
"getting_started.developers": "Kehittäjille",
"getting_started.directory": "Profiili hakemisto",
"getting_started.documentation": "Documentation",
"getting_started.documentation": "Documentaatio",
"getting_started.heading": "Aloitus",
"getting_started.invite": "Kutsu ihmisiä",
"getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.",
@ -147,8 +147,8 @@
"hashtag.column_header.tag_mode.all": "ja {additional}",
"hashtag.column_header.tag_mode.any": "tai {additional}",
"hashtag.column_header.tag_mode.none": "ilman {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_settings.select.no_options_message": "Ehdostuta ei löydetty",
"hashtag.column_settings.select.placeholder": "Laita häshtägejä…",
"hashtag.column_settings.tag_mode.all": "Kaikki",
"hashtag.column_settings.tag_mode.any": "Kaikki",
"hashtag.column_settings.tag_mode.none": "Ei mikään",
@ -156,25 +156,25 @@
"home.column_settings.basic": "Perusasetukset",
"home.column_settings.show_reblogs": "Näytä buustaukset",
"home.column_settings.show_replies": "Näytä vastaukset",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"intervals.full.days": "Päivä päiviä",
"intervals.full.hours": "Tunti tunteja",
"intervals.full.minutes": "Minuuti minuuteja",
"introduction.federation.action": "Seuraava",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.favourite.headline": "Favourite",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost",
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
"introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps",
"introduction.federation.federated.headline": "Federaatioitettu",
"introduction.federation.federated.text": "Julkisia viestejä muiden serverien that is not a word aikoo tulla federoituun aikajanaan.",
"introduction.federation.home.headline": "Koti",
"introduction.federation.home.text": "Viestit muilta pelaajilta jota seuraat aikovat tulla koti sivuusi. Voit seurata ketä vain missä vain serverillä!",
"introduction.federation.local.headline": "Paikallinen",
"introduction.federation.local.text": "Julkiset viestit muilta pelaajilta samalla serverillä tulevat sinun paikalliseen aikajanaan.",
"introduction.interactions.action": "Suorita harjoitus!",
"introduction.interactions.favourite.headline": "Lempi",
"introduction.interactions.favourite.text": "Toot is not a word.",
"introduction.interactions.reblog.headline": "Nopeutus",
"introduction.interactions.reblog.text": "Toot is not a word",
"introduction.interactions.reply.headline": "Vastaa",
"introduction.interactions.reply.text": "TOOT IS NOT A WORD",
"introduction.welcome.action": "Mennään!",
"introduction.welcome.headline": "Ensimmäiset askeleet",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "liiku taaksepäin",
"keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä",

View file

@ -1,107 +1,107 @@
{
"account.add_or_remove_from_list": "Add or Remove from lists",
"account.add_or_remove_from_list": "Hozzáadás és elvétel listáról",
"account.badges.bot": "Bot",
"account.block": "@{name} letiltása",
"account.block_domain": "Minden elrejtése innen: {domain}",
"account.blocked": "Blocked",
"account.direct": "Direct Message @{name}",
"account.domain_blocked": "Domain hidden",
"account.blocked": "Letiltva",
"account.direct": "Közvetlen üzenet @{name} számára",
"account.domain_blocked": "Rejtett domain",
"account.edit_profile": "Profil szerkesztése",
"account.endorse": "Feature on profile",
"account.endorse": "Kiemelés a profilodon",
"account.follow": "Követés",
"account.followers": "Követők",
"account.followers.empty": "No one follows this user yet.",
"account.follows": "Követve",
"account.follows.empty": "This user doesn't follow anyone yet.",
"account.follows_you": "Követnek téged",
"account.hide_reblogs": "Rejtsd el a tülkölést @{name}-tól/től",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
"account.followers": "Követő",
"account.followers.empty": "Ezt a felhasználót még senki sem követi.",
"account.follows": "Követett",
"account.follows.empty": "Ez a felhasználó még senkit sem követ.",
"account.follows_you": "Követ téged",
"account.hide_reblogs": "@{name} megtolásainak némítása",
"account.link_verified_on": "A linket ellenőriztük: {date}",
"account.locked_info": "Ez a fiók zárt. A tulaj engedélyezi, ki követheti őt.",
"account.media": "Média",
"account.mention": "@{name} említése",
"account.moved_to": "{name} átköltözött:",
"account.mute": "@{name} némítása",
"account.mute_notifications": "@{name} értesítések némítása",
"account.muted": "Muted",
"account.posts": "Státuszok",
"account.posts_with_replies": "Toots with replies",
"account.mute_notifications": "@{name} értesítéseinek némítása",
"account.muted": "Némítva",
"account.posts": "Tülkölés",
"account.posts_with_replies": "Tülkölés válaszokkal",
"account.report": "@{name} jelentése",
"account.requested": "Engedélyre vár. Kattintson a követési kérés visszavonására",
"account.requested": "Engedélyre vár. Kattints a követési kérés visszavonásához",
"account.share": "@{name} profiljának megosztása",
"account.show_reblogs": "@{name} kedvenceinek mutatása",
"account.unblock": "@{name} kiblokkolása",
"account.unblock_domain": "{domain} mutatása",
"account.unendorse": "Don't feature on profile",
"account.unfollow": "Követés abbahagyása",
"account.unmute": "@{name} kinémítása",
"account.unmute_notifications": "@{name} értesítéseinek kinémítása",
"alert.unexpected.message": "An unexpected error occurred.",
"alert.unexpected.title": "Oops!",
"boost_modal.combo": "Megnyomhatod {combo}, hogy átugord következő alkalommal",
"account.show_reblogs": "@{name} megtolásainak mutatása",
"account.unblock": "@{name} letiltásának feloldása",
"account.unblock_domain": "{domain} elrejtésének feloldása",
"account.unendorse": "Kiemelés törlése a profilodról",
"account.unfollow": "Követés vége",
"account.unmute": "@{name} némítás feloldása",
"account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
"alert.unexpected.message": "Váratlan hiba történt.",
"alert.unexpected.title": "Hoppá!",
"boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}",
"bundle_column_error.body": "Hiba történt a komponens betöltése közben.",
"bundle_column_error.retry": "Próbálja újra",
"bundle_column_error.retry": "Próbáld újra",
"bundle_column_error.title": "Hálózati hiba",
"bundle_modal_error.close": "Bezár",
"bundle_modal_error.close": "Bezárás",
"bundle_modal_error.message": "Hiba történt a komponens betöltésekor.",
"bundle_modal_error.retry": "Próbálja újra",
"bundle_modal_error.retry": "Próbáld újra",
"column.blocks": "Letiltott felhasználók",
"column.community": "Helyi idővonal",
"column.direct": "Direct messages",
"column.domain_blocks": "Hidden domains",
"column.direct": "Közvetlen üzenetek",
"column.domain_blocks": "Rejtett domainek",
"column.favourites": "Kedvencek",
"column.follow_requests": "Követési kérések",
"column.follow_requests": "Követési kérelmek",
"column.home": "Kezdőlap",
"column.lists": "Listák",
"column.mutes": "Némított felhasználók",
"column.notifications": "Értesítések",
"column.pins": "Kitűzött tülkölések",
"column.pins": "Kitűzött tülkök",
"column.public": "Nyilvános idővonal",
"column_back_button.label": "Vissza",
"column_header.hide_settings": "Beállítások elrejtése",
"column_header.moveLeft_settings": "Oszlop elmozdítása balra",
"column_header.moveRight_settings": "oszlop elmozdítása jobbra",
"column_header.pin": "Kitűz",
"column_header.moveRight_settings": "Oszlop elmozdítása jobbra",
"column_header.pin": "Kitűzés",
"column_header.show_settings": "Beállítások mutatása",
"column_header.unpin": "Kitűzés eltávolítása",
"column_subheading.settings": "Beállítások",
"community.column_settings.media_only": "Media Only",
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
"compose_form.direct_message_warning_learn_more": "Learn more",
"compose_form.hashtag_warning": "Ezen tülkölés nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak a publikus tülkölések kereshetőek hashtag-el.",
"compose_form.lock_disclaimer": "Az ön fiókja nincs {locked}. Bárki követni tud, hogy megtekintse a kizárt követőknek szánt üzeneteid.",
"community.column_settings.media_only": "Csak média",
"compose_form.direct_message_warning": "Ezt a tülköt csak a benne megemlített felhasználók láthatják majd.",
"compose_form.direct_message_warning_learn_more": "Több infó",
"compose_form.hashtag_warning": "Ez a tülköd nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak nyilvános tülkök kereshetőek hashtaggel.",
"compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt üzeneteidet.",
"compose_form.lock_disclaimer.lock": "lezárva",
"compose_form.placeholder": "Mire gondolsz?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.placeholder": "Mi jár a fejedben?",
"compose_form.poll.add_option": "Lehetőség hozzáadása",
"compose_form.poll.duration": "Szavazás időtartama",
"compose_form.poll.option_placeholder": "Lehetőség {number}",
"compose_form.poll.remove_option": "Lehetőség törlése",
"compose_form.publish": "Tülk",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "Text is hidden behind warning",
"compose_form.spoiler.unmarked": "Text is not hidden",
"compose_form.spoiler_placeholder": "Figyelmeztetését írja ide",
"confirmation_modal.cancel": "Bezár",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.confirm": "Letilt",
"confirmations.block.message": "Biztos benne, hogy le szeretné tiltani {name}?",
"confirmations.delete.confirm": "Töröl",
"confirmations.delete.message": "Biztos benne, hogy törölni szeretné ezt a státuszt?",
"confirmations.delete_list.confirm": "Töröl",
"confirmations.delete_list.message": "Biztos benne, hogy véglegesen törölni szeretné ezt a listát?",
"confirmations.domain_block.confirm": "Egész domain elrejtése",
"confirmations.domain_block.message": "Nagyon biztos abban, hogy le szeretné tiltani az egész {domain}-t? A legtöbb esetben néhány célszerű tiltás vagy némítás elegendő és kívánatosabb megoldás.",
"confirmations.mute.confirm": "Némít",
"confirmations.mute.message": "Biztos benne, hogy némítani szeretné {name}?",
"confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.reply.confirm": "Reply",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"compose_form.sensitive.hide": "Média megjelölése szenzitívként",
"compose_form.sensitive.marked": "A médiát szenzitívnek jelölték",
"compose_form.sensitive.unmarked": "A médiát nem jelölték szenzitívnek",
"compose_form.spoiler.marked": "A szöveg figyelmeztetés mögé van rejtve",
"compose_form.spoiler.unmarked": "A szöveg nem rejtett",
"compose_form.spoiler_placeholder": "Írd ide a figyelmeztetést",
"confirmation_modal.cancel": "Mégse",
"confirmations.block.block_and_report": "Letiltás és Bejelentés",
"confirmations.block.confirm": "Letiltás",
"confirmations.block.message": "Biztos, hogy le szeretnéd tiltani {name}?",
"confirmations.delete.confirm": "Törlés",
"confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a tülkölést?",
"confirmations.delete_list.confirm": "Törlés",
"confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?",
"confirmations.domain_block.confirm": "Teljes domain elrejtése",
"confirmations.domain_block.message": "Egészen biztos, hogy le szeretnéd tiltani a teljes {domain}-t? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se idővonalakon, se értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.",
"confirmations.mute.confirm": "Némítás",
"confirmations.mute.message": "Biztos, hogy némítani szeretnéd {name}?",
"confirmations.redraft.confirm": "Törlés és újraírás",
"confirmations.redraft.message": "Biztos, hogy ezt a tülköt szeretnéd törölni és újraírni? Minden megtolást és kedvencnek jelölést elvesztesz, az eredetire adott válaszok pedig elárvulnak.",
"confirmations.reply.confirm": "Válasz",
"confirmations.reply.message": "Ha most válaszolsz, ez felülírja a most szerkesztés alatt álló üzenetet. Mégis ezt szeretnéd?",
"confirmations.unfollow.confirm": "Követés visszavonása",
"confirmations.unfollow.message": "Biztos benne, hogy vissza szeretné vonni {name} követését?",
"embed.instructions": "Ágyazza be ezen státuszt weboldalába az alábbi kód másolásával.",
"confirmations.unfollow.message": "Biztos, hogy vissza szeretnéd vonni {name} követését?",
"embed.instructions": "Ágyazd be ezt a tülköt a weboldaladba az alábbi kód kimásolásával.",
"embed.preview": "Így fog kinézni:",
"emoji_button.activity": "Aktivitás",
"emoji_button.custom": "Egyéni",
@ -109,7 +109,7 @@
"emoji_button.food": "Étel és Ital",
"emoji_button.label": "Emoji beszúrása",
"emoji_button.nature": "Természet",
"emoji_button.not_found": "Nincsenek emojok!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "Nincsenek emojik!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Tárgyak",
"emoji_button.people": "Emberek",
"emoji_button.recent": "Gyakran használt",
@ -117,272 +117,272 @@
"emoji_button.search_results": "Keresési találatok",
"emoji_button.symbols": "Szimbólumok",
"emoji_button.travel": "Utazás és Helyek",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
"empty_column.domain_blocks": "There are no hidden domains yet.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "Jelenleg nem található semmi ezen hashtaggel.",
"empty_column.home": "A hazai idővonala üres! Látogasd meg a {public} vagy használd a keresőt, hogy ismerj meg más felhasználókat.",
"empty_column.home.public_timeline": "publikus idővonal",
"empty_column.list": "A lista jelenleg üres. Mikor a listatagok új státuszt posztolnak itt meg fognak jelenni.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "Jelenleg nincsenek értesítései. Lépj kapcsolatba másokkal, hogy indítsd el a beszélgetést.",
"empty_column.public": "Jelenleg semmi nincs itt! Írj valamit publikusan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
"follow_request.authorize": "Engedélyez",
"follow_request.reject": "Visszautasít",
"getting_started.developers": "Developers",
"getting_started.directory": "Profile directory",
"getting_started.documentation": "Documentation",
"empty_column.account_timeline": "Itt nincs tülkölés!",
"empty_column.account_unavailable": "A profil nem elérhető",
"empty_column.blocks": "Még senkit sem tiltottál le.",
"empty_column.community": "A helyi idővonal üres. Tülkölj egyet nyilvánosan, hogy elindítsd az eseményeket!",
"empty_column.direct": "Még nincs egy közvetlen üzeneted sem. Ha küldesz vagy kapsz egyet, itt fog megjelenni.",
"empty_column.domain_blocks": "Még nem rejtettél el egyetlen domaint sem.",
"empty_column.favourited_statuses": "Még nincs egy kedvenc tülköd sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.",
"empty_column.favourites": "Még senki sem jelölte ezt a tülköt kedvencként. Ha valaki mégis megteszi, itt fogjuk mutatni.",
"empty_column.follow_requests": "Még nincs egy követési kérésed sem. Ha kapsz egyet, itt fogjuk feltüntetni.",
"empty_column.hashtag": "Jelenleg nem található semmi ezzel a hashtaggel.",
"empty_column.home": "A saját idővonalad üres! Látogasd meg a {public} -at vagy használd a keresőt, hogy megismerj másokat.",
"empty_column.home.public_timeline": "nyilvános idővonal",
"empty_column.list": "A lista jelenleg üres. Ha a listatagok tülkölnek, itt fognak megjelenni.",
"empty_column.lists": "Még nem hoztál létre listát. Ha csinálsz egyet, itt látszik majd.",
"empty_column.mutes": "Még egy felhasználót sem némítottál le.",
"empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.",
"empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
"follow_request.authorize": "Engedélyezés",
"follow_request.reject": "Visszautasítás",
"getting_started.developers": "Fejlesztőknek",
"getting_started.directory": "Profilok",
"getting_started.documentation": "Dokumentáció",
"getting_started.heading": "Első lépések",
"getting_started.invite": "Invite people",
"getting_started.open_source_notice": "Mastodon egy nyílt forráskódú szoftver. Hozzájárulás vagy problémák jelentése a GitHub-on {github}.",
"getting_started.security": "Security",
"getting_started.terms": "Terms of service",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"home.column_settings.basic": "Alap",
"home.column_settings.show_reblogs": "Ismétlések mutatása",
"getting_started.invite": "Mások meghívása",
"getting_started.open_source_notice": "A Mastodon nyílt forráskódú szoftver. Csatlakozhatsz a fejlesztéshez vagy jelenthetsz problémákat GitHub-on {github}.",
"getting_started.security": "Biztonság",
"getting_started.terms": "Felhasználási feltételek",
"hashtag.column_header.tag_mode.all": "és {additional}",
"hashtag.column_header.tag_mode.any": "vagy {additional}",
"hashtag.column_header.tag_mode.none": "nélküle {additional}",
"hashtag.column_settings.select.no_options_message": "Nincs javaslat",
"hashtag.column_settings.select.placeholder": "Addj meg hashtageket…",
"hashtag.column_settings.tag_mode.all": "Mindegyik",
"hashtag.column_settings.tag_mode.any": "Bármelyik",
"hashtag.column_settings.tag_mode.none": "Egyik sem",
"hashtag.column_settings.tag_toggle": "Új tagek felvétele ehhez az oszlophoz",
"home.column_settings.basic": "Alapértelmezések",
"home.column_settings.show_reblogs": "Megtolások mutatása",
"home.column_settings.show_replies": "Válaszok mutatása",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"introduction.federation.action": "Next",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.favourite.headline": "Favourite",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost",
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
"introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "vissza navigálás",
"keyboard_shortcuts.blocked": "to open blocked users list",
"keyboard_shortcuts.boost": "ismétlés",
"keyboard_shortcuts.column": "összpontosítson egy státuszra az egyik oszlopban",
"keyboard_shortcuts.compose": "fókuszálja a szerkesztési szövegdobozt",
"intervals.full.days": "{number, plural, one {# nap} other {# nap}}",
"intervals.full.hours": "{number, plural, one {# óra} other {# óra}}",
"intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}",
"introduction.federation.action": "Következő",
"introduction.federation.federated.headline": "Föderációs",
"introduction.federation.federated.text": "A fediverzum más szervereiről származó nyilvános tülkök a föderációs idővonalon jelennek meg.",
"introduction.federation.home.headline": "Saját",
"introduction.federation.home.text": "A saját idővonaladon az általad követettek tülkjei jelennek meg. Bárkit követhetsz bármely szerveren.",
"introduction.federation.local.headline": "Helyi",
"introduction.federation.local.text": "A helyi idővonalon a veled közös szerveren lévő emberek nyilvános tülkjei jelennek meg.",
"introduction.interactions.action": "Oktatóanyag befejezése!",
"introduction.interactions.favourite.headline": "Kedvenc",
"introduction.interactions.favourite.text": "A kedvenc funkcióval elrakhatsz későbbre egy tülköt, illetve közölheted a szerzővel, hogy tetszett a megosztása.",
"introduction.interactions.reblog.headline": "Megtolás",
"introduction.interactions.reblog.text": "A saját követőiddel mások tülkjeit is megoszthatod úgy, hogy megtolod őket.",
"introduction.interactions.reply.headline": "Válasz",
"introduction.interactions.reply.text": "Saját vagy mások tülkjeire válaszolva egy beszélgetési láncot alakíthatsz ki.",
"introduction.welcome.action": "Csapjunk bele!",
"introduction.welcome.headline": "Első lépések",
"introduction.welcome.text": "Üdv a fediverzumban! Pár pillanat múlva már küldheted is üzeneteidet barátaidnak bármely szerveren. Ez a szerver {domain} viszont különleges. Ez tartja nyilván a profilod, szóval jegyezd meg a nevét.",
"keyboard_shortcuts.back": "visszafelé navigálás",
"keyboard_shortcuts.blocked": "letiltott felhasználók listájának megnyitása",
"keyboard_shortcuts.boost": "megtolás",
"keyboard_shortcuts.column": "fókuszálás egy tülkre az egyik oszlopban",
"keyboard_shortcuts.compose": "fókuszálás a szerkesztési szövegdobozra",
"keyboard_shortcuts.description": "Leírás",
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.direct": "közvetlen üzenetek megnyitása",
"keyboard_shortcuts.down": "lefele navigálás a listában",
"keyboard_shortcuts.enter": "státusz megnyitása",
"keyboard_shortcuts.favourite": "kedvenccé tétel",
"keyboard_shortcuts.favourites": "to open favourites list",
"keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "Billentyű rövidítések",
"keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.enter": "tülk megnyitása",
"keyboard_shortcuts.favourite": "kedvencnek jelölés",
"keyboard_shortcuts.favourites": "kedvenc lista megnyitása",
"keyboard_shortcuts.federated": "föderációs idővonal megnyitása",
"keyboard_shortcuts.heading": "Billentyűparancsok",
"keyboard_shortcuts.home": "saját idővonal megnyitása",
"keyboard_shortcuts.hotkey": "Gyorsbillentyű",
"keyboard_shortcuts.legend": "jelmagyarázat megjelenítése",
"keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.mention": "szerző megjelenítése",
"keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "válaszolás",
"keyboard_shortcuts.requests": "to open follow requests list",
"keyboard_shortcuts.search": "kereső kiemelése",
"keyboard_shortcuts.start": "to open \"get started\" column",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toot": "új tülk megkezdése",
"keyboard_shortcuts.local": "helyi idővonal megnyitása",
"keyboard_shortcuts.mention": "szerző megemlítése",
"keyboard_shortcuts.muted": "némított felhasználók listájának megnyitása",
"keyboard_shortcuts.my_profile": "profilod megnyitása",
"keyboard_shortcuts.notifications": "értesítések megnyitása",
"keyboard_shortcuts.pinned": "kitűzött tülkök listájának megnyitása",
"keyboard_shortcuts.profile": "szerző profiljának megnyitása",
"keyboard_shortcuts.reply": "válasz",
"keyboard_shortcuts.requests": "követési kérések listájának megnyitása",
"keyboard_shortcuts.search": "fókuszálás a keresőre",
"keyboard_shortcuts.start": "\"Első lépések\" megnyitása",
"keyboard_shortcuts.toggle_hidden": "tartalmi figyelmeztetéssel ellátott szöveg mutatása/elrejtése",
"keyboard_shortcuts.toggle_sensitivity": "média mutatása/elrejtése",
"keyboard_shortcuts.toot": "új tülk írása",
"keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele",
"keyboard_shortcuts.up": "fennebb helyezés a listában",
"keyboard_shortcuts.up": "felfelé mozdítás a listában",
"lightbox.close": "Bezárás",
"lightbox.next": "Következő",
"lightbox.previous": "Előző",
"lightbox.view_context": "View context",
"lightbox.view_context": "Kontextus megtekintése",
"lists.account.add": "Hozzáadás a listához",
"lists.account.remove": "Eltávolít a listából",
"lists.account.remove": "Eltávolítás a listából",
"lists.delete": "Lista törlése",
"lists.edit": "Lista szerkesztése",
"lists.edit.submit": "Change title",
"lists.edit.submit": "Cím megváltoztatása",
"lists.new.create": "Lista hozzáadása",
"lists.new.title_placeholder": "Új lista cím",
"lists.search": "Keresés a követtett személyek között",
"lists.new.title_placeholder": "Új lista címe",
"lists.search": "Keresés a követett személyek között",
"lists.subheading": "Listáid",
"loading_indicator.label": "Betöltés...",
"media_gallery.toggle_visible": "Láthatóság váltása",
"media_gallery.toggle_visible": "Láthatóság áltása",
"missing_indicator.label": "Nincs találat",
"missing_indicator.sublabel": "Ezen forrás nem található",
"mute_modal.hide_notifications": "Értesítések elrejtése ezen felhasználótól?",
"navigation_bar.apps": "Mobile apps",
"navigation_bar.blocks": "Tiltott felhasználók",
"missing_indicator.sublabel": "Ez az erőforrás nem található",
"mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?",
"navigation_bar.apps": "Mobil appok",
"navigation_bar.blocks": "Letiltott felhasználók",
"navigation_bar.community_timeline": "Helyi idővonal",
"navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Direct messages",
"navigation_bar.discover": "Discover",
"navigation_bar.domain_blocks": "Hidden domains",
"navigation_bar.compose": "Új tülk írása",
"navigation_bar.direct": "Közvetlen üzenetek",
"navigation_bar.discover": "Felfedezés",
"navigation_bar.domain_blocks": "Rejtett domainek",
"navigation_bar.edit_profile": "Profil szerkesztése",
"navigation_bar.favourites": "Kedvencek",
"navigation_bar.filters": "Muted words",
"navigation_bar.follow_requests": "Követési kérések",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.info": "Ezen szerverről",
"navigation_bar.filters": "Némított szavak",
"navigation_bar.follow_requests": "Követési kérelmek",
"navigation_bar.follows_and_followers": "Követettek és követők",
"navigation_bar.info": "Erről a szerverről",
"navigation_bar.keyboard_shortcuts": "Gyorsbillentyűk",
"navigation_bar.lists": "Listák",
"navigation_bar.logout": "Kijelentkezés",
"navigation_bar.mutes": "Némított felhasználók",
"navigation_bar.personal": "Personal",
"navigation_bar.personal": "Személyes",
"navigation_bar.pins": "Kitűzött tülkök",
"navigation_bar.preferences": "Beállítások",
"navigation_bar.profile_directory": "Profile directory",
"navigation_bar.public_timeline": "Nyilvános időfolyam",
"navigation_bar.security": "Security",
"notification.favourite": "{name} kedvencnek jelölte az állapotod",
"navigation_bar.profile_directory": "Profilok",
"navigation_bar.public_timeline": "Föderációs idővonal",
"navigation_bar.security": "Biztonság",
"notification.favourite": "{name} kedvencnek jelölte egy tülködet",
"notification.follow": "{name} követ téged",
"notification.mention": "{name} megemlített",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} rebloggolta az állapotod",
"notification.poll": "Egy szavazás, melyben részt vettél, véget ért",
"notification.reblog": "{name} megtolta a tülködet",
"notifications.clear": "Értesítések törlése",
"notifications.clear_confirmation": "Biztos benne, hogy véglegesen törölni akarja az összes értesítését?",
"notifications.column_settings.alert": "Asztali gépi értesítések",
"notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?",
"notifications.column_settings.alert": "Asztali értesítések",
"notifications.column_settings.favourite": "Kedvencek:",
"notifications.column_settings.filter_bar.advanced": "Display all categories",
"notifications.column_settings.filter_bar.category": "Quick filter bar",
"notifications.column_settings.filter_bar.show": "Show",
"notifications.column_settings.filter_bar.advanced": "Minden kategória mutatása",
"notifications.column_settings.filter_bar.category": "Gyorskereső mező",
"notifications.column_settings.filter_bar.show": "Mutat",
"notifications.column_settings.follow": "Új követők:",
"notifications.column_settings.mention": "Megemítéseim:",
"notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.mention": "Megemlítéseid:",
"notifications.column_settings.poll": "Szavazás eredménye:",
"notifications.column_settings.push": "Push értesítések",
"notifications.column_settings.reblog": "Rebloggolások:",
"notifications.column_settings.reblog": "Megtolások:",
"notifications.column_settings.show": "Oszlopban mutatás",
"notifications.column_settings.sound": "Hang lejátszása",
"notifications.filter.all": "All",
"notifications.filter.boosts": "Boosts",
"notifications.filter.favourites": "Favourites",
"notifications.filter.follows": "Follows",
"notifications.filter.mentions": "Mentions",
"notifications.filter.polls": "Poll results",
"notifications.group": "{count} notifications",
"poll.closed": "Closed",
"poll.refresh": "Refresh",
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "Vote",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"privacy.change": "Státusz láthatóságának módosítása",
"privacy.direct.long": "Posztolás csak az említett felhasználóknak",
"privacy.direct.short": "Egyenesen",
"privacy.private.long": "Posztolás csak követőknek",
"notifications.filter.all": "Mind",
"notifications.filter.boosts": "Megtolások",
"notifications.filter.favourites": "Kedvencnek jelölések",
"notifications.filter.follows": "Követések",
"notifications.filter.mentions": "Megemlítések",
"notifications.filter.polls": "Szavazások eredményei",
"notifications.group": "{count} értesítés",
"poll.closed": "Lezárva",
"poll.refresh": "Frissítés",
"poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}",
"poll.vote": "Szavazás",
"poll_button.add_poll": "Új szavazás",
"poll_button.remove_poll": "Szavazás törlése",
"privacy.change": "Tülk láthatóságának módosítása",
"privacy.direct.long": "Tülk csak az említett felhasználóknak",
"privacy.direct.short": "Közvetlen",
"privacy.private.long": "Tülk csak követőknek",
"privacy.private.short": "Csak követőknek",
"privacy.public.long": "Posztolás a publikus idővonalakra",
"privacy.public.short": "Publikus",
"privacy.unlisted.long": "Do not show in public timelines",
"privacy.public.long": "Tülk a nyilvános idővonalra",
"privacy.public.short": "Nyilvános",
"privacy.unlisted.long": "Ne mutassuk nyilvános idővonalon",
"privacy.unlisted.short": "Listázatlan",
"regeneration_indicator.label": "Töltődik…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"regeneration_indicator.sublabel": "A saját idővonalad épp készül!",
"relative_time.days": "{number}nap",
"relative_time.hours": "{number}ó",
"relative_time.just_now": "most",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.minutes": "{number}p",
"relative_time.seconds": "{number}mp",
"reply_indicator.cancel": "Mégsem",
"report.forward": "Forward to {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
"report.placeholder": "További kommentek",
"report.submit": "Submit",
"report.target": "Reporting",
"report.forward": "Továbbítás neki {target}",
"report.forward_hint": "Ez a fiók egy másik szerverről van. Küldjünk oda is egy anonimizált bejelentést?",
"report.hint": "A bejelentést a szervered moderátorainak küldjük el. Megmagyarázhatod, miért jelented az alábbi problémát:",
"report.placeholder": "További megjegyzések",
"report.submit": "Küldés",
"report.target": "{target} jelentése",
"search.placeholder": "Keresés",
"search_popout.search_format": "Fejlett keresés",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.search_format": "Haladó keresés",
"search_popout.tips.full_text": "Egyszerű szöveg. Illeszkedő, általad írt tülköket, kedvencnek jelöléseket, megtolást, megemlítést, felhasználói nevet, megjelenített nevet, hashtageket ad majd vissza.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.status": "tülk",
"search_popout.tips.text": "Egyszerű szöveg. Illeszkedő megjelenített nevet, felhasználói nevet, hashtageket ad majd vissza",
"search_popout.tips.user": "felhasználó",
"search_results.accounts": "People",
"search_results.hashtags": "Hashtags",
"search_results.statuses": "Toots",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "Block @{name}",
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "Ezen státusz nem rebloggolható",
"status.copy": "Copy link to status",
"search_results.accounts": "Emberek",
"search_results.hashtags": "Hashtagek",
"search_results.statuses": "Tülkök",
"search_results.total": "{count, number} {count, plural, one {találat} other {találat}}",
"status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz",
"status.admin_status": "Tülk megnyitása moderációra",
"status.block": "@{name} letiltása",
"status.cancel_reblog_private": "Megtolás törlése",
"status.cannot_reblog": "Ez a tülk nem tolható meg",
"status.copy": "Link másolása tülkbe",
"status.delete": "Törlés",
"status.detailed_status": "Detailed conversation view",
"status.direct": "Direct message @{name}",
"status.embed": "Beágyaz",
"status.detailed_status": "Részletes beszélgetési nézet",
"status.direct": "Közvetlen üzenet @{name} számára",
"status.embed": "Beágyazás",
"status.favourite": "Kedvenc",
"status.filtered": "Filtered",
"status.filtered": "Megszűrt",
"status.load_more": "Többet",
"status.media_hidden": "Média elrejtve",
"status.mention": "Említés",
"status.mention": "@{name} említése",
"status.more": "Többet",
"status.mute": "@{name} némítása",
"status.mute_conversation": "Beszélgetés némítása",
"status.open": "Státusz kinagyítása",
"status.open": "Tülk kibontása",
"status.pin": "Kitűzés a profilra",
"status.pinned": "Pinned toot",
"status.read_more": "Read more",
"status.reblog": "Reblog",
"status.reblog_private": "Boost to original audience",
"status.reblogged_by": "{name} reblogolta",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.pinned": "Kitűzött tülk",
"status.read_more": "Bővebben",
"status.reblog": "Megtolás",
"status.reblog_private": "Megtolás az eredeti közönségnek",
"status.reblogged_by": "{name} megtolta",
"status.reblogs.empty": "Senki sem tolta még meg ezt a tülköt. Ha valaki megteszi, itt fog megjelenni.",
"status.redraft": "Törlés és újraírás",
"status.reply": "Válasz",
"status.replyAll": "Válaszolj a beszélgetésre",
"status.report": "Report @{name}",
"status.sensitive_warning": "Érzékeny tartalom",
"status.replyAll": "Válasz a beszélgetésre",
"status.report": "@{name} jelentése",
"status.sensitive_warning": "Szenzitív tartalom",
"status.share": "Megosztás",
"status.show_less": "Kevesebb",
"status.show_less_all": "Show less for all",
"status.show_less": "Kevesebbet",
"status.show_less_all": "Kevesebbet mindenhol",
"status.show_more": "Többet",
"status.show_more_all": "Show more for all",
"status.show_thread": "Show thread",
"status.unmute_conversation": "Beszélgetés némításának elvonása",
"status.unpin": "Kitűzés eltávolítása a profilról",
"suggestions.dismiss": "Dismiss suggestion",
"suggestions.header": "You might be interested in…",
"tabs_bar.federated_timeline": "Federált",
"tabs_bar.home": "Kezdőlap",
"tabs_bar.local_timeline": "Local",
"status.show_more_all": "Többet mindenhol",
"status.show_thread": "Szál mutatása",
"status.unmute_conversation": "Beszélgetés némításának kikapcsolása",
"status.unpin": "Kitűzés eltávolítása a profilodról",
"suggestions.dismiss": "Javaslat elvetése",
"suggestions.header": "Esetleg érdekelhet…",
"tabs_bar.federated_timeline": "Föderációs",
"tabs_bar.home": "Saját",
"tabs_bar.local_timeline": "Helyi",
"tabs_bar.notifications": "Értesítések",
"tabs_bar.search": "Search",
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.",
"upload_area.title": "Húzza ide a feltöltéshez",
"upload_button.label": "Média hozzáadása",
"upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired",
"upload_form.focus": "Crop",
"tabs_bar.search": "Keresés",
"time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra",
"time_remaining.hours": "{number, plural, one {# óra} other {# óra}} van hátra",
"time_remaining.minutes": "{number, plural, one {# perc} other {# perc}} van hátra",
"time_remaining.moments": "Pillanatok vannak hátra",
"time_remaining.seconds": "{number, plural, one {# másodperc} other {# másodperc}} van hátra",
"trends.count_by_accounts": "{count} {rawCount, plural, one {résztvevő} other {résztvevő}} beszélget",
"ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodon-t.",
"upload_area.title": "Húzd ide a feltöltéshez",
"upload_button.label": "Média hozzáadása (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "Túllépted a fájl feltöltési limitet.",
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
"upload_form.description": "Leírás látáskorlátozottak számára",
"upload_form.focus": "Előnézet megváltoztatása",
"upload_form.undo": "Mégsem",
"upload_progress.label": "Uploading...",
"video.close": "Close video",
"video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video",
"video.fullscreen": "Full screen",
"video.hide": "Hide video",
"video.mute": "Mute sound",
"upload_progress.label": "Feltöltés...",
"video.close": "Videó bezárása",
"video.exit_fullscreen": "Kilépés teljes képernyőből",
"video.expand": "Videó nagyítása",
"video.fullscreen": "Teljes képernyő",
"video.hide": "Videó elrejtése",
"video.mute": "Hang némitása",
"video.pause": "Szünet",
"video.play": "Lejátszás",
"video.unmute": "Hang kinémítása"
"video.unmute": "Hang némitásának vége"
}

View file

@ -40,7 +40,7 @@
"boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta",
"bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.",
"bundle_column_error.retry": "Riprova",
"bundle_column_error.title": "Network error",
"bundle_column_error.title": "Errore di rete",
"bundle_modal_error.close": "Chiudi",
"bundle_modal_error.message": "C'è stato un errore mentre questo componente veniva caricato.",
"bundle_modal_error.retry": "Riprova",
@ -71,20 +71,20 @@
"compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.",
"compose_form.lock_disclaimer.lock": "bloccato",
"compose_form.placeholder": "A cosa stai pensando?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.add_option": "Aggiungi una scelta",
"compose_form.poll.duration": "Durata del sondaggio",
"compose_form.poll.option_placeholder": "Scelta {number}",
"compose_form.poll.remove_option": "Rimuovi questa scelta",
"compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.hide": "Segna media come sensibile",
"compose_form.sensitive.marked": "Questo media è contrassegnato come sensibile",
"compose_form.sensitive.unmarked": "Questo media non è contrassegnato come sensibile",
"compose_form.spoiler.marked": "Il testo è nascosto dall'avviso",
"compose_form.spoiler.unmarked": "Il testo non è nascosto",
"compose_form.spoiler_placeholder": "Content warning",
"confirmation_modal.cancel": "Annulla",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "Blocca & Segnala",
"confirmations.block.confirm": "Blocca",
"confirmations.block.message": "Sei sicuro di voler bloccare {name}?",
"confirmations.delete.confirm": "Cancella",
@ -118,7 +118,7 @@
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Viaggi e luoghi",
"empty_column.account_timeline": "Non ci sono toot qui!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.account_unavailable": "Profilo non disponibile",
"empty_column.blocks": "Non hai ancora bloccato nessun utente.",
"empty_column.community": "La timeline locale è vuota. Condividi qualcosa pubblicamente per dare inizio alla festa!",
"empty_column.direct": "Non hai ancora nessun messaggio diretto. Quando ne manderai o riceverai qualcuno, apparirà qui.",
@ -156,15 +156,15 @@
"home.column_settings.basic": "Semplice",
"home.column_settings.show_reblogs": "Mostra post condivisi",
"home.column_settings.show_replies": "Mostra risposte",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
"introduction.federation.action": "Avanti",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.federated.headline": "Federato",
"introduction.federation.federated.text": "I post pubblici provenienti da altri server del fediverse saranno mostrati nella timeline federata.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "I post scritti da persone che segui saranno mostrati nella timeline home. Puoi seguire chiunque su qualunque server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.headline": "Locale",
"introduction.federation.local.text": "I post pubblici scritti da persone sul tuo stesso server saranno mostrati nella timeline locale.",
"introduction.interactions.action": "Finisci il tutorial!",
"introduction.interactions.favourite.headline": "Apprezza",
@ -204,17 +204,17 @@
"keyboard_shortcuts.search": "per spostare il focus sulla ricerca",
"keyboard_shortcuts.start": "per aprire la colonna \"Come iniziare\"",
"keyboard_shortcuts.toggle_hidden": "per mostrare/nascondere il testo dei CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toggle_sensitivity": "mostrare/nascondere media",
"keyboard_shortcuts.toot": "per iniziare a scrivere un toot completamente nuovo",
"keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca",
"keyboard_shortcuts.up": "per spostarsi in alto nella lista",
"lightbox.close": "Chiudi",
"lightbox.next": "Successivo",
"lightbox.previous": "Precedente",
"lightbox.view_context": "View context",
"lightbox.view_context": "Mostra contesto",
"lists.account.add": "Aggiungi alla lista",
"lists.account.remove": "Togli dalla lista",
"lists.delete": "Delete list",
"lists.delete": "Elimina lista",
"lists.edit": "Modifica lista",
"lists.edit.submit": "Cambia titolo",
"lists.new.create": "Aggiungi lista",
@ -243,16 +243,16 @@
"navigation_bar.lists": "Liste",
"navigation_bar.logout": "Esci",
"navigation_bar.mutes": "Utenti silenziati",
"navigation_bar.personal": "Personal",
"navigation_bar.personal": "Personale",
"navigation_bar.pins": "Toot fissati in cima",
"navigation_bar.preferences": "Impostazioni",
"navigation_bar.profile_directory": "Profile directory",
"navigation_bar.profile_directory": "Directory dei profili",
"navigation_bar.public_timeline": "Timeline federata",
"navigation_bar.security": "Sicurezza",
"notification.favourite": "{name} ha apprezzato il tuo post",
"notification.follow": "{name} ha iniziato a seguirti",
"notification.mention": "{name} ti ha menzionato",
"notification.poll": "A poll you have voted in has ended",
"notification.poll": "Un sondaggio in cui hai votato è terminato",
"notification.reblog": "{name} ha condiviso il tuo post",
"notifications.clear": "Cancella notifiche",
"notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?",
@ -263,7 +263,7 @@
"notifications.column_settings.filter_bar.show": "Mostra",
"notifications.column_settings.follow": "Nuovi seguaci:",
"notifications.column_settings.mention": "Menzioni:",
"notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.poll": "Risultati del sondaggio:",
"notifications.column_settings.push": "Notifiche push",
"notifications.column_settings.reblog": "Post condivisi:",
"notifications.column_settings.show": "Mostra in colonna",
@ -273,14 +273,14 @@
"notifications.filter.favourites": "Apprezzati",
"notifications.filter.follows": "Seguaci",
"notifications.filter.mentions": "Menzioni",
"notifications.filter.polls": "Poll results",
"notifications.filter.polls": "Risultati del sondaggio",
"notifications.group": "{count} notifiche",
"poll.closed": "Chiuso",
"poll.refresh": "Aggiorna",
"poll.total_votes": "{count, plural, one {# voto} other {# voti}}",
"poll.vote": "Vota",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"poll_button.add_poll": "Aggiungi un sondaggio",
"poll_button.remove_poll": "Rimuovi sondaggio",
"privacy.change": "Modifica privacy del post",
"privacy.direct.long": "Invia solo a utenti menzionati",
"privacy.direct.short": "Diretto",
@ -292,8 +292,8 @@
"privacy.unlisted.short": "Non elencato",
"regeneration_indicator.label": "Caricamento in corso…",
"regeneration_indicator.sublabel": "Stiamo preparando il tuo home feed!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.days": "{number}g",
"relative_time.hours": "{number}o",
"relative_time.just_now": "ora",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
@ -307,8 +307,8 @@
"search.placeholder": "Cerca",
"search_popout.search_format": "Formato di ricerca avanzato",
"search_popout.tips.full_text": "Testo semplice per trovare gli status che hai scritto, segnato come apprezzati, condiviso o in cui sei stato citato, e inoltre i nomi utente, nomi visualizzati e hashtag che lo contengono.",
"search_popout.tips.hashtag": "hashtag",
"search_popout.tips.status": "status",
"search_popout.tips.hashtag": "etichetta",
"search_popout.tips.status": "stato",
"search_popout.tips.text": "Testo semplice per trovare nomi visualizzati, nomi utente e hashtag che lo contengono",
"search_popout.tips.user": "utente",
"search_results.accounts": "Gente",
@ -371,7 +371,7 @@
"upload_area.title": "Trascina per caricare",
"upload_button.label": "Aggiungi file multimediale",
"upload_error.limit": "Limite al caricamento di file superato.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_error.poll": "Caricamento file non consentito nei sondaggi.",
"upload_form.description": "Descrizione per utenti con disabilità visive",
"upload_form.focus": "Modifica anteprima",
"upload_form.undo": "Cancella",

View file

@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count}人がトゥート",
"ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。",
"upload_area.title": "ドラッグ&ドロップでアップロード",
"upload_button.label": "メディアを追加 (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "メディアを追加 ({formats})",
"upload_error.limit": "アップロードできる上限を超えています。",
"upload_error.poll": "アンケートではファイルをアップロードできません。",
"upload_form.description": "視覚障害者のための説明",

View file

@ -361,15 +361,15 @@
"tabs_bar.local_timeline": "Lokaal",
"tabs_bar.notifications": "Meldingen",
"tabs_bar.search": "Zoeken",
"time_remaining.days": "{number, plural, one {# dag} other {# dagen}} left",
"time_remaining.hours": "{number, plural, one {# uur} other {# uur}} left",
"time_remaining.minutes": "{number, plural, one {# minuut} other {# minuten}} left",
"time_remaining.days": "{number, plural, one {# dag} other {# dagen}} te gaan",
"time_remaining.hours": "{number, plural, one {# uur} other {# uur}} te gaan",
"time_remaining.minutes": "{number, plural, one {# minuut} other {# minuten}} te gaan",
"time_remaining.moments": "Nog enkele ogenblikken resterend",
"time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} left",
"time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} te gaan",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover",
"ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.",
"upload_area.title": "Hierin slepen om te uploaden",
"upload_button.label": "Media toevoegen (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_area.title": "Hiernaar toe slepen om te uploaden",
"upload_button.label": "Media toevoegen ({formats})",
"upload_error.limit": "Uploadlimiet van bestand overschreden.",
"upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.",
"upload_form.description": "Omschrijf dit voor mensen met een visuele beperking",

View file

@ -1,5 +1,5 @@
{
"account.add_or_remove_from_list": "Pridaj, alebo odstráň zo zoznamov",
"account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov",
"account.badges.bot": "Bot",
"account.block": "Blokuj @{name}",
"account.block_domain": "Ukry všetko z {domain}",
@ -36,7 +36,7 @@
"account.unmute": "Prestaň ignorovať @{name}",
"account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}",
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
"alert.unexpected.title": "Oops!",
"alert.unexpected.title": "Ups!",
"boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie",
"bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.",
"bundle_column_error.retry": "Skús to znova",
@ -77,14 +77,14 @@
"compose_form.poll.remove_option": "Odstráň túto voľbu",
"compose_form.publish": "Pošli",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.hide": "Označ médiá ako chúlostivé",
"compose_form.sensitive.marked": "Médiálny obsah je označený ako chúlostivý",
"compose_form.sensitive.unmarked": "Médiálny obsah nieje označený ako chúlostivý",
"compose_form.spoiler.marked": "Text je ukrytý za varovaním",
"compose_form.spoiler.unmarked": "Text nieje ukrytý",
"compose_form.spoiler_placeholder": "Sem napíš tvoje varovanie",
"confirmation_modal.cancel": "Zruš",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "Zablokuj a nahlás",
"confirmations.block.confirm": "Blokuj",
"confirmations.block.message": "Si si istý/á, že chceš blokovať {name}?",
"confirmations.delete.confirm": "Vymaž",
@ -204,14 +204,14 @@
"keyboard_shortcuts.search": "zameraj sa na vyhľadávanie",
"keyboard_shortcuts.start": "otvor panel ''začíname''",
"keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toggle_sensitivity": "pre zobrazenie/skrytie médií",
"keyboard_shortcuts.toot": "začni úplne nový príspevok",
"keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie",
"keyboard_shortcuts.up": "posuň sa vyššie v zozname",
"lightbox.close": "Zatvor",
"lightbox.next": "Ďalšie",
"lightbox.previous": "Predchádzajúci",
"lightbox.view_context": "View context",
"lightbox.view_context": "Ukáž kontext",
"lists.account.add": "Pridaj do zoznamu",
"lists.account.remove": "Odober zo zoznamu",
"lists.delete": "Vymaž list",
@ -237,7 +237,7 @@
"navigation_bar.favourites": "Obľúbené",
"navigation_bar.filters": "Filtrované slová",
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.follows_and_followers": "Následovaní a sledovatelia",
"navigation_bar.info": "O tomto serveri",
"navigation_bar.keyboard_shortcuts": "Klávesové skratky",
"navigation_bar.lists": "Zoznamy",
@ -246,7 +246,7 @@
"navigation_bar.personal": "Osobné",
"navigation_bar.pins": "Pripnuté príspevky",
"navigation_bar.preferences": "Voľby",
"navigation_bar.profile_directory": "Profile directory",
"navigation_bar.profile_directory": "Katalóg profilov",
"navigation_bar.public_timeline": "Federovaná časová os",
"navigation_bar.security": "Zabezbečenie",
"notification.favourite": "{name} si obľúbil/a tvoj príspevok",
@ -292,11 +292,11 @@
"privacy.unlisted.short": "Verejne, ale nezobraziť v osi",
"regeneration_indicator.label": "Načítava sa…",
"regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}h",
"relative_time.days": "{number}d",
"relative_time.hours": "{number}hod",
"relative_time.just_now": "teraz",
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.minutes": "{number}min",
"relative_time.seconds": "{number}sek",
"reply_indicator.cancel": "Zrušiť",
"report.forward": "Posuň ku {target}",
"report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu hlásenia aj tam?",
@ -308,7 +308,7 @@
"search_popout.search_format": "Pokročilé vyhľadávanie",
"search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezívky, mená a haštagy.",
"search_popout.tips.hashtag": "haštag",
"search_popout.tips.status": "status",
"search_popout.tips.status": "príspevok",
"search_popout.tips.text": "Vráti jednoduchý textový výpis zhodujúcich sa mien, prezývok a haštagov",
"search_popout.tips.user": "užívateľ",
"search_results.accounts": "Ľudia",
@ -361,7 +361,7 @@
"tabs_bar.local_timeline": "Miestna",
"tabs_bar.notifications": "Oboznámenia",
"tabs_bar.search": "Hľadaj",
"time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}",
"time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}",
"time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}",
"time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}",
"time_remaining.moments": "Ostáva už iba chviľka",

View file

@ -13,10 +13,10 @@
"account.followers.empty": "Nihče ne sledi temu uporabniku.",
"account.follows": "Sledi",
"account.follows.empty": "Ta uporabnik še ne sledi nikomur.",
"account.follows_you": "Ti sledi",
"account.hide_reblogs": "Skrij sunke od @{name}",
"account.follows_you": "Sledi tebi",
"account.hide_reblogs": "Skrij spodbude od @{name}",
"account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}",
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
"account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.",
"account.media": "Mediji",
"account.mention": "Omeni @{name}",
"account.moved_to": "{name} se je premaknil na:",
@ -28,16 +28,16 @@
"account.report": "Prijavi @{name}",
"account.requested": "Čakanje na odobritev. Kliknite, da prekličete prošnjo za sledenje",
"account.share": "Delite profil osebe @{name}",
"account.show_reblogs": "Pokaži delitve osebe @{name}",
"account.show_reblogs": "Pokaži spodbude osebe @{name}",
"account.unblock": "Odblokiraj @{name}",
"account.unblock_domain": "Razkrij {domain}",
"account.unendorse": "Don't feature on profile",
"account.unendorse": "Ne vključi v profil",
"account.unfollow": "Prenehaj slediti",
"account.unmute": "Odtišaj @{name}",
"account.unmute_notifications": "Vklopi obvestila od @{name}",
"alert.unexpected.message": "Zgodila se je nepričakovana napaka.",
"alert.unexpected.title": "Uups!",
"boost_modal.combo": "Če želite naslednjič preskočiti to, lahko pritisnete {combo}",
"boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}",
"bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.",
"bundle_column_error.retry": "Poskusi ponovno",
"bundle_column_error.title": "Napaka omrežja",
@ -67,49 +67,49 @@
"community.column_settings.media_only": "Samo mediji",
"compose_form.direct_message_warning": "Ta tut bo viden le vsem omenjenim uporabnikom.",
"compose_form.direct_message_warning_learn_more": "Nauči se več",
"compose_form.hashtag_warning": "Ta tut ne bo naveden pod nobenim hashtagom, ker ni dodan hashtag. Samo javne tute lahko iščete pod hashtagom.",
"compose_form.hashtag_warning": "Ta tut ne bo naveden pod nobenim ključnikom, ker ni javen. Samo javne tute lahko iščete s ključniki.",
"compose_form.lock_disclaimer": "Vaš račun ni {locked}. Vsakdo vam lahko sledi in si ogleda objave, ki so namenjene samo sledilcem.",
"compose_form.lock_disclaimer.lock": "zaklenjen",
"compose_form.placeholder": "O čem razmišljaš?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.add_option": "Dodaj izbiro",
"compose_form.poll.duration": "Trajanje ankete",
"compose_form.poll.option_placeholder": "Izbira {number}",
"compose_form.poll.remove_option": "Odstrani to izbiro",
"compose_form.publish": "Tutni",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.hide": "Označi medij kot občutljiv",
"compose_form.sensitive.marked": "Medij je označen kot občutljiv",
"compose_form.sensitive.unmarked": "Medij ni označen kot občutljiv",
"compose_form.spoiler.marked": "Besedilo je skrito za opozorilom",
"compose_form.spoiler.unmarked": "Besedilo ni skrito",
"compose_form.spoiler_placeholder": "Napišite opozorilo tukaj",
"compose_form.spoiler_placeholder": "Tukaj napišite opozorilo",
"confirmation_modal.cancel": "Prekliči",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.confirm": "Block",
"confirmations.block.block_and_report": "Blokiraj in Prijavi",
"confirmations.block.confirm": "Blokiraj",
"confirmations.block.message": "Ali ste prepričani, da želite blokirati {name}?",
"confirmations.delete.confirm": "Delete",
"confirmations.delete.confirm": "Izbriši",
"confirmations.delete.message": "Ali ste prepričani, da želite izbrisati to stanje?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.confirm": "Izbriši",
"confirmations.delete_list.message": "Ali ste prepričani, da želite trajno izbrisati ta seznam?",
"confirmations.domain_block.confirm": "Skrij celotno domeno",
"confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše.",
"confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše. Vsebino iz te domene ne boste videli v javnih časovnicah ali obvestilih. Vaši sledilci iz te domene bodo odstranjeni.",
"confirmations.mute.confirm": "Utišanje",
"confirmations.mute.message": "Ali ste prepričani, da želite utišati {name}?",
"confirmations.redraft.confirm": "Izbriši in preoblikuj",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.reply.confirm": "Reply",
"confirmations.redraft.message": "Ali ste prepričani, da želite izbrisati ta status in ga preoblikovati? Vzljubi in spodbude bodo izgubljeni, odgovori na izvirno objavo pa bodo osiroteli.",
"confirmations.reply.confirm": "Odgovori",
"confirmations.reply.message": "Odgovarjanje bo prepisalo sporočilo, ki ga trenutno sestavljate. Ali ste prepričani, da želite nadaljevati?",
"confirmations.unfollow.confirm": "Prenehaj slediti",
"confirmations.unfollow.message": "Ali ste prepričani, da ne želite več slediti {name}?",
"embed.instructions": "Vstavi ta status na svojo spletno stran tako, da kopirate spodnjo kodo.",
"embed.preview": "Tukaj je, kako bo izgledalo:",
"embed.preview": "Tako bo izgledalo:",
"emoji_button.activity": "Dejavnost",
"emoji_button.custom": "Po meri",
"emoji_button.flags": "Zastave",
"emoji_button.food": "Hrana in Pijača",
"emoji_button.label": "Vstavi emojija",
"emoji_button.label": "Vstavi emotikon",
"emoji_button.nature": "Narava",
"emoji_button.not_found": "Ni emojijev!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "Ni emotikonov!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "Predmeti",
"emoji_button.people": "Ljudje",
"emoji_button.recent": "Pogosto uporabljeni",
@ -117,50 +117,50 @@
"emoji_button.search_results": "Rezultati iskanja",
"emoji_button.symbols": "Simboli",
"emoji_button.travel": "Potovanja in Kraji",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.account_timeline": "Tukaj ni tutov!",
"empty_column.account_unavailable": "Profil ni na voljo",
"empty_column.blocks": "Niste še blokirali nobenega uporabnika.",
"empty_column.community": "Lokalna časovnica je prazna. Napišite nekaj javnega, da se bo žoga zakotalila!",
"empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga pošljete ali prejmete, se prikaže tukaj.",
"empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga boste poslali ali prejeli, se bo prikazal tukaj.",
"empty_column.domain_blocks": "Še vedno ni skritih domen.",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "V tem hashtagu še ni nič.",
"empty_column.favourited_statuses": "Nimate priljubljenih tutov. Ko boste vzljubili kakšnega, se bo prikazal tukaj.",
"empty_column.favourites": "Nihče še ni vzljubil tega tuta. Ko ga bo nekdo, se bo pojavil tukaj.",
"empty_column.follow_requests": "Nimate prošenj za sledenje. Ko boste prejeli kakšno, se bo prikazala tukaj.",
"empty_column.hashtag": "V tem ključniku še ni nič.",
"empty_column.home": "Vaša domača časovnica je prazna! Obiščite {public} ali uporabite iskanje, da se boste srečali druge uporabnike.",
"empty_column.home.public_timeline": "javna časovnica",
"empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.",
"empty_column.mutes": "Niste utišali še nobenega uporabnika.",
"empty_column.notifications": "Nimate še nobenih obvestil. Poveži se z drugimi, da začnete pogovor.",
"empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih vozlišč",
"follow_request.authorize": "Odobri",
"empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov",
"follow_request.authorize": "Overi",
"follow_request.reject": "Zavrni",
"getting_started.developers": "Developers",
"getting_started.directory": "Profile directory",
"getting_started.documentation": "Documentation",
"getting_started.heading": "Prvi koraki",
"getting_started.invite": "Invite people",
"getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. V GitHubu na {github} lahko prispevate ali poročate o napakah.",
"getting_started.security": "Security",
"getting_started.terms": "Terms of service",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"getting_started.developers": "Razvijalci",
"getting_started.directory": "Imenik profilov",
"getting_started.documentation": "Dokumentacija",
"getting_started.heading": "Kako začeti",
"getting_started.invite": "Povabite osebe",
"getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. Na GitHubu na {github} lahko prispevate ali poročate o napakah.",
"getting_started.security": "Varnost",
"getting_started.terms": "Pogoji uporabe",
"hashtag.column_header.tag_mode.all": "in {additional}",
"hashtag.column_header.tag_mode.any": "ali {additional}",
"hashtag.column_header.tag_mode.none": "brez {additional}",
"hashtag.column_settings.select.no_options_message": "Ni najdenih predlogov",
"hashtag.column_settings.select.placeholder": "Vpiši ključnik…",
"hashtag.column_settings.tag_mode.all": "Vse našteto",
"hashtag.column_settings.tag_mode.any": "Karkoli od naštetega",
"hashtag.column_settings.tag_mode.none": "Nič od naštetega",
"hashtag.column_settings.tag_toggle": "V ta stolpec vključite dodatne oznake",
"home.column_settings.basic": "Osnovno",
"home.column_settings.show_reblogs": "Pokaži sunke",
"home.column_settings.show_reblogs": "Pokaži spodbude",
"home.column_settings.show_replies": "Pokaži odgovore",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"introduction.federation.action": "Next",
"introduction.federation.federated.headline": "Federated",
"intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}",
"intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}",
"intervals.full.minutes": "{number, plural, one {# minuta} two {# minuti} few {# minute} other {# minut}}",
"introduction.federation.action": "Naprej",
"introduction.federation.federated.headline": "Združeno",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",

View file

@ -11,12 +11,12 @@
"account.follow": "ติดตาม",
"account.followers": "ผู้ติดตาม",
"account.followers.empty": "ยังไม่มีใครติดตามผู้ใช้นี้",
"account.follows": "ติดตาม",
"account.follows": "การติดตาม",
"account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
"account.follows_you": "ติดตามคุณ",
"account.hide_reblogs": "ซ่อนการดันจาก @{name}",
"account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}",
"account.locked_info": "บัญชีนี้ถูกล็อคไว้ เจ้าของจะต้องรับรองการติดตามของคุณด้วย",
"account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง",
"account.media": "สื่อ",
"account.mention": "กล่าวถึง @{name}",
"account.moved_to": "{name} ได้ย้ายไปยัง:",
@ -37,7 +37,7 @@
"account.unmute_notifications": "เลิกปิดเสียงการแจ้งเตือนจาก @{name}",
"alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด",
"alert.unexpected.title": "อุปส์!",
"boost_modal.combo": "กด {combo} เพื่อข้าม",
"boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป",
"bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้",
"bundle_column_error.retry": "ลองอีกครั้ง",
"bundle_column_error.title": "ข้อผิดพลาดเครือข่าย",
@ -65,23 +65,23 @@
"column_header.unpin": "ถอนหมุด",
"column_subheading.settings": "การตั้งค่า",
"community.column_settings.media_only": "สื่อเท่านั้น",
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
"compose_form.direct_message_warning": "จะส่งโพสต์นี้ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น",
"compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม",
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
"compose_form.lock_disclaimer.lock": "locked",
"compose_form.placeholder": "What is on your mind?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาโดยแฮชแท็ก",
"compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ",
"compose_form.lock_disclaimer.lock": "ล็อคอยู่",
"compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?",
"compose_form.poll.add_option": "เพิ่มทางเลือก",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.option_placeholder": "ทางเลือก {number}",
"compose_form.poll.remove_option": "เอาทางเลือกนี้ออก",
"compose_form.publish": "โพสต์",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.marked": "Media is marked as sensitive",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "Text is hidden behind warning",
"compose_form.spoiler.unmarked": "Text is not hidden",
"compose_form.sensitive.hide": "ทำเครื่องหมายสื่อว่าละเอียดอ่อน",
"compose_form.sensitive.marked": "มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน",
"compose_form.sensitive.unmarked": "ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน",
"compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน",
"compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ",
"compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่",
"confirmation_modal.cancel": "ยกเลิก",
"confirmations.block.block_and_report": "ปิดกั้นแล้วรายงาน",
@ -91,25 +91,25 @@
"confirmations.delete.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้?",
"confirmations.delete_list.confirm": "ลบ",
"confirmations.delete_list.message": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้อย่างถาวร?",
"confirmations.domain_block.confirm": "Hide entire domain",
"confirmations.domain_block.confirm": "ซ่อนทั้งโดเมน",
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
"confirmations.mute.confirm": "ปิดเสียง",
"confirmations.mute.message": "คุณแน่ใจหรือไม่ว่าต้องการปิดเสียง {name}?",
"confirmations.redraft.confirm": "ลบแล้วร่างใหม่",
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
"confirmations.redraft.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้แล้วร่างใหม่? รายการโปรดและการดันจะหายไป และการตอบกลับโพสต์ดั้งเดิมจะไม่มีความเกี่ยวพัน",
"confirmations.reply.confirm": "ตอบกลับ",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.reply.message": "การตอบกลับตอนนี้จะเขียนทับข้อความที่คุณกำลังเขียน คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?",
"confirmations.unfollow.confirm": "เลิกติดตาม",
"confirmations.unfollow.message": "คุณแน่ใจหรือไม่ว่าต้องการเลิกติดตาม {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Here is what it will look like:",
"embed.instructions": "ฝังสถานะนี้ในเว็บไซต์ของคุณโดยคัดลอกโค้ดด้านล่าง",
"embed.preview": "นี่คือลักษณะที่จะปรากฏ:",
"emoji_button.activity": "กิจกรรม",
"emoji_button.custom": "กำหนดเอง",
"emoji_button.flags": "ธง",
"emoji_button.food": "อาหารและเครื่องดื่ม",
"emoji_button.label": "แทรกอีโมจิ",
"emoji_button.nature": "ธรรมชาติ",
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "ไม่มีอีโมโจ!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "วัตถุ",
"emoji_button.people": "ผู้คน",
"emoji_button.recent": "ที่ใช้บ่อย",
@ -118,22 +118,22 @@
"emoji_button.symbols": "สัญลักษณ์",
"emoji_button.travel": "การเดินทางและสถานที่",
"empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.blocks": "You haven't blocked any users yet.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
"empty_column.account_unavailable": "ไม่มีโปรไฟล์",
"empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ",
"empty_column.community": "เส้นเวลาในเว็บว่างเปล่า เขียนบางอย่างเป็นสาธารณะเพื่อเริ่มต้น!",
"empty_column.direct": "คุณยังไม่มีข้อความโดยตรงใด ๆ เมื่อคุณส่งหรือรับข้อความ ข้อความจะปรากฏที่นี่",
"empty_column.domain_blocks": "ยังไม่มีโดเมนที่ซ่อนอยู่",
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
"empty_column.hashtag": "There is nothing in this hashtag yet.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.",
"empty_column.favourited_statuses": "คุณยังไม่มีโพสต์ที่ชื่นชอบใด ๆ เมื่อคุณชื่นชอบโพสต์ โพสต์จะปรากฏที่นี่",
"empty_column.favourites": "ยังไม่มีใครชื่นชอบโพสต์นี้ เมื่อใครสักคนชื่นชอบ เขาจะปรากฏที่นี่",
"empty_column.follow_requests": "คุณยังไม่มีคำขอติดตามใด ๆ เมื่อคุณได้รับคำขอ คำขอจะปรากฏที่นี่",
"empty_column.hashtag": "ยังไม่มีสิ่งใดในแฮชแท็กนี้",
"empty_column.home": "เส้นเวลาหน้าแรกของคุณว่างเปล่า! เยี่ยมชม {public} หรือใช้การค้นหาเพื่อเริ่มต้นใช้งานและพบปะผู้ใช้อื่น ๆ",
"empty_column.home.public_timeline": "เส้นเวลาสาธารณะ",
"empty_column.list": "There is nothing in this list yet.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
"empty_column.mutes": "You haven't muted any users yet.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
"empty_column.list": "ยังไม่มีสิ่งใดในรายการนี้ เมื่อสมาชิกของรายการนี้โพสต์สถานะใหม่ สถานะจะปรากฏที่นี่",
"empty_column.lists": "คุณยังไม่มีรายการใด ๆ เมื่อคุณสร้างรายการ รายการจะปรากฏที่นี่",
"empty_column.mutes": "คุณยังไม่ได้ปิดเสียงผู้ใช้ใด ๆ",
"empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา",
"empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม",
"follow_request.authorize": "อนุญาต",
"follow_request.reject": "ปฏิเสธ",
"getting_started.developers": "นักพัฒนา",
@ -141,7 +141,7 @@
"getting_started.documentation": "เอกสารประกอบ",
"getting_started.heading": "เริ่มต้นใช้งาน",
"getting_started.invite": "เชิญผู้คน",
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
"getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์เปิดต้นฉบับ คุณสามารถมีส่วนร่วมหรือรายงานปัญหาใน GitHub ที่ {github}",
"getting_started.security": "ความปลอดภัย",
"getting_started.terms": "เงื่อนไขการให้บริการ",
"hashtag.column_header.tag_mode.all": "และ {additional}",
@ -149,10 +149,10 @@
"hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}",
"hashtag.column_settings.select.no_options_message": "ไม่พบข้อเสนอแนะ",
"hashtag.column_settings.select.placeholder": "ป้อนแฮชแท็ก…",
"hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"hashtag.column_settings.tag_mode.all": "ทั้งหมดนี้",
"hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้",
"hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้",
"hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้",
"home.column_settings.basic": "พื้นฐาน",
"home.column_settings.show_reblogs": "แสดงการดัน",
"home.column_settings.show_replies": "แสดงการตอบกลับ",
@ -160,58 +160,58 @@
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"introduction.federation.action": "ถัดไป",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.favourite.headline": "Favourite",
"introduction.federation.federated.headline": "ที่ติดต่อกับภายนอก",
"introduction.federation.federated.text": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของ Fediverse จะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก",
"introduction.federation.home.headline": "หน้าแรก",
"introduction.federation.home.text": "โพสต์จากผู้คนที่คุณติดตามจะปรากฏในฟีดหน้าแรกของคุณ คุณสามารถติดตามใครก็ตามในเซิร์ฟเวอร์ใดก็ตาม!",
"introduction.federation.local.headline": "ในเว็บ",
"introduction.federation.local.text": "โพสต์สาธารณะจากผู้คนในเซิร์ฟเวอร์เดียวกันกับคุณจะปรากฏในเส้นเวลาในเว็บ",
"introduction.interactions.action": "เสร็จสิ้นบทช่วยสอน!",
"introduction.interactions.favourite.headline": "ชื่นชอบ",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost",
"introduction.interactions.reblog.headline": "ดัน",
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
"introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.headline": "ตอบกลับ",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps",
"introduction.welcome.action": "ไปกันเลย!",
"introduction.welcome.headline": "ขั้นตอนแรก",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "to navigate back",
"keyboard_shortcuts.blocked": "to open blocked users list",
"keyboard_shortcuts.boost": "to boost",
"keyboard_shortcuts.column": "to focus a status in one of the columns",
"keyboard_shortcuts.compose": "to focus the compose textarea",
"keyboard_shortcuts.back": "เพื่อนำทางย้อนกลับ",
"keyboard_shortcuts.blocked": "เพื่อเปิดรายการผู้ใช้ที่ปิดกั้นอยู่",
"keyboard_shortcuts.boost": "เพื่อดัน",
"keyboard_shortcuts.column": "เพื่อโฟกัสสถานะในหนึ่งในคอลัมน์",
"keyboard_shortcuts.compose": "เพื่อโฟกัสพื้นที่เขียนข้อความ",
"keyboard_shortcuts.description": "คำอธิบาย",
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.down": "to move down in the list",
"keyboard_shortcuts.enter": "to open status",
"keyboard_shortcuts.favourite": "to favourite",
"keyboard_shortcuts.favourites": "to open favourites list",
"keyboard_shortcuts.federated": "to open federated timeline",
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
"keyboard_shortcuts.home": "to open home timeline",
"keyboard_shortcuts.direct": "เพื่อเปิดคอลัมน์ข้อความโดยตรง",
"keyboard_shortcuts.down": "เพื่อย้ายลงในรายการ",
"keyboard_shortcuts.enter": "เพื่อเปิดสถานะ",
"keyboard_shortcuts.favourite": "เพื่อชื่นชอบ",
"keyboard_shortcuts.favourites": "เพื่อเปิดรายการโปรด",
"keyboard_shortcuts.federated": "เพื่อเปิดเส้นเวลาที่ติดต่อกับภายนอก",
"keyboard_shortcuts.heading": "แป้นพิมพ์ลัด",
"keyboard_shortcuts.home": "เพื่อเปิดเส้นเวลาหน้าแรก",
"keyboard_shortcuts.hotkey": "ปุ่มลัด",
"keyboard_shortcuts.legend": "to display this legend",
"keyboard_shortcuts.local": "to open local timeline",
"keyboard_shortcuts.mention": "to mention author",
"keyboard_shortcuts.muted": "to open muted users list",
"keyboard_shortcuts.my_profile": "to open your profile",
"keyboard_shortcuts.notifications": "to open notifications column",
"keyboard_shortcuts.pinned": "to open pinned toots list",
"keyboard_shortcuts.profile": "to open author's profile",
"keyboard_shortcuts.reply": "to reply",
"keyboard_shortcuts.requests": "to open follow requests list",
"keyboard_shortcuts.search": "to focus search",
"keyboard_shortcuts.start": "to open \"get started\" column",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
"keyboard_shortcuts.toot": "to start a brand new toot",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
"keyboard_shortcuts.up": "to move up in the list",
"keyboard_shortcuts.legend": "เพื่อแสดงคำอธิบายนี้",
"keyboard_shortcuts.local": "เพื่อเปิดเส้นเวลาในเว็บ",
"keyboard_shortcuts.mention": "เพื่อกล่าวถึงผู้สร้าง",
"keyboard_shortcuts.muted": "เพื่อเปิดรายการผู้ใช้ที่ปิดเสียงอยู่",
"keyboard_shortcuts.my_profile": "เพื่อเปิดโปรไฟล์ของคุณ",
"keyboard_shortcuts.notifications": "เพื่อเปิดคอลัมน์การแจ้งเตือน",
"keyboard_shortcuts.pinned": "เพื่อเปิดรายการโพสต์ที่ปักหมุด",
"keyboard_shortcuts.profile": "เพื่อเปิดโปรไฟล์ของผู้สร้าง",
"keyboard_shortcuts.reply": "เพื่อตอบกลับ",
"keyboard_shortcuts.requests": "เพื่อเปิดรายการคำขอติดตาม",
"keyboard_shortcuts.search": "เพื่อโฟกัสการค้นหา",
"keyboard_shortcuts.start": "เพื่อเปิดคอลัมน์ \"เริ่มต้นใช้งาน\"",
"keyboard_shortcuts.toggle_hidden": "เพื่อแสดง/ซ่อนข้อความที่อยู่หลังคำเตือนเนื้อหา",
"keyboard_shortcuts.toggle_sensitivity": "เพื่อแสดง/ซ่อนสื่อ",
"keyboard_shortcuts.toot": "เพื่อเริ่มโพสต์ใหม่",
"keyboard_shortcuts.unfocus": "เพื่อเลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา",
"keyboard_shortcuts.up": "เพื่อย้ายขึ้นในรายการ",
"lightbox.close": "ปิด",
"lightbox.next": "ถัดไป",
"lightbox.previous": "ก่อนหน้า",
"lightbox.view_context": "View context",
"lightbox.view_context": "ดูบริบท",
"lists.account.add": "เพิ่มไปยังรายการ",
"lists.account.remove": "เอาออกจากรายการ",
"lists.delete": "ลบรายการ",
@ -237,7 +237,7 @@
"navigation_bar.favourites": "รายการโปรด",
"navigation_bar.filters": "คำที่ปิดเสียงอยู่",
"navigation_bar.follow_requests": "คำขอติดตาม",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม",
"navigation_bar.info": "เกี่ยวกับเซิร์ฟเวอร์นี้",
"navigation_bar.keyboard_shortcuts": "ปุ่มลัด",
"navigation_bar.lists": "รายการ",
@ -246,7 +246,7 @@
"navigation_bar.personal": "ส่วนบุคคล",
"navigation_bar.pins": "โพสต์ที่ปักหมุด",
"navigation_bar.preferences": "การกำหนดลักษณะ",
"navigation_bar.profile_directory": "Profile directory",
"navigation_bar.profile_directory": "ไดเรกทอรีโปรไฟล์",
"navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก",
"navigation_bar.security": "ความปลอดภัย",
"notification.favourite": "{name} ได้ชื่นชอบสถานะของคุณ",
@ -256,7 +256,7 @@
"notification.reblog": "{name} ได้ดันสถานะของคุณ",
"notifications.clear": "ล้างการแจ้งเตือน",
"notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?",
"notifications.column_settings.alert": "Desktop notifications",
"notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป",
"notifications.column_settings.favourite": "รายการโปรด:",
"notifications.column_settings.filter_bar.advanced": "แสดงหมวดหมู่ทั้งหมด",
"notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน",
@ -276,12 +276,12 @@
"notifications.filter.polls": "Poll results",
"notifications.group": "{count} การแจ้งเตือน",
"poll.closed": "ปิดแล้ว",
"poll.refresh": "Refresh",
"poll.refresh": "รีเฟรช",
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
"poll.vote": "Vote",
"poll_button.add_poll": "Add a poll",
"poll_button.remove_poll": "Remove poll",
"privacy.change": "Adjust status privacy",
"privacy.change": "ปรับเปลี่ยนความเป็นส่วนตัวของสถานะ",
"privacy.direct.long": "โพสต์ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น",
"privacy.direct.short": "โดยตรง",
"privacy.private.long": "โพสต์ไปยังผู้ติดตามเท่านั้น",
@ -291,7 +291,7 @@
"privacy.unlisted.long": "ไม่โพสต์ไปยังเส้นเวลาสาธารณะ",
"privacy.unlisted.short": "ไม่อยู่ในรายการ",
"regeneration_indicator.label": "กำลังโหลด…",
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
"regeneration_indicator.sublabel": "กำลังเตรียมฟีดหน้าแรกของคุณ!",
"relative_time.days": "{number} วัน",
"relative_time.hours": "{number} ชั่วโมง",
"relative_time.just_now": "ตอนนี้",
@ -299,17 +299,17 @@
"relative_time.seconds": "{number} วินาที",
"reply_indicator.cancel": "ยกเลิก",
"report.forward": "ส่งต่อไปยัง {target}",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
"report.forward_hint": "บัญชีมาจากเซิร์ฟเวอร์อื่น ส่งสำเนาของรายงานที่ไม่ระบุตัวตนไปที่นั่นด้วย?",
"report.hint": "จะส่งรายงานไปยังผู้ควบคุมเซิร์ฟเวอร์ของคุณ คุณสามารถให้คำอธิบายเหตุผลที่คุณรายงานบัญชีนี้ด้านล่าง:",
"report.placeholder": "ความคิดเห็นเพิ่มเติม",
"report.submit": "ส่ง",
"report.target": "กำลังรายงาน {target}",
"search.placeholder": "ค้นหา",
"search_popout.search_format": "รูปแบบการค้นหาขั้นสูง",
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
"search_popout.tips.full_text": "ข้อความแบบง่ายส่งคืนสถานะที่คุณได้เขียน ชื่นชอบ ดัน หรือได้รับการกล่าวถึง ตลอดจนชื่อผู้ใช้, ชื่อที่แสดง และแฮชแท็กที่ตรงกัน",
"search_popout.tips.hashtag": "แฮชแท็ก",
"search_popout.tips.status": "สถานะ",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
"search_popout.tips.text": "ข้อความแบบง่ายส่งคืนชื่อที่แสดง, ชื่อผู้ใช้ และแฮชแท็กที่ตรงกัน",
"search_popout.tips.user": "ผู้ใช้",
"search_results.accounts": "ผู้คน",
"search_results.hashtags": "แฮชแท็ก",
@ -324,7 +324,7 @@
"status.delete": "ลบ",
"status.detailed_status": "มุมมองการสนทนาโดยละเอียด",
"status.direct": "ส่งข้อความโดยตรงถึง @{name}",
"status.embed": "Embed",
"status.embed": "ฝัง",
"status.favourite": "ชื่นชอบ",
"status.filtered": "กรองอยู่",
"status.load_more": "โหลดเพิ่มเติม",
@ -340,7 +340,7 @@
"status.reblog": "ดัน",
"status.reblog_private": "ดันไปยังผู้ชมดั้งเดิม",
"status.reblogged_by": "{name} ได้ดัน",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
"status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่",
"status.redraft": "ลบแล้วร่างใหม่",
"status.reply": "ตอบกลับ",
"status.replyAll": "ตอบกลับกระทู้",
@ -364,15 +364,15 @@
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.moments": "Moments remaining",
"time_remaining.moments": "ช่วงเวลาที่เหลือ",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon",
"upload_area.title": "ลากแล้วปล่อยเพื่ออัปโหลด",
"upload_button.label": "เพิ่มสื่อ (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_error.limit": "เกินขีดจำกัดการอัปโหลดไฟล์",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired",
"upload_error.poll": "ไม่อนุญาตให้อัปโหลดไฟล์กับการลงคะแนน",
"upload_form.description": "อธิบายสำหรับผู้บกพร่องทางการมองเห็น",
"upload_form.focus": "ตัวอย่างการเปลี่ยนแปลง",
"upload_form.undo": "ลบ",
"upload_progress.label": "กำลังอัปโหลด...",

View file

@ -29,7 +29,7 @@
"account.requested": "正在等待对方同意。点击以取消发送关注请求",
"account.share": "分享 @{name} 的个人资料",
"account.show_reblogs": "显示来自 @{name} 的转嘟",
"account.unblock": "不再屏蔽 @{name}",
"account.unblock": "解除屏蔽 @{name}",
"account.unblock_domain": "不再隐藏来自 {domain} 的内容",
"account.unendorse": "不在个人资料中推荐此用户",
"account.unfollow": "取消关注",
@ -98,7 +98,7 @@
"confirmations.redraft.confirm": "删除并重新编辑",
"confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和收藏都会被清除,回复将会被孤立。",
"confirmations.reply.confirm": "回复",
"confirmations.reply.message": "回复此消息会覆盖掉当前正在编辑的消息。确定继续吗?",
"confirmations.reply.message": "回复此消息将会覆盖当前正在编辑的信息。确定继续吗?",
"confirmations.unfollow.confirm": "取消关注",
"confirmations.unfollow.message": "你确定要取消关注 {name} 吗?",
"embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。",
@ -175,7 +175,7 @@
"introduction.interactions.reply.text": "你可以向其他人回复,这些回复会像对话一样串在一起。",
"introduction.welcome.action": "让我们开始吧!",
"introduction.welcome.headline": "首先",
"introduction.welcome.text": "欢迎来到联邦!稍后,您将可以广播消息冰河您的朋友交流,这些消息将穿越于联邦中的各式服务器。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。",
"introduction.welcome.text": "欢迎来到联邦!稍后,您将可以广播消息并和您的朋友交流,这些消息将穿越于联邦中的各式服务器。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。",
"keyboard_shortcuts.back": "返回上一页",
"keyboard_shortcuts.blocked": "打开被屏蔽用户列表",
"keyboard_shortcuts.boost": "转嘟",
@ -187,12 +187,12 @@
"keyboard_shortcuts.enter": "展开嘟文",
"keyboard_shortcuts.favourite": "收藏嘟文",
"keyboard_shortcuts.favourites": "打开收藏列表",
"keyboard_shortcuts.federated": "打开跨站时间线",
"keyboard_shortcuts.federated": "打开跨站时间",
"keyboard_shortcuts.heading": "快捷键列表",
"keyboard_shortcuts.home": "打开主页时间线",
"keyboard_shortcuts.home": "打开主页时间",
"keyboard_shortcuts.hotkey": "快捷键",
"keyboard_shortcuts.legend": "显示此列表",
"keyboard_shortcuts.local": "打开本站时间线",
"keyboard_shortcuts.local": "打开本站时间",
"keyboard_shortcuts.mention": "提及嘟文作者",
"keyboard_shortcuts.muted": "打开屏蔽用户列表",
"keyboard_shortcuts.my_profile": "打开你的个人资料",
@ -253,11 +253,11 @@
"notification.follow": "{name} 开始关注你",
"notification.mention": "{name} 提及你",
"notification.poll": "你参与的一个投票已经结束",
"notification.reblog": "{name} 转了你的嘟文",
"notification.reblog": "{name} 转了你的嘟文",
"notifications.clear": "清空通知列表",
"notifications.clear_confirmation": "你确定要永久清空通知列表吗?",
"notifications.column_settings.alert": "桌面通知",
"notifications.column_settings.favourite": "你的嘟文被收藏时:",
"notifications.column_settings.favourite": "你的嘟文被收藏时:",
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
"notifications.column_settings.filter_bar.category": "快速过滤栏",
"notifications.column_settings.filter_bar.show": "显示",
@ -300,7 +300,7 @@
"reply_indicator.cancel": "取消",
"report.forward": "发送举报至 {target}",
"report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的举报?",
"report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报这个用户的理由:",
"report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报用户的理由:",
"report.placeholder": "附言",
"report.submit": "提交",
"report.target": "举报 {target}",
@ -320,7 +320,7 @@
"status.block": "屏蔽 @{name}",
"status.cancel_reblog_private": "取消转嘟",
"status.cannot_reblog": "无法转嘟这条嘟文",
"status.copy": "复制链接到嘟文中",
"status.copy": "复制嘟文链接",
"status.delete": "删除",
"status.detailed_status": "对话详情",
"status.direct": "发送私信给 @{name}",

View file

@ -84,8 +84,13 @@ export const makeGetStatus = () => {
statusReblog = null;
}
const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters);
const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'));
const dropRegex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters.filter(filter => filter.get('irreversible')));
if (dropRegex && dropRegex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'))) {
return null;
}
const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters);
const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'));
return statusBase.withMutations(map => {
map.set('reblog', statusReblog);

View file

@ -557,6 +557,7 @@
.compose-form__upload-thumbnail {
border-radius: 4px;
background-color: $base-shadow-color;
background-position: center;
background-size: cover;
background-repeat: no-repeat;

View file

@ -370,7 +370,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def unsupported_media_type?(mime_type)
mime_type.present? && !(MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES).include?(mime_type)
mime_type.present? && !MediaAttachment.supported_mime_types.include?(mime_type)
end
def supported_blurhash?(blurhash)
@ -380,7 +380,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def skip_download?
return @skip_download if defined?(@skip_download)
@skip_download ||= DomainBlock.find_by(domain: @account.domain)&.reject_media?
@skip_download ||= DomainBlock.reject_media?(@account.domain)
end
def reply_to_local?

View file

@ -23,7 +23,7 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity
private
def skip_reports?
DomainBlock.find_by(domain: @account.domain)&.reject_reports?
DomainBlock.reject_reports?(@account.domain)
end
def object_uris

View file

@ -148,7 +148,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
end
def save_media
do_not_download = DomainBlock.find_by(domain: @account.domain)&.reject_media?
do_not_download = DomainBlock.reject_media?(@account.domain)
media_attachments = []
@xml.xpath('./xmlns:link[@rel="enclosure"]', xmlns: OStatus::TagManager::XMLNS).each do |link|
@ -176,7 +176,7 @@ class OStatus::Activity::Creation < OStatus::Activity::Base
end
def save_emojis(parent)
do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media?
do_not_download = DomainBlock.reject_media?(parent.account.domain)
return if do_not_download

View file

@ -19,6 +19,20 @@ class Sanitize
node['class'] = class_list.join(' ')
end
UNSUPPORTED_ELEMENTS_TRANSFORMER = lambda do |env|
return unless %w(h1 h2 h3 h4 h5 h6 blockquote pre ul ol li).include?(env[:node_name])
case env[:node_name]
when 'li'
env[:node].traverse do |node|
node.add_next_sibling('<br>') if node.next_sibling
node.replace(node.children) unless node.text?
end
else
env[:node].name = 'p'
end
end
MASTODON_STRICT ||= freeze_config(
elements: %w(p br span a),
@ -40,6 +54,7 @@ class Sanitize
transformers: [
CLASS_WHITELIST_TRANSFORMER,
UNSUPPORTED_ELEMENTS_TRANSFORMER,
]
)

View file

@ -98,6 +98,7 @@ class Account < ApplicationRecord
scope :tagged_with, ->(tag) { joins(:accounts_tags).where(accounts_tags: { tag_id: tag }) }
scope :by_recent_status, -> { order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc')) }
scope :popular, -> { order('account_stats.followers_count desc') }
scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches('%.' + domain))) }
delegate :email,
:unconfirmed_email,
@ -106,6 +107,8 @@ class Account < ApplicationRecord
:confirmed?,
:approved?,
:pending?,
:disabled?,
:role,
:admin?,
:moderator?,
:staff?,

View file

@ -37,6 +37,8 @@ class AccountFilter
Account.without_suspended
when 'pending'
accounts_with_users.merge User.pending
when 'disabled'
accounts_with_users.merge User.disabled
when 'silenced'
Account.silenced
when 'suspended'

View file

@ -1,6 +1,6 @@
# frozen_string_literal: true
require 'mime/types'
require 'mime/types/columnar'
module Attachmentable
extend ActiveSupport::Concern

View file

@ -13,6 +13,20 @@ module UserRoles
admin? || moderator?
end
def role=(value)
case value
when 'admin'
self.admin = true
self.moderator = false
when 'moderator'
self.admin = false
self.moderator = true
else
self.admin = false
self.moderator = false
end
end
def role
if admin?
'admin'

View file

@ -39,6 +39,7 @@ class CustomEmoji < ApplicationRecord
scope :local, -> { where(domain: nil) }
scope :remote, -> { where.not(domain: nil) }
scope :alphabetic, -> { order(domain: :asc, shortcode: :asc) }
scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches('%.' + domain))) }
remotable_attachment :image, LIMIT

View file

@ -24,14 +24,41 @@ class DomainBlock < ApplicationRecord
scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
def self.blocked?(domain)
where(domain: domain, severity: :suspend).exists?
class << self
def suspend?(domain)
!!rule_for(domain)&.suspend?
end
def silence?(domain)
!!rule_for(domain)&.silence?
end
def reject_media?(domain)
!!rule_for(domain)&.reject_media?
end
def reject_reports?(domain)
!!rule_for(domain)&.reject_reports?
end
alias blocked? suspend?
def rule_for(domain)
return if domain.blank?
uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
segments = uri.normalized_host.split('.')
variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
where(domain: variants[0..-2]).order(Arel.sql('char_length(domain) desc')).first
end
end
def stricter_than?(other_block)
return true if suspend?
return true if suspend?
return false if other_block.suspend? && (silence? || noop?)
return false if other_block.silence? && noop?
(reject_media || !other_block.reject_media) && (reject_reports || !other_block.reject_reports)
end

View file

@ -8,15 +8,11 @@ class Instance
def initialize(resource)
@domain = resource.domain
@accounts_count = resource.is_a?(DomainBlock) ? nil : resource.accounts_count
@domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.find_by(domain: domain)
@domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.rule_for(domain)
end
def cached_sample_accounts
Rails.cache.fetch("#{cache_key}/sample_accounts", expires_in: 12.hours) { Account.where(domain: domain).searchable.joins(:account_stat).popular.limit(3) }
end
def cached_accounts_count
@accounts_count || Rails.cache.fetch("#{cache_key}/count", expires_in: 12.hours) { Account.where(domain: domain).count }
def countable?
@accounts_count.present?
end
def to_param

View file

@ -24,14 +24,16 @@
class MediaAttachment < ApplicationRecord
self.inheritance_column = nil
enum type: [:image, :gifv, :video, :unknown]
enum type: [:image, :gifv, :video, :unknown, :audio]
IMAGE_FILE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.webp'].freeze
VIDEO_FILE_EXTENSIONS = ['.webm', '.mp4', '.m4v', '.mov'].freeze
AUDIO_FILE_EXTENSIONS = ['.ogg', '.oga', '.mp3', '.wav', '.flac', '.opus'].freeze
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
VIDEO_MIME_TYPES = ['video/webm', 'video/mp4', 'video/quicktime'].freeze
VIDEO_CONVERTIBLE_MIME_TYPES = ['video/webm', 'video/quicktime'].freeze
AUDIO_MIME_TYPES = ['audio/wave', 'audio/wav', 'audio/x-wav', 'audio/x-pn-wave', 'audio/ogg', 'audio/mpeg', 'audio/webm', 'audio/flac'].freeze
BLURHASH_OPTIONS = {
x_comp: 4,
@ -65,8 +67,21 @@ class MediaAttachment < ApplicationRecord
},
}.freeze
AUDIO_STYLES = {
original: {
format: 'mp3',
content_type: 'audio/mpeg',
convert_options: {
output: {
'q:a' => 2,
},
},
},
}.freeze
VIDEO_FORMAT = {
format: 'mp4',
content_type: 'video/mp4',
convert_options: {
output: {
'loglevel' => 'fatal',
@ -83,6 +98,11 @@ class MediaAttachment < ApplicationRecord
},
}.freeze
VIDEO_CONVERTED_STYLES = {
small: VIDEO_STYLES[:small],
original: VIDEO_FORMAT,
}.freeze
IMAGE_LIMIT = 16.megabytes
VIDEO_LIMIT = 80.megabytes
@ -95,9 +115,9 @@ class MediaAttachment < ApplicationRecord
processors: ->(f) { file_processors f },
convert_options: { all: '-quality 90 -strip' }
validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES
validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :video_or_gifv?
validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :video_or_gifv?
validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES
validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :larger_media_format?
validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :larger_media_format?
remotable_attachment :file, VIDEO_LIMIT
include Attachmentable
@ -120,8 +140,12 @@ class MediaAttachment < ApplicationRecord
file.blank? && remote_url.present?
end
def video_or_gifv?
video? || gifv?
def larger_media_format?
video? || gifv? || audio?
end
def audio_or_video?
audio? || video?
end
def to_param
@ -153,33 +177,37 @@ class MediaAttachment < ApplicationRecord
before_save :set_meta
class << self
def supported_mime_types
IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES
end
def supported_file_extensions
IMAGE_FILE_EXTENSIONS + VIDEO_FILE_EXTENSIONS + AUDIO_FILE_EXTENSIONS
end
private
def file_styles(f)
if f.instance.file_content_type == 'image/gif'
{
small: IMAGE_STYLES[:small],
original: VIDEO_FORMAT,
}
elsif IMAGE_MIME_TYPES.include? f.instance.file_content_type
if f.instance.file_content_type == 'image/gif' || VIDEO_CONVERTIBLE_MIME_TYPES.include?(f.instance.file_content_type)
VIDEO_CONVERTED_STYLES
elsif IMAGE_MIME_TYPES.include?(f.instance.file_content_type)
IMAGE_STYLES
elsif VIDEO_CONVERTIBLE_MIME_TYPES.include?(f.instance.file_content_type)
{
small: VIDEO_STYLES[:small],
original: VIDEO_FORMAT,
}
else
elsif VIDEO_MIME_TYPES.include?(f.instance.file_content_type)
VIDEO_STYLES
else
AUDIO_STYLES
end
end
def file_processors(f)
if f.file_content_type == 'image/gif'
[:gif_transcoder, :blurhash_transcoder]
elsif VIDEO_MIME_TYPES.include? f.file_content_type
[:video_transcoder, :blurhash_transcoder]
elsif VIDEO_MIME_TYPES.include?(f.file_content_type)
[:video_transcoder, :blurhash_transcoder, :type_corrector]
elsif AUDIO_MIME_TYPES.include?(f.file_content_type)
[:transcoder, :type_corrector]
else
[:lazy_thumbnail, :blurhash_transcoder]
[:lazy_thumbnail, :blurhash_transcoder, :type_corrector]
end
end
end
@ -202,7 +230,15 @@ class MediaAttachment < ApplicationRecord
end
def set_type_and_extension
self.type = VIDEO_MIME_TYPES.include?(file_content_type) ? :video : :image
self.type = begin
if VIDEO_MIME_TYPES.include?(file_content_type)
:video
elsif AUDIO_MIME_TYPES.include?(file_content_type)
:audio
else
:image
end
end
end
def set_meta
@ -245,7 +281,7 @@ class MediaAttachment < ApplicationRecord
frame_rate: movie.frame_rate,
duration: movie.duration,
bitrate: movie.bitrate,
}
}.compact
end
def reset_parent_cache

View file

@ -17,6 +17,8 @@
#
class Report < ApplicationRecord
include Paginable
belongs_to :account
belongs_to :target_account, class_name: 'Account'
belongs_to :action_taken_by_account, class_name: 'Account', optional: true
@ -26,6 +28,7 @@ class Report < ApplicationRecord
scope :unresolved, -> { where(action_taken: false) }
scope :resolved, -> { where(action_taken: true) }
scope :with_accounts, -> { includes([:account, :target_account, :action_taken_by_account, :assigned_account].each_with_object({}) { |k, h| h[k] = { user: [:invite_request, :invite] } }) }
validates :comment, length: { maximum: 1000 }

View file

@ -9,9 +9,11 @@ class ReportFilter
def results
scope = Report.unresolved
params.each do |key, value|
scope = scope.merge scope_for(key, value)
end
scope
end

View file

@ -87,8 +87,9 @@ class User < ApplicationRecord
scope :approved, -> { where(approved: true) }
scope :confirmed, -> { where.not(confirmed_at: nil) }
scope :enabled, -> { where(disabled: false) }
scope :disabled, -> { where(disabled: true) }
scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) }
scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where.not(accounts: { suspended_at: nil }) }
scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) }
scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) }
scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) }

View file

@ -60,7 +60,7 @@ class InitialStateSerializer < ActiveModel::Serializer
end
def media_attachments
{ accept_content_types: MediaAttachment::IMAGE_FILE_EXTENSIONS + MediaAttachment::VIDEO_FILE_EXTENSIONS + MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES }
{ accept_content_types: MediaAttachment.supported_file_extensions + MediaAttachment.supported_mime_types }
end
private

View file

@ -0,0 +1,77 @@
# frozen_string_literal: true
class REST::Admin::AccountSerializer < ActiveModel::Serializer
attributes :id, :username, :domain, :created_at,
:email, :ip, :role, :confirmed, :suspended,
:silenced, :disabled, :approved, :locale,
:invite_request
attribute :created_by_application_id, if: :created_by_application?
attribute :invited_by_account_id, if: :invited?
has_one :account, serializer: REST::AccountSerializer
def id
object.id.to_s
end
def email
object.user_email
end
def ip
object.user_current_sign_in_ip.to_s.presence
end
def role
object.user_role
end
def suspended
object.suspended?
end
def silenced
object.silenced?
end
def confirmed
object.user_confirmed?
end
def disabled
object.user_disabled?
end
def approved
object.user_approved?
end
def account
object
end
def locale
object.user_locale
end
def created_by_application_id
object.user&.created_by_application_id&.to_s&.presence
end
def invite_request
object.user&.invite_request&.text
end
def invited_by_account_id
object.user&.invite&.user&.account_id&.to_s&.presence
end
def invited?
object.user&.invited?
end
def created_by_application?
object.user&.created_by_application_id&.present?
end
end

View file

@ -0,0 +1,16 @@
# frozen_string_literal: true
class REST::Admin::ReportSerializer < ActiveModel::Serializer
attributes :id, :action_taken, :comment, :created_at, :updated_at
has_one :account, serializer: REST::Admin::AccountSerializer
has_one :target_account, serializer: REST::Admin::AccountSerializer
has_one :assigned_account, serializer: REST::Admin::AccountSerializer
has_one :action_taken_by_account, serializer: REST::Admin::AccountSerializer
has_many :statuses, serializer: REST::StatusSerializer
def id
object.id.to_s
end
end

View file

@ -205,7 +205,7 @@ class ActivityPub::ProcessAccountService < BaseService
def domain_block
return @domain_block if defined?(@domain_block)
@domain_block = DomainBlock.find_by(domain: @domain)
@domain_block = DomainBlock.rule_for(@domain)
end
def key_changed?

View file

@ -76,7 +76,7 @@ class BlockDomainService < BaseService
end
def blocked_domain_accounts
Account.where(domain: blocked_domain)
Account.by_domain_and_subdomains(blocked_domain)
end
def media_from_blocked_domain
@ -84,6 +84,6 @@ class BlockDomainService < BaseService
end
def emojis_from_blocked_domains
CustomEmoji.where(domain: blocked_domain)
CustomEmoji.by_domain_and_subdomains(blocked_domain)
end
end

View file

@ -100,7 +100,7 @@ class PostStatusService < BaseService
@media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i))
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:video?)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?)
end
def language_from_option(str)

View file

@ -146,7 +146,7 @@ class ResolveAccountService < BaseService
def domain_block
return @domain_block if defined?(@domain_block)
@domain_block = DomainBlock.find_by(domain: @domain)
@domain_block = DomainBlock.rule_for(@domain)
end
def atom_url

View file

@ -14,7 +14,8 @@ class UnblockDomainService < BaseService
end
def blocked_accounts
scope = Account.where(domain: domain_block.domain)
scope = Account.by_domain_and_subdomains(domain_block.domain)
if domain_block.silence?
scope.where(silenced_at: @domain_block.created_at)
else

View file

@ -26,7 +26,7 @@ class UpdateRemoteProfileService < BaseService
account.note = remote_profile.note || ''
account.locked = remote_profile.locked?
if !account.suspended? && !DomainBlock.find_by(domain: account.domain)&.reject_media?
if !account.suspended? && !DomainBlock.reject_media?(account.domain)
if remote_profile.avatar.present?
account.avatar_remote_url = remote_profile.avatar
else
@ -46,7 +46,7 @@ class UpdateRemoteProfileService < BaseService
end
def save_emojis
do_not_download = DomainBlock.find_by(domain: account.domain)&.reject_media?
do_not_download = DomainBlock.reject_media?(account.domain)
return if do_not_download

View file

@ -33,21 +33,22 @@
%h4
= instance.domain
%small
= t('admin.instances.known_accounts', count: instance.cached_accounts_count)
- if instance.domain_block
- first_item = true
- if !instance.domain_block.noop?
&bull;
= t("admin.domain_blocks.severity.#{instance.domain_block.severity}")
- first_item = false
- if instance.domain_block.reject_media?
&bull;
- unless first_item
&bull;
= t('admin.domain_blocks.rejecting_media')
- first_item = false
- if instance.domain_block.reject_reports?
&bull;
- unless first_item
&bull;
= t('admin.domain_blocks.rejecting_reports')
.avatar-stack
- instance.cached_sample_accounts.each do |account|
= image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar'
- else
= t('admin.accounts.no_limits_imposed')
- if instance.countable?
.trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true
= paginate paginated_instances

View file

@ -9,7 +9,7 @@
.fields-row
.fields-row__column.fields-row__column-6.fields-group
= f.input :theme, collection: Themes.instance.names, label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
= f.input :theme, collection: Themes.instance.names, label: t('simple_form.labels.defaults.setting_theme'), label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
.fields-row__column.fields-row__column-6.fields-group
= f.input :registrations_mode, collection: %w(open approved none), wrapper: :with_label, label: t('admin.settings.registrations_mode.title'), include_blank: false, label_method: lambda { |mode| I18n.t("admin.settings.registrations_mode.modes.#{mode}") }

View file

@ -27,7 +27,7 @@
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay }
- if !status.media_attachments.empty?
- if status.media_attachments.first.video?
- if status.media_attachments.first.audio_or_video?
- video = status.media_attachments.first
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description do
= render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments }

View file

@ -31,7 +31,7 @@
= render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay }
- if !status.media_attachments.empty?
- if status.media_attachments.first.video?
- if status.media_attachments.first.audio_or_video?
- video = status.media_attachments.first
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description do
= render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments }