diff options
author | ThibG <thib@sitedethib.com> | 2018-11-27 16:26:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-27 16:26:18 +0100 |
commit | 33be091f506242b136b0d4a65cf06a0babc4d757 (patch) | |
tree | 0f9f6e40e40f4ecabfa1e5f906000abe756f42a9 | |
parent | 6b6e633c095485f95350c4308a942192e5fe8806 (diff) | |
parent | 55edfd6e0e1cb5377f0c3406d94ddfd84ddb7b20 (diff) |
Merge pull request #828 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
188 files changed, 2429 insertions, 704 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index cb8bf3272..e5eba30d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,40 @@ Changelog All notable changes to this project will be documented in this file. +## [2.6.2] - 2018-11-23 +### Added + +- Add Page to whitelisted ActivityPub types (#9188) +- Add 20px to column width in web UI (#9227) +- Add amount of freed disk space in `tootctl media remove` (#9229, #9239, #9288) +- Add "Show thread" link to self-replies (#9228) + +### Changed + +- Change order of Atom and RSS links so Atom is first (#9302) +- Change Nginx configuration for Nanobox apps (#9310) +- Change the follow action to appear instant in web UI (#9220) +- Change how the ActiveRecord connection is instantiated in on_worker_boot (#9238) +- Change `tootctl accounts cull` to always touch accounts so they can be skipped (#9293) +- Change mime type comparison to ignore JSON-LD profile (#9179) + +### Fixed + +- Fix web UI crash when conversation has no last status (#9207) +- Fix follow limit validator reporting lower number past threshold (#9230) +- Fix form validation flash message color and input borders (#9235) +- Fix invalid twitter:player cards being displayed (#9254) +- Fix emoji update date being processed incorrectly (#9255) +- Fix playing embed resetting if status is reloaded in web UI (#9270, #9275) +- Fix web UI crash when favouriting a deleted status (#9272) +- Fix intermediary arrays being created for hash maps (#9291) +- Fix filter ID not being a string in REST API (#9303) + +### Security + +- Fix multiple remote account deletions being able to deadlock the database (#9292) +- Fix HTTP connection timeout of 10s not being enforced (#9329) + ## [2.6.1] - 2018-10-30 ### Fixed diff --git a/Gemfile b/Gemfile index 57ecc2fb9..3541eb9fa 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ gem 'makara', '~> 0.4' gem 'pghero', '~> 2.2' gem 'dotenv-rails', '~> 2.5' -gem 'aws-sdk-s3', '~> 1.23', require: false +gem 'aws-sdk-s3', '~> 1.25', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' @@ -77,14 +77,14 @@ gem 'sanitize', '~> 5.0' gem 'sidekiq', '~> 5.2' gem 'sidekiq-scheduler', '~> 3.0' gem 'sidekiq-unique-jobs', '~> 5.0' -gem 'sidekiq-bulk', '~>0.1.1' +gem 'sidekiq-bulk', '~>0.2.0' gem 'simple-navigation', '~> 4.0' -gem 'simple_form', '~> 4.0' +gem 'simple_form', '~> 4.1' gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' gem 'stoplight', '~> 2.1.3' gem 'strong_migrations', '~> 0.3' gem 'tty-command', '~> 0.8', require: false -gem 'tty-prompt', '~> 0.17', require: false +gem 'tty-prompt', '~> 0.18', require: false gem 'twitter-text', '~> 1.14' gem 'tzinfo-data', '~> 1.2018' gem 'webpacker', '~> 3.5' @@ -107,7 +107,7 @@ group :production, :test do end group :test do - gem 'capybara', '~> 3.10' + gem 'capybara', '~> 3.11' gem 'climate_control', '~> 0.2' gem 'faker', '~> 1.9' gem 'microformats', '~> 4.0' diff --git a/Gemfile.lock b/Gemfile.lock index 642c3e158..80f7fe694 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -76,17 +76,17 @@ GEM av (0.9.0) cocaine (~> 0.5.3) aws-eventstream (1.0.1) - aws-partitions (1.107.0) - aws-sdk-core (3.36.0) + aws-partitions (1.115.0) + aws-sdk-core (3.39.0) aws-eventstream (~> 1.0) aws-partitions (~> 1.0) aws-sigv4 (~> 1.0) jmespath (~> 1.0) - aws-sdk-kms (1.11.0) - aws-sdk-core (~> 3, >= 3.26.0) + aws-sdk-kms (1.12.0) + aws-sdk-core (~> 3, >= 3.39.0) aws-sigv4 (~> 1.0) - aws-sdk-s3 (1.23.1) - aws-sdk-core (~> 3, >= 3.26.0) + aws-sdk-s3 (1.25.0) + aws-sdk-core (~> 3, >= 3.39.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.0) aws-sigv4 (1.0.3) @@ -126,7 +126,7 @@ GEM sshkit (~> 1.3) capistrano-yarn (2.0.2) capistrano (~> 3.0) - capybara (3.10.1) + capybara (3.11.1) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -493,7 +493,7 @@ GEM redis-store (>= 1.2, < 2) redis-store (1.5.0) redis (>= 2.2, < 5) - regexp_parser (1.2.0) + regexp_parser (1.3.0) request_store (1.4.1) rack (>= 1.4) responders (2.4.0) @@ -553,8 +553,7 @@ GEM connection_pool (~> 2.2, >= 2.2.2) rack-protection (>= 1.5.0) redis (>= 3.3.5, < 5) - sidekiq-bulk (0.1.1) - activesupport + sidekiq-bulk (0.2.0) sidekiq sidekiq-scheduler (3.0.0) redis (>= 3, < 5) @@ -566,7 +565,7 @@ GEM thor (~> 0) simple-navigation (4.0.5) activesupport (>= 2.3.2) - simple_form (4.0.1) + simple_form (4.1.0) actionpack (>= 5.0) activemodel (>= 5.0) simplecov (0.16.1) @@ -604,13 +603,13 @@ GEM tty-command (0.8.2) pastel (~> 0.7.0) tty-cursor (0.6.0) - tty-prompt (0.17.2) + tty-prompt (0.18.0) necromancer (~> 0.4.0) pastel (~> 0.7.0) timers (~> 4.0) tty-cursor (~> 0.6.0) - tty-reader (~> 0.4.0) - tty-reader (0.4.0) + tty-reader (~> 0.5.0) + tty-reader (0.5.0) tty-cursor (~> 0.6.0) tty-screen (~> 0.6.4) wisper (~> 2.0.0) @@ -654,7 +653,7 @@ DEPENDENCIES active_record_query_trace (~> 1.5) addressable (~> 2.5) annotate (~> 2.7) - aws-sdk-s3 (~> 1.23) + aws-sdk-s3 (~> 1.25) better_errors (~> 2.5) binding_of_caller (~> 0.7) bootsnap (~> 1.3) @@ -666,7 +665,7 @@ DEPENDENCIES capistrano-rails (~> 1.4) capistrano-rbenv (~> 2.1) capistrano-yarn (~> 2.0) - capybara (~> 3.10) + capybara (~> 3.11) charlock_holmes (~> 0.7.6) chewy (~> 5.0) cld3 (~> 3.2.0) @@ -746,11 +745,11 @@ DEPENDENCIES sanitize (~> 5.0) scss_lint (~> 0.57) sidekiq (~> 5.2) - sidekiq-bulk (~> 0.1.1) + sidekiq-bulk (~> 0.2.0) sidekiq-scheduler (~> 3.0) sidekiq-unique-jobs (~> 5.0) simple-navigation (~> 4.0) - simple_form (~> 4.0) + simple_form (~> 4.1) simplecov (~> 0.16) sprockets-rails (~> 3.2) stackprof @@ -759,7 +758,7 @@ DEPENDENCIES strong_migrations (~> 0.3) thor (~> 0.20) tty-command (~> 0.8) - tty-prompt (~> 0.17) + tty-prompt (~> 0.18) twitter-text (~> 1.14) tzinfo-data (~> 1.2018) webmock (~> 3.4) diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 5d57fe361..f155543ce 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -94,8 +94,8 @@ module Admin :local, :remote, :by_domain, + :active, :silenced, - :alphabetic, :suspended, :username, :display_name, diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb index 8ed0ea421..6f8eaf65c 100644 --- a/app/controllers/admin/instances_controller.rb +++ b/app/controllers/admin/instances_controller.rb @@ -31,7 +31,7 @@ module Admin end def subscribeable_accounts - Account.with_followers.remote.where(domain: params[:by_domain]) + Account.remote.where(protocol: :ostatus).where(domain: params[:by_domain]) end def filter_params diff --git a/app/controllers/api/v1/accounts/follower_accounts_controller.rb b/app/controllers/api/v1/accounts/follower_accounts_controller.rb index daa35769e..ec15debb0 100644 --- a/app/controllers/api/v1/accounts/follower_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/follower_accounts_controller.rb @@ -25,7 +25,7 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController end def default_accounts - Account.includes(:active_relationships).references(:active_relationships) + Account.includes(:active_relationships, :account_stat).references(:active_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/following_accounts_controller.rb b/app/controllers/api/v1/accounts/following_accounts_controller.rb index 6be97b87e..f3e112f2c 100644 --- a/app/controllers/api/v1/accounts/following_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/following_accounts_controller.rb @@ -25,7 +25,7 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController end def default_accounts - Account.includes(:passive_relationships).references(:passive_relationships) + Account.includes(:passive_relationships, :account_stat).references(:passive_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index 99c53d59a..4cff04cad 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -19,7 +19,7 @@ class Api::V1::BlocksController < Api::BaseController end def paginated_blocks - @paginated_blocks ||= Block.eager_load(:target_account) + @paginated_blocks ||= Block.eager_load(target_account: :account_stat) .where(account: current_account) .paginate_by_max_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), diff --git a/app/controllers/api/v1/endorsements_controller.rb b/app/controllers/api/v1/endorsements_controller.rb index 0f04b488f..2770c7aef 100644 --- a/app/controllers/api/v1/endorsements_controller.rb +++ b/app/controllers/api/v1/endorsements_controller.rb @@ -27,7 +27,7 @@ class Api::V1::EndorsementsController < Api::BaseController end def endorsed_accounts - current_account.endorsed_accounts + current_account.endorsed_accounts.includes(:account_stat) end def insert_pagination_headers diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index e9aca5f8a..e6888154e 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -33,7 +33,7 @@ class Api::V1::FollowRequestsController < Api::BaseController end def default_accounts - Account.includes(:follow_requests).references(:follow_requests) + Account.includes(:follow_requests, :account_stat).references(:follow_requests) end def paginated_follow_requests diff --git a/app/controllers/api/v1/lists/accounts_controller.rb b/app/controllers/api/v1/lists/accounts_controller.rb index ec4477034..23078263e 100644 --- a/app/controllers/api/v1/lists/accounts_controller.rb +++ b/app/controllers/api/v1/lists/accounts_controller.rb @@ -37,9 +37,9 @@ class Api::V1::Lists::AccountsController < Api::BaseController def load_accounts if unlimited? - @list.accounts.all + @list.accounts.includes(:account_stat).all else - @list.accounts.paginate_by_max_id(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:max_id], params[:since_id]) + @list.accounts.includes(:account_stat).paginate_by_max_id(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:max_id], params[:since_id]) end end diff --git a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb index 8f4070bc7..657e57831 100644 --- a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb @@ -22,7 +22,7 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::BaseController def default_accounts Account - .includes(:favourites) + .includes(:favourites, :account_stat) .references(:favourites) .where(favourites: { status_id: @status.id }) end diff --git a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb index 93b83ce48..4315b0283 100644 --- a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb @@ -21,7 +21,7 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController end def default_accounts - Account.includes(:statuses).references(:statuses) + Account.includes(:statuses, :account_stat).references(:statuses) end def paginated_statuses diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 983b116c9..0209805d0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -188,7 +188,7 @@ class ApplicationController < ActionController::Base klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!) unless uncached_ids.empty? - uncached = klass.where(id: uncached_ids).with_includes.map { |item| [item.id, item] }.to_h + uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item } uncached.each_value do |item| Rails.cache.write(item, item) diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb index 4d8f0352e..40b2a5289 100644 --- a/app/helpers/admin/account_moderation_notes_helper.rb +++ b/app/helpers/admin/account_moderation_notes_helper.rb @@ -24,7 +24,7 @@ module Admin::AccountModerationNotesHelper def name_tag_classes(account, inline = false) classes = [inline ? 'inline-name-tag' : 'name-tag'] - classes << 'suspended' if account.suspended? + classes << 'suspended' if account.suspended? || (account.local? && account.user.nil?) classes.join(' ') end end diff --git a/app/helpers/admin/filter_helper.rb b/app/helpers/admin/filter_helper.rb index 60e5142e3..9a663051c 100644 --- a/app/helpers/admin/filter_helper.rb +++ b/app/helpers/admin/filter_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Admin::FilterHelper - ACCOUNT_FILTERS = %i(local remote by_domain silenced suspended alphabetic username display_name email ip staff).freeze + ACCOUNT_FILTERS = %i(local remote by_domain active silenced suspended username display_name email ip staff).freeze REPORT_FILTERS = %i(resolved account_id target_account_id).freeze INVITE_FILTER = %i(available expired).freeze CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb index ac655f622..033d435c4 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/stream_entries_helper.rb @@ -34,12 +34,14 @@ module StreamEntriesHelper end end - def account_badge(account) + def account_badge(account, all: false) if account.bot? content_tag(:div, content_tag(:div, t('accounts.roles.bot'), class: 'account-role bot'), class: 'roles') - elsif Setting.show_staff_badge && account.user_staff? + elsif (Setting.show_staff_badge && account.user_staff?) || all content_tag(:div, class: 'roles') do - if account.user_admin? + if all && !account.user_staff? + content_tag(:div, t('admin.accounts.roles.user'), class: 'account-role') + elsif account.user_admin? content_tag(:div, t('accounts.roles.admin'), class: 'account-role admin') elsif account.user_moderator? content_tag(:div, t('accounts.roles.moderator'), class: 'account-role moderator') diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 46ef85774..4f96204f2 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -266,7 +266,7 @@ code { font-family: inherit; font-size: 14px; color: $primary-text-color; - display: block; + display: inline-block; width: auto; position: relative; padding-top: 5px; diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index 86658cb66..d7722dcce 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -9,6 +9,7 @@ import { expandHashtagTimeline, clearTimeline } from '../../actions/timelines'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import { FormattedMessage } from 'react-intl'; import { connectHashtagStream } from '../../actions/streaming'; +import { isEqual } from 'lodash'; const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0, @@ -100,7 +101,7 @@ class HashtagTimeline extends React.PureComponent { componentWillReceiveProps (nextProps) { const { dispatch, params } = this.props; const { id, tags } = nextProps.params; - if (id !== params.id || tags !== params.tags) { + if (id !== params.id || !isEqual(tags, params.tags)) { this._unsubscribe(); this._subscribe(dispatch, id, tags); this.props.dispatch(clearTimeline(`hashtag:${id}`)); diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index 67f7580b9..3650fddb6 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -105,6 +105,7 @@ class Video extends React.PureComponent { state = { currentTime: 0, duration: 0, + volume: 0.5, paused: true, dragging: false, containerWidth: false, @@ -114,6 +115,15 @@ class Video extends React.PureComponent { revealed: displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all', }; + // hard coded in components.scss + // any way to get ::before values programatically? + volWidth = 50; + volOffset = 70; + volHandleOffset = v => { + const offset = v * this.volWidth + this.volOffset; + return (offset > 110) ? 110 : offset; + } + setPlayerRef = c => { this.player = c; @@ -132,6 +142,10 @@ class Video extends React.PureComponent { this.seek = c; } + setVolumeRef = c => { + this.volume = c; + } + handleClickRoot = e => e.stopPropagation(); handlePlay = () => { @@ -149,6 +163,43 @@ class Video extends React.PureComponent { }); } + handleVolumeMouseDown = e => { + + document.addEventListener('mousemove', this.handleMouseVolSlide, true); + document.addEventListener('mouseup', this.handleVolumeMouseUp, true); + document.addEventListener('touchmove', this.handleMouseVolSlide, true); + document.addEventListener('touchend', this.handleVolumeMouseUp, true); + + this.handleMouseVolSlide(e); + + e.preventDefault(); + e.stopPropagation(); + } + + handleVolumeMouseUp = () => { + document.removeEventListener('mousemove', this.handleMouseVolSlide, true); + document.removeEventListener('mouseup', this.handleVolumeMouseUp, true); + document.removeEventListener('touchmove', this.handleMouseVolSlide, true); + document.removeEventListener('touchend', this.handleVolumeMouseUp, true); + } + + handleMouseVolSlide = throttle(e => { + + const rect = this.volume.getBoundingClientRect(); + const x = (e.clientX - rect.left) / this.volWidth; //x position within the element. + + if(!isNaN(x)) { + var slideamt = x; + if(x > 1) { + slideamt = 1; + } else if(x < 0) { + slideamt = 0; + } + this.video.volume = slideamt; + this.setState({ volume: slideamt }); + } + }, 60); + handleMouseDown = e => { document.addEventListener('mousemove', this.handleMouseMove, true); document.addEventListener('mouseup', this.handleMouseUp, true); @@ -273,8 +324,11 @@ class Video extends React.PureComponent { render () { const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive } = this.props; - const { containerWidth, currentTime, duration, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; + const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const progress = (currentTime / duration) * 100; + + const volumeWidth = (muted) ? 0 : volume * this.volWidth; + const volumeHandleLoc = (muted) ? this.volHandleOffset(0) : this.volHandleOffset(volume); const playerStyle = {}; let { width, height } = this.props; @@ -326,6 +380,7 @@ class Video extends React.PureComponent { title={alt} width={width} height={height} + volume={volume} onClick={this.togglePlay} onPlay={this.handlePlay} onPause={this.handlePause} @@ -354,9 +409,15 @@ class Video extends React.PureComponent { <div className='video-player__buttons-bar'> <div className='video-player__buttons left'> <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> - <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> - - {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><i className='fa fa-fw fa-eye' /></button>} + <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onMouseEnter={this.volumeSlider} onMouseLeave={this.volumeSlider} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> + <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> + <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> + <span + className={classNames('video-player__volume__handle')} + tabIndex='0' + style={{ left: `${volumeHandleLoc}px` }} + /> + </div> {(detailed || fullscreen) && <span> @@ -368,6 +429,7 @@ class Video extends React.PureComponent { </div> <div className='video-player__buttons right'> + {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><i className='fa fa-fw fa-eye' /></button>} {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><i className='fa fa-fw fa-expand' /></button>} {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><i className='fa fa-fw fa-compress' /></button>} <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><i className={classNames('fa fa-fw', { 'fa-arrows-alt': !fullscreen, 'fa-compress': fullscreen })} /></button> diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 8cd9ba773..2d73f84e0 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -93,7 +93,7 @@ "confirmations.redraft.confirm": "إزالة و إعادة الصياغة", "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": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", "emoji_button.travel": "أماكن و أسفار", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", "empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !", "empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على جيت هب {github}.", "getting_started.security": "الأمان", "getting_started.terms": "شروط الخدمة", + "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.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": "أساسية", "home.column_settings.show_reblogs": "عرض الترقيات", "home.column_settings.show_replies": "عرض الردود", @@ -313,10 +321,11 @@ "status.show_less_all": "طي الكل", "status.show_more": "أظهر المزيد", "status.show_more_all": "توسيع الكل", + "status.show_thread": "Show thread", "status.unmute_conversation": "فك الكتم عن المحادثة", "status.unpin": "فك التدبيس من الملف الشخصي", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "إلغاء الإقتراح", + "suggestions.header": "يمكن أن يهمك…", "tabs_bar.federated_timeline": "الموحَّد", "tabs_bar.home": "الرئيسية", "tabs_bar.local_timeline": "المحلي", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index ab0f5b892..e22c46e9e 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -2,19 +2,19 @@ "account.add_or_remove_from_list": "Add or Remove from lists", "account.badges.bot": "Robó", "account.block": "Bloquiar a @{name}", - "account.block_domain": "Hide everything from {domain}", + "account.block_domain": "Anubrir tolo de {domain}", "account.blocked": "Blocked", "account.direct": "Unviar un mensaxe direutu a @{name}", - "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", - "account.domain_blocked": "Domain hidden", - "account.edit_profile": "Editar perfil", - "account.endorse": "Feature on profile", + "account.disclaimer_full": "La información d'embaxo podría reflexar de mou incompletu'l perfil del usuariu.", + "account.domain_blocked": "Dominiu anubríu", + "account.edit_profile": "Editar el perfil", + "account.endorse": "Destacar nel perfil", "account.follow": "Follow", "account.followers": "Siguidores", - "account.followers.empty": "No one follows this user yet.", - "account.follows": "Follows", + "account.followers.empty": "Naide sigue a esti usuariu entá.", + "account.follows": "Sigue a", "account.follows.empty": "Esti usuariu entá nun sigue a naide.", - "account.follows_you": "Follows you", + "account.follows_you": "Síguete", "account.hide_reblogs": "Hide boosts from @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.media": "Media", @@ -30,12 +30,12 @@ "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.unblock": "Desbloquiar a @{name}", - "account.unblock_domain": "Unhide {domain}", + "account.unblock_domain": "Amosar {domain}", "account.unendorse": "Don't feature on profile", "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", - "account.view_full_profile": "View full profile", + "account.view_full_profile": "Ver el perfil completu", "alert.unexpected.message": "Asocedió un fallu inesperáu.", "alert.unexpected.title": "¡Ups!", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", @@ -46,7 +46,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Usuarios bloquiaos", - "column.community": "Local timeline", + "column.community": "Llinia temporal llocal", "column.direct": "Mensaxes direutos", "column.domain_blocks": "Dominios anubríos", "column.favourites": "Favoritos", @@ -61,7 +61,7 @@ "column_header.hide_settings": "Hide settings", "column_header.moveLeft_settings": "Mover la columna a la esquierda", "column_header.moveRight_settings": "Mover la columna a la drecha", - "column_header.pin": "Pin", + "column_header.pin": "Fixar", "column_header.show_settings": "Show settings", "column_header.unpin": "Desfixar", "column_subheading.settings": "Axustes", @@ -84,47 +84,48 @@ "confirmations.block.message": "¿De xuru que quies bloquiar a {name}?", "confirmations.delete.confirm": "Delete", "confirmations.delete.message": "¿De xuru que quies desaniciar esti estáu?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Desaniciar", "confirmations.delete_list.message": "¿De xuru que quies desaniciar dafechu esta llista?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "Anubrir tol dominiu", "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. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "confirmations.mute.confirm": "Mute", "confirmations.mute.message": "¿De xuru que quies silenciar a {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.confirm": "Desaniciar y reeditar", "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?", "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Actividá", + "confirmations.unfollow.message": "¿De xuru que quies dexar de siguir a {name}?", + "embed.instructions": "Empotra esti estáu nun sitiu web copiando'l códigu d'embaxo.", + "embed.preview": "Asina ye como va vese:", + "emoji_button.activity": "Actividaes", "emoji_button.custom": "Custom", "emoji_button.flags": "Banderes", - "emoji_button.food": "Comída y bébora", + "emoji_button.food": "Comida y bébora", "emoji_button.label": "Insert emoji", "emoji_button.nature": "Natura", "emoji_button.not_found": "¡Nun hai fustaxes! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Oxetos", "emoji_button.people": "Xente", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", + "emoji_button.recent": "Úsase davezu", + "emoji_button.search": "Guetar...", "emoji_button.search_results": "Search results", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes y llugares", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Entá nun bloquiesti a dengún usuariu.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí", + "empty_column.direct": "Entá nun tienes dengún mensaxe direutu. Cuando unvies o recibas dalgún, va apaecer equí.", "empty_column.domain_blocks": "Entá nun hai dominios anubríos.", "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": "Entá nun tienes denguna solicitú de siguimientu. Cuando recibas una, va amosase equí.", "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.home": "¡Tienes la llinia temporal balera! Visita {public} o usa la gueta pa entamar y conocer a otros usuarios.", "empty_column.home.public_timeline": "la llinia temporal pública", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.list": "Entá nun hai nada nesta llista. Cuando los miembros d'esta llista espublicen estaos nuevos, van apaecer equí.", "empty_column.lists": "Entá nun tienes denguna llista. Cuando crees una, va amosase equí.", - "empty_column.mutes": "Enta nun silenciesti a dengún usuariu.", + "empty_column.mutes": "Entá nun silenciesti a dengún usuariu.", "empty_column.notifications": "Entá nun tienes dengún avisu. Interactua con otros p'aniciar la conversación.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "follow_request.authorize": "Autorizar", @@ -132,17 +133,24 @@ "getting_started.developers": "Desendolcadores", "getting_started.documentation": "Documentación", "getting_started.find_friends": "Alcontrar collacios de Twitter", - "getting_started.heading": "Getting started", + "getting_started.heading": "Entamu", "getting_started.invite": "Convidar xente", "getting_started.open_source_notice": "Mastodon ye software de códigu abiertu. Pues collaborar o informar de fallos en {github} (GitHub).", "getting_started.security": "Seguranza", "getting_started.terms": "Términos del serviciu", + "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.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": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", + "home.column_settings.show_reblogs": "Amosar toots compartíos", + "home.column_settings.show_replies": "Amosar rempuestes", "keyboard_shortcuts.back": "pa dir p'atrás", "keyboard_shortcuts.blocked": "p'abrir la llista d'usuarios bloquiaos", - "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.boost": "pa compartir un toot", "keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.description": "Descripción", @@ -174,29 +182,29 @@ "lightbox.close": "Close", "lightbox.next": "Siguiente", "lightbox.previous": "Previous", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", + "lists.account.add": "Amestar a la llista", + "lists.account.remove": "Desaniciar de la llista", + "lists.delete": "Desaniciar la llista", + "lists.edit": "Editar la llista", "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "loading_indicator.label": "Loading...", + "lists.new.title_placeholder": "Títulu nuevu de la llista", + "lists.search": "Guetar ente la xente que sigues", + "lists.subheading": "Les tos llistes", + "loading_indicator.label": "Cargando...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Nun s'alcontró", "missing_indicator.sublabel": "Esti recursu nun pudo alcontrase", "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Aplicaciones móviles", + "navigation_bar.apps": "Aplicaciones pa móviles", "navigation_bar.blocks": "Usuarios bloquiaos", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Llinia temporal llocal", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Mensaxes direutos", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Dominios anubríos", - "navigation_bar.edit_profile": "Editar perfil", + "navigation_bar.edit_profile": "Editar el perfil", "navigation_bar.favourites": "Favoritos", - "navigation_bar.filters": "Muted words", + "navigation_bar.filters": "Pallabres silenciaes", "navigation_bar.follow_requests": "Solicitúes de siguimientu", "navigation_bar.info": "Tocante a esta instancia", "navigation_bar.keyboard_shortcuts": "Atayos", @@ -211,15 +219,15 @@ "notification.favourite": "{name} favourited your status", "notification.follow": "{name} siguióte", "notification.mention": "{name} mentóte", - "notification.reblog": "{name} boosted your status", + "notification.reblog": "{name} compartió'l to estáu", "notifications.clear": "Llimpiar avisos", "notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?", "notifications.column_settings.alert": "Avisos d'escritoriu", - "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.favourite": "Favoritos:", "notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Toots compartíos:", "notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.sound": "Reproducir soníu", "notifications.group": "{count} avisos", @@ -239,7 +247,7 @@ "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", "onboarding.page_six.guidelines": "community guidelines", "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!", - "onboarding.page_six.various_app": "aplicaciones móviles", + "onboarding.page_six.various_app": "aplicaciones pa móviles", "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.", "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.", "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.", @@ -253,7 +261,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", - "regeneration_indicator.label": "Loading…", + "regeneration_indicator.label": "Cargando…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", @@ -268,20 +276,20 @@ "report.submit": "Submit", "report.target": "Report {target}", "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", + "search_popout.search_format": "Formatu de gueta avanzada", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "etiqueta", "search_popout.tips.status": "estáu", "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.user": "usuariu", "search_results.accounts": "Xente", - "search_results.hashtags": "Hashtags", + "search_results.hashtags": "Etiquetes", "search_results.statuses": "Toots", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "standalone.public_title": "A look inside...", "status.block": "Bloquiar a @{name}", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", + "status.cancel_reblog_private": "Dexar de compartir", + "status.cannot_reblog": "Esti artículu nun pue compartise", "status.delete": "Delete", "status.detailed_status": "Detailed conversation view", "status.direct": "Unviar un mensaxe direutu a @{name}", @@ -289,54 +297,55 @@ "status.favourite": "Favourite", "status.filtered": "Filtered", "status.load_more": "Cargar más", - "status.media_hidden": "Media hidden", + "status.media_hidden": "Mediu anubríu", "status.mention": "Mentar a @{name}", "status.more": "Más", "status.mute": "Silenciar a @{name}", - "status.mute_conversation": "Mute conversation", + "status.mute_conversation": "Silenciar la conversación", "status.open": "Espander esti estáu", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", + "status.pin": "Fixar nel perfil", + "status.pinned": "Toot fixáu", "status.read_more": "Read more", - "status.reblog": "Boost", - "status.reblog_private": "Boost to original audience", - "status.reblogged_by": "{name} boosted", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.reblog": "Compartir", + "status.reblog_private": "Compartir cola audiencia orixinal", + "status.reblogged_by": "{name} compartió", + "status.reblogs.empty": "Naide nun compartió esti toot entá. Cuando daquién lo faiga, va amosase equí.", + "status.redraft": "Desaniciar y reeditar", "status.reply": "Responder", "status.replyAll": "Reply to thread", "status.report": "Report @{name}", - "status.sensitive_toggle": "Click to view", - "status.sensitive_warning": "Sensitive content", + "status.sensitive_toggle": "Fai clic pa velu", + "status.sensitive_warning": "Conteníu sensible", "status.share": "Share", "status.show_less": "Amosar menos", "status.show_less_all": "Show less for all", "status.show_more": "Amosar más", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", + "status.unpin": "Desfixar del perfil", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", "tabs_bar.federated_timeline": "Federated", "tabs_bar.home": "Aniciu", - "tabs_bar.local_timeline": "Local", + "tabs_bar.local_timeline": "Llocal", "tabs_bar.notifications": "Avisos", "tabs_bar.search": "Search", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "upload_area.title": "Drag & drop to upload", "upload_button.label": "Add media", - "upload_form.description": "Describe for the visually impaired", + "upload_form.description": "Descripción pa discapacitaos visuales", "upload_form.focus": "Crop", - "upload_form.undo": "Delete", - "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", - "video.pause": "Pause", - "video.play": "Play", + "upload_form.undo": "Desaniciar", + "upload_progress.label": "Xubiendo...", + "video.close": "Zarrar el videu", + "video.exit_fullscreen": "Colar de la pantalla completa", + "video.expand": "Espander el videu", + "video.fullscreen": "Pantalla completa", + "video.hide": "Anubrir el videu", + "video.mute": "Silenciar el soníu", + "video.pause": "Posar", + "video.play": "Reproducir", "video.unmute": "Unmute sound" } diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 853361b80..1a5a70593 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", "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.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon е софтуер с отворен код. Можеш да помогнеш или да докладваш за проблеми в Github: {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.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": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index f4c5f97be..bc1fd8950 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Resultats de la cerca", "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i Llocs", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Encara no has bloquejat cap usuari.", "empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per fer rodar la pilota!", "empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir o informar de problemes a GitHub a {github}.", "getting_started.security": "Seguretat", "getting_started.terms": "Termes del servei", + "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.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": "Bàsic", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respostes", @@ -313,10 +321,11 @@ "status.show_less_all": "Mostra menys per a tot", "status.show_more": "Mostra més", "status.show_more_all": "Mostra més per a tot", + "status.show_thread": "Show thread", "status.unmute_conversation": "Activar conversació", "status.unpin": "Deslliga del perfil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Descartar suggeriment", + "suggestions.header": "És possible que t’interessi…", "tabs_bar.federated_timeline": "Federada", "tabs_bar.home": "Inici", "tabs_bar.local_timeline": "Local", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index f322ce53d..45bf0dc43 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Risultati di a cerca", "emoji_button.symbols": "Simbuli", "emoji_button.travel": "Lochi è Viaghju", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Per avà ùn avete bluccatu manc'un utilizatore.", "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!", "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitHub: {github}.", "getting_started.security": "Sicurità", "getting_started.terms": "Cundizione di u serviziu", + "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.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": "Bàsichi", "home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_replies": "Vede e risposte", @@ -278,7 +286,7 @@ "search_results.hashtags": "Hashtag", "search_results.statuses": "Statuti", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", - "standalone.public_title": "Una vista di...", + "standalone.public_title": "Una vista à l'internu...", "status.block": "Bluccà @{name}", "status.cancel_reblog_private": "Ùn sparte più", "status.cannot_reblog": "Stu statutu ùn pò micca esse spartutu", @@ -313,10 +321,11 @@ "status.show_less_all": "Ripiegà tuttu", "status.show_more": "Slibrà", "status.show_more_all": "Slibrà tuttu", + "status.show_thread": "Show thread", "status.unmute_conversation": "Ùn piattà più a cunversazione", "status.unpin": "Spuntarulà da u prufile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Righjittà a pruposta", + "suggestions.header": "Site forse interessatu·a da…", "tabs_bar.federated_timeline": "Glubale", "tabs_bar.home": "Accolta", "tabs_bar.local_timeline": "Lucale", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index e809eb136..80fab00c3 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -39,7 +39,7 @@ "alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.title": "Jejda!", "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}", - "bundle_column_error.body": "Při načtení tohoto prvku se něco pokazilo.", + "bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.", "bundle_column_error.retry": "Zkuste to znovu", "bundle_column_error.title": "Chyba sítě", "bundle_modal_error.close": "Zavřít", @@ -50,7 +50,7 @@ "column.direct": "Přímé zprávy", "column.domain_blocks": "Skryté domény", "column.favourites": "Oblíbené", - "column.follow_requests": "Žádosti o sledování", + "column.follow_requests": "Požadavky o sledování", "column.home": "Domů", "column.lists": "Seznamy", "column.mutes": "Ignorovaní uživatelé", @@ -66,7 +66,7 @@ "column_header.unpin": "Odepnout", "column_subheading.settings": "Nastavení", "community.column_settings.media_only": "Pouze média", - "compose_form.direct_message_warning": "Tento toot bude vidielný pouze zmíněným uživatelům.", + "compose_form.direct_message_warning": "Tento toot bude odeslán pouze zmíněným uživatelům.", "compose_form.direct_message_warning_learn_more": "Zjistit více", "compose_form.hashtag_warning": "Tento toot nebude zobrazen pod žádným hashtagem, neboť je neuvedený. Pouze veřejné tooty mohou být vyhledány podle hashtagu.", "compose_form.lock_disclaimer": "Váš účet není {locked}. Kdokoliv vás může sledovat a vidět vaše příspěvky pouze pro sledovatele.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Ještě jste nezablokoval/a žádného uživatele.", "empty_column.community": "Místní časová osa je prázdná. Napište něco veřejně a rozhýbejte to tu!", "empty_column.direct": "Ještě nemáte žádné přímé zprávy. Pokud nějakou pošlete nebo dostanete, zobrazí se zde.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.", "getting_started.security": "Zabezpečení", "getting_started.terms": "Podmínky používání", + "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.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": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", @@ -147,7 +155,7 @@ "keyboard_shortcuts.compose": "k zaměření na psací prostor", "keyboard_shortcuts.description": "Popis", "keyboard_shortcuts.direct": "k otevření sloupce s přímými zprávami", - "keyboard_shortcuts.down": "k přesunutí dolů v seznamu", + "keyboard_shortcuts.down": "k posunutí dolů v seznamu", "keyboard_shortcuts.enter": "k otevření příspěvku", "keyboard_shortcuts.favourite": "k oblíbení", "keyboard_shortcuts.favourites": "k otevření seznamu oblíbených", @@ -197,7 +205,7 @@ "navigation_bar.edit_profile": "Upravit profil", "navigation_bar.favourites": "Oblíbené", "navigation_bar.filters": "Skrytá slova", - "navigation_bar.follow_requests": "Žádosti o sledování", + "navigation_bar.follow_requests": "Požadavky o sledování", "navigation_bar.info": "O této instanci", "navigation_bar.keyboard_shortcuts": "Klávesové zkratky", "navigation_bar.lists": "Seznamy", @@ -269,15 +277,15 @@ "report.target": "Nahlásit {target}", "search.placeholder": "Hledat", "search_popout.search_format": "Pokročilé vyhledávání", - "search_popout.tips.full_text": "Jednoduchý textový výpis příspěvků, které jste napsal/a, oblíbil/a si, boostnul/a, nebo v nich byl/a zmíněn/a, včetně odpovídajících přezdívek, jmen a hashtagů.", + "search_popout.tips.full_text": "Jednoduchý textový výpis příspěvků, které jste napsal/a, oblíbil/a si, boostnul/a, nebo v nich byl/a zmíněn/a, včetně odpovídajících přezdívek, zobrazovaných jmen a hashtagů.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "příspěvek", - "search_popout.tips.text": "Jednoduchý textový výpis odpovídajících jmen, přezdívek a hashtagů", + "search_popout.tips.text": "Jednoduchý textový výpis odpovídajících zobrazovaných jmen, přezdívek a hashtagů", "search_popout.tips.user": "uživatel", "search_results.accounts": "Lidé", "search_results.hashtags": "Hashtagy", "search_results.statuses": "Tooty", - "search_results.total": "{count, number} {count, plural, one {výsledek} other {výsledků}}", + "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}", "standalone.public_title": "Nahlédněte dovnitř...", "status.block": "Zablokovat uživatele @{name}", "status.cancel_reblog_private": "Zrušit boost", @@ -313,16 +321,17 @@ "status.show_less_all": "Zobrazit méně pro všechny", "status.show_more": "Zobrazit více", "status.show_more_all": "Zobrazit více pro všechny", + "status.show_thread": "Show thread", "status.unmute_conversation": "Přestat ignorovat konverzaci", "status.unpin": "Odepnout z profilu", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Odmítnout návrh", + "suggestions.header": "Mohlo by vás zajímat…", "tabs_bar.federated_timeline": "Federovaná", "tabs_bar.home": "Domů", "tabs_bar.local_timeline": "Místní", "tabs_bar.notifications": "Oznámení", "tabs_bar.search": "Hledat", - "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} other {lidí}} diskutuje", + "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří", "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.", "upload_area.title": "Přetažením nahrajete", "upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 71a34272e..4047b54d6 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Canlyniadau chwilio", "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio & Llefydd", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", "empty_column.community": "Mae'r ffrwd lleol yn wag. Ysgrifenwch rhywbeth yn gyhoeddus i gael dechrau arni!", "empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mae Mastodon yn feddalwedd côd agored. Mae modd cyfrannu neu adrodd materion ar GitHUb ar {github}.", "getting_started.security": "Diogelwch", "getting_started.terms": "Telerau Gwasanaeth", + "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.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": "Syml", "home.column_settings.show_reblogs": "Dangos bŵstiau", "home.column_settings.show_replies": "Dangos ymatebion", @@ -313,6 +321,7 @@ "status.show_less_all": "Dangos llai i bawb", "status.show_more": "Dangos mwy", "status.show_more_all": "Dangos mwy i bawb", + "status.show_thread": "Show thread", "status.unmute_conversation": "Dad-dawelu sgwrs", "status.unpin": "Dadbinio o'r proffil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 54cae027f..133f9e696 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -92,8 +92,8 @@ "confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?", "confirmations.redraft.confirm": "Slet & omskriv", "confirmations.redraft.message": "Er du sikker på, du vil slette denne status og omskrive den? Favoritter og fremhævelser vil gå tabt og svar til det oprindelige opslag vil blive forældreløse.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Svar", + "confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?", "confirmations.unfollow.confirm": "Følg ikke længere", "confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?", "embed.instructions": "Indlejre denne status på din side ved at kopiere nedenstående kode.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser & steder", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Du har ikke blokeret nogen endnu.", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!", "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon er et open source software. Du kan bidrage eller rapporterer fejl på GitHub {github}.", "getting_started.security": "Sikkerhed", "getting_started.terms": "Vilkår", + "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.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": "Grundlæggende", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", @@ -297,7 +305,7 @@ "status.open": "Udvid denne status", "status.pin": "Fastgør til profil", "status.pinned": "Fastgjort trut", - "status.read_more": "Read more", + "status.read_more": "Læs mere", "status.reblog": "Fremhæv", "status.reblog_private": "Fremhæv til oprindeligt publikum", "status.reblogged_by": "{name} fremhævede", @@ -313,6 +321,7 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", "status.show_more_all": "Vis mere for alle", + "status.show_thread": "Show thread", "status.unmute_conversation": "Fjern dæmpningen fra samtale", "status.unpin": "Fjern som fastgjort fra profil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index a81a52d51..6bba6114e 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Suchergebnisse", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Reisen und Orte", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Du hast keine Profile blockiert.", "empty_column.community": "Die lokale Zeitleiste ist leer. Schreibe einen öffentlichen Beitrag, um den Ball ins Rollen zu bringen!", "empty_column.direct": "Du hast noch keine Direktnachrichten erhalten. Wenn du eine sendest oder empfängst, wird sie hier zu sehen sein.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon ist quelloffene Software. Du kannst auf GitHub unter {github} dazu beitragen oder Probleme melden.", "getting_started.security": "Sicherheit", "getting_started.terms": "Nutzungsbedingungen", + "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.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": "Einfach", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", @@ -313,6 +321,7 @@ "status.show_less_all": "Zeige weniger für alles", "status.show_more": "Mehr anzeigen", "status.show_more_all": "Zeige mehr für alles", + "status.show_thread": "Show thread", "status.unmute_conversation": "Stummschaltung von Thread aufheben", "status.unpin": "Vom Profil lösen", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 06356f8e6..ba332be3f 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", "empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!", "empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Το Mastodon είναι ελεύθερο λογισμικό. Μπορείς να συνεισφέρεις ή να αναφέρεις ζητήματα στο GitHub στο {github}.", "getting_started.security": "Ασφάλεια", "getting_started.terms": "Όροι χρήσης", + "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.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": "Βασικά", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", @@ -313,6 +321,7 @@ "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", "status.show_more_all": "Δείξε περισσότερα για όλα", + "status.show_thread": "Show thread", "status.unmute_conversation": "Διέκοψε την αποσιώπηση της συζήτησης", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index ef9f99abb..f7a303cdd 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "La loka tempolinio estas malplena. Skribu ion por plenigi ĝin!", "empty_column.direct": "Vi ankoraŭ ne havas rektan mesaĝon. Kiam vi sendos aŭ ricevos iun, ĝi aperos ĉi tie.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon estas malfermitkoda programo. Vi povas kontribui aŭ raporti problemojn en GitHub je {github}.", "getting_started.security": "Sekureco", "getting_started.terms": "Uzkondiĉoj", + "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.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": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", @@ -313,6 +321,7 @@ "status.show_less_all": "Malgrandigi ĉiujn", "status.show_more": "Grandigi", "status.show_more_all": "Grandigi ĉiujn", + "status.show_thread": "Show thread", "status.unmute_conversation": "Malsilentigi konversacion", "status.unpin": "Depingli de profilo", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 511209809..7b8cfe3f3 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -112,6 +112,7 @@ "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.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,6 +138,13 @@ "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.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": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", @@ -313,6 +321,7 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", + "status.show_thread": "Show thread", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index fb129967e..8ce3b9ba3 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -14,16 +14,16 @@ "account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.", "account.follows": "Jarraitzen", "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", - "account.follows_you": "Jarraitzen zaitu", + "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}", "account.media": "Media", "account.mention": "Aipatu @{name}", "account.moved_to": "{name} hona lekualdatu da:", "account.mute": "Mututu @{name}", "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak", "account.muted": "Mutututa", - "account.posts": "Toot-ak", + "account.posts": "Tootak", "account.posts_with_replies": "Toot eta erantzunak", "account.report": "Salatu @{name}", "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko", @@ -92,8 +92,8 @@ "confirmations.mute.message": "Ziur {name} mututu nahi duzula?", "confirmations.redraft.confirm": "Ezabatu eta berridatzi", "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Erantzun", + "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?", "confirmations.unfollow.confirm": "Utzi jarraitzeari", "confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?", "embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "Bilaketaren emaitzak", "emoji_button.symbols": "Sinboloak", "emoji_button.travel": "Bidaiak eta tokiak", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Ez duzu erabiltzailerik blokeatu oraindik.", "empty_column.community": "Denbora-lerro lokala hutsik dago. Idatzi zerbait publikoki pilota biraka jartzeko!", "empty_column.direct": "Ez duzu mezu zuzenik oraindik. Baten bat bidali edo jasotzen duzunean, hemen agertuko da.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon software librea da. Ekarpenak egin ditzakezu edo akatsen berri eman GitHub bidez: {github}.", "getting_started.security": "Segurtasuna", "getting_started.terms": "Erabilera baldintzak", + "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.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": "Oinarrizkoa", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", @@ -255,8 +263,8 @@ "privacy.unlisted.short": "Zerrendatu gabea", "regeneration_indicator.label": "Kargatzen…", "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}e", + "relative_time.hours": "{number}o", "relative_time.just_now": "orain", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", @@ -297,7 +305,7 @@ "status.open": "Hedatu mezu hau", "status.pin": "Finkatu profilean", "status.pinned": "Finkatutako toot-a", - "status.read_more": "Read more", + "status.read_more": "Irakurri gehiago", "status.reblog": "Bultzada", "status.reblog_private": "Bultzada jatorrizko hartzaileei", "status.reblogged_by": "{name}(r)en bultzada", @@ -313,10 +321,11 @@ "status.show_less_all": "Erakutsi denetarik gutxiago", "status.show_more": "Erakutsi gehiago", "status.show_more_all": "Erakutsi denetarik gehiago", + "status.show_thread": "Show thread", "status.unmute_conversation": "Desmututu elkarrizketa", "status.unpin": "Desfinkatu profiletik", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Errefusatu proposamena", + "suggestions.header": "Hau interesatu dakizuke…", "tabs_bar.federated_timeline": "Federatua", "tabs_bar.home": "Hasiera", "tabs_bar.local_timeline": "Lokala", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index e1d7d9628..befdb3804 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "نتایج جستجو", "emoji_button.symbols": "نمادها", "emoji_button.travel": "سفر و مکان", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "شما هنوز هیچ کسی را مسدود نکردهاید.", "empty_column.community": "فهرست نوشتههای محلی خالی است. چیزی بنویسید تا چرخش بچرخد!", "empty_column.direct": "شما هیچ پیغام مستقیمی ندارید. اگر چنین پیغامی بگیرید یا بفرستید اینجا نمایش خواهد یافت.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "ماستدون یک نرمافزار آزاد است. میتوانید در ساخت آن مشارکت کنید یا مشکلاتش را در {github} گزارش دهید.", "getting_started.security": "امنیت", "getting_started.terms": "شرایط استفاده", + "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.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": "اصلی", "home.column_settings.show_reblogs": "نمایش بازبوقها", "home.column_settings.show_replies": "نمایش پاسخها", @@ -313,6 +321,7 @@ "status.show_less_all": "نمایش کمتر همه", "status.show_more": "نمایش", "status.show_more_all": "نمایش بیشتر همه", + "status.show_thread": "Show thread", "status.unmute_conversation": "باصداکردن گفتگو", "status.unpin": "برداشتن نوشتهٔ ثابت نمایه", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index abbcded90..bb1725533 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -8,15 +8,15 @@ "account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.", "account.domain_blocked": "Verkko-osoite piilotettu", "account.edit_profile": "Muokkaa", - "account.endorse": "Feature on profile", + "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", "account.followers": "Seuraajia", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", "account.follows": "Seuraa", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", "account.media": "Media", "account.mention": "Mainitse @{name}", "account.moved_to": "{name} on muuttanut instanssiin:", @@ -31,7 +31,7 @@ "account.show_reblogs": "Näytä buustaukset käyttäjältä @{name}", "account.unblock": "Salli @{name}", "account.unblock_domain": "Näytä {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "Poista suosittelu profiilistasi", "account.unfollow": "Lakkaa seuraamasta", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", @@ -65,7 +65,7 @@ "column_header.show_settings": "Näytä asetukset", "column_header.unpin": "Poista kiinnitys", "column_subheading.settings": "Asetukset", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Vain media", "compose_form.direct_message_warning": "Tämä tuuttaus näkyy vain mainituille käyttäjille.", "compose_form.direct_message_warning_learn_more": "Lisätietoja", "compose_form.hashtag_warning": "Tämä tuuttaus ei näy hashtag-hauissa, koska se on listaamaton. Hashtagien avulla voi hakea vain julkisia tuuttauksia.", @@ -90,10 +90,10 @@ "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.", "confirmations.mute.confirm": "Mykistä", "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", "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?", + "confirmations.reply.confirm": "Vastaa", + "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", "confirmations.unfollow.confirm": "Lakkaa seuraamasta", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?", "embed.instructions": "Upota statuspäivitys sivullesi kopioimalla alla oleva koodi.", @@ -112,61 +112,69 @@ "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", - "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.account_timeline": "No toots here!", + "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ä.", - "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.domain_blocks": "Yhtään verkko-osoitetta ei ole vielä piilotettu.", + "empty_column.favourited_statuses": "Et ole vielä lisännyt tuuttauksia suosikkeihisi. Kun teet niin, tuuttaus näkyy tässä.", + "empty_column.favourites": "Kukaan ei ole vielä lisännyt tätä tuuttausta suosikkeihinsa. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", + "empty_column.follow_requests": "Sinulla ei ole vielä seurauspyyntöjä. Kun saat sellaisen, näkyy se tässä.", "empty_column.hashtag": "Tällä hashtagilla ei ole vielä mitään.", "empty_column.home": "Kotiaikajanasi on tyhjä! {public} ja hakutoiminto auttavat alkuun ja kohtaamaan muita käyttäjiä.", "empty_column.home.public_timeline": "yleinen aikajana", "empty_column.list": "Lista on vielä tyhjä. Listan jäsenten julkaisemat tilapäivitykset tulevat tähän näkyviin.", - "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": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.", + "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt manuaalisesti seuraamassa muiden instanssien käyttäjiä", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", - "getting_started.developers": "Developers", + "getting_started.developers": "Kehittäjille", "getting_started.documentation": "Documentation", - "getting_started.find_friends": "Find friends from Twitter", + "getting_started.find_friends": "Löydä ystäväsi Twitteristä", "getting_started.heading": "Aloitus", - "getting_started.invite": "Invite people", + "getting_started.invite": "Kutsu ihmisiä", "getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", + "getting_started.security": "Tunnukset", + "getting_started.terms": "Käyttöehdot", + "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.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": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", "keyboard_shortcuts.back": "liiku taaksepäin", - "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä", "keyboard_shortcuts.boost": "buustaa", "keyboard_shortcuts.column": "siirrä fokus tietyn sarakkeen tilapäivitykseen", "keyboard_shortcuts.compose": "siirry tekstinsyöttöön", "keyboard_shortcuts.description": "Kuvaus", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "avaa pikaviestisarake", "keyboard_shortcuts.down": "siirry listassa alaspäin", "keyboard_shortcuts.enter": "avaa tilapäivitys", "keyboard_shortcuts.favourite": "tykkää", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.favourites": "avaa lista suosikeista", + "keyboard_shortcuts.federated": "avaa yleinen aikajana", "keyboard_shortcuts.heading": "Näppäinkomennot", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "avaa kotiaikajana", "keyboard_shortcuts.hotkey": "Pikanäppäin", "keyboard_shortcuts.legend": "näytä tämä selite", - "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.local": "avaa paikallinen aikajana", "keyboard_shortcuts.mention": "mainitse julkaisija", - "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.muted": "avaa lista mykistetyistä käyttäjistä", + "keyboard_shortcuts.my_profile": "avaa profiilisi", + "keyboard_shortcuts.notifications": "avaa ilmoitukset-sarake", + "keyboard_shortcuts.pinned": "avaa lista kiinnitetyistä tuuttauksista", + "keyboard_shortcuts.profile": "avaa kirjoittajan profiili", "keyboard_shortcuts.reply": "vastaa", - "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.requests": "avaa lista seurauspyynnöistä", "keyboard_shortcuts.search": "siirry hakukenttään", - "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.start": "avaa \"Aloitus\" -sarake", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", "keyboard_shortcuts.toot": "ala kirjoittaa uutta tuuttausta", "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", @@ -187,16 +195,16 @@ "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", - "navigation_bar.apps": "Mobile apps", + "navigation_bar.apps": "Mobiiliapplikaatiot", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.community_timeline": "Paikallinen aikajana", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "Kirjoita uusi tuuttaus", "navigation_bar.direct": "Viestit", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Piilotetut verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.favourites": "Suosikit", - "navigation_bar.filters": "Muted words", + "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", "navigation_bar.info": "Tietoa tästä instanssista", "navigation_bar.keyboard_shortcuts": "Näppäinkomennot", @@ -207,7 +215,7 @@ "navigation_bar.pins": "Kiinnitetyt tuuttaukset", "navigation_bar.preferences": "Asetukset", "navigation_bar.public_timeline": "Yleinen aikajana", - "navigation_bar.security": "Security", + "navigation_bar.security": "Tunnukset", "notification.favourite": "{name} tykkäsi tilastasi", "notification.follow": "{name} seurasi sinua", "notification.mention": "{name} mainitsi sinut", @@ -287,7 +295,7 @@ "status.direct": "Viesti käyttäjälle @{name}", "status.embed": "Upota", "status.favourite": "Tykkää", - "status.filtered": "Filtered", + "status.filtered": "Suodatettu", "status.load_more": "Lataa lisää", "status.media_hidden": "Media piilotettu", "status.mention": "Mainitse @{name}", @@ -297,12 +305,12 @@ "status.open": "Laajenna tilapäivitys", "status.pin": "Kiinnitä profiiliin", "status.pinned": "Kiinnitetty tuuttaus", - "status.read_more": "Read more", + "status.read_more": "Näytä enemmän", "status.reblog": "Buustaa", "status.reblog_private": "Buustaa alkuperäiselle yleisölle", "status.reblogged_by": "{name} buustasi", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.redraft": "Poista & palauta muokattavaksi", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", "status.report": "Raportoi @{name}", @@ -313,6 +321,7 @@ "status.show_less_all": "Näytä vähemmän kaikista", "status.show_more": "Näytä lisää", "status.show_more_all": "Näytä lisää kaikista", + "status.show_thread": "Show thread", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index c6cb3cba8..85cafb18c 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Résultats de la recherche", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Lieux & Voyages", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Vous n’avez bloqué aucun utilisateur pour le moment.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", "empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer et envoyer vos commentaires et rapports de bogues via {github} sur GitHub.", "getting_started.security": "Sécurité", "getting_started.terms": "Conditions d’utilisation", + "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.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": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", @@ -313,10 +321,11 @@ "status.show_less_all": "Tout replier", "status.show_more": "Déplier", "status.show_more_all": "Tout déplier", + "status.show_thread": "Show thread", "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Rejeter la suggestion", + "suggestions.header": "Vous pourriez être intéressé par.…", "tabs_bar.federated_timeline": "Fil public global", "tabs_bar.home": "Accueil", "tabs_bar.local_timeline": "Fil public local", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 98011dac7..f2a8aec3a 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Resultados da busca", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Non bloqueou ningunha usuaria polo de agora.", "empty_column.community": "A liña temporal local está baldeira. Escriba algo de xeito público para que rule!", "empty_column.direct": "Aínda non ten mensaxes directas. Cando envíe ou reciba unha, aparecerá aquí.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon é software de código aberto. Pode contribuír ou informar de fallos en GitHub en {github}.", "getting_started.security": "Seguridade", "getting_started.terms": "Termos do servizo", + "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.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": "Básico", "home.column_settings.show_reblogs": "Mostrar repeticións", "home.column_settings.show_replies": "Mostrar respostas", @@ -313,10 +321,11 @@ "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar máis", "status.show_more_all": "Mostrar máis para todas", + "status.show_thread": "Show thread", "status.unmute_conversation": "Non acalar a conversa", "status.unpin": "Despegar do perfil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Rexeitar suxestión", + "suggestions.header": "Podería estar interesada en…", "tabs_bar.federated_timeline": "Federado", "tabs_bar.home": "Inicio", "tabs_bar.local_timeline": "Local", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index d0c96917e..3bcd825ae 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "תוצאות חיפוש", "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "טור הסביבה ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "מסטודון היא תוכנה חופשית (בקוד פתוח). ניתן לתרום או לדווח על בעיות בגיטהאב: {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.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": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "הראה יותר", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "הסרת השתקת שיחה", "status.unpin": "לשחרר מקיבוע באודות", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index c50138e23..33d2b3e37 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & Mjesta", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon je softver otvorenog koda. Možeš pridonijeti ili prijaviti probleme na GitHubu {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.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": "Osnovno", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Pokaži više", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Poništi utišavanje razgovora", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 90d186d57..51d65f98c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -112,6 +112,7 @@ "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.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.", @@ -137,6 +138,13 @@ "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.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", "home.column_settings.show_replies": "Válaszok mutatása", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "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", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 388cc4381..76c96ff03 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Որոնման արդյունքներ", "emoji_button.symbols": "Նշաններ", "emoji_button.travel": "Ուղեւորություն եւ տեղանքներ", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Տեղական հոսքը դատա՛րկ է։ Հրապարակային մի բան գրիր շարժիչը խոդ տալու համար։", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Մաստոդոնը բաց ելատեքստով ծրագրակազմ է։ Կարող ես ներդրում անել կամ վրեպներ զեկուցել ԳիթՀաբում՝ {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.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": "Հիմնական", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Ավելին", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Ապալռեցնել խոսակցությունը", "status.unpin": "Հանել անձնական էջից", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 4f3b654ab..5280d96c2 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Hasil pencarian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {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.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": "Dasar", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Tampilkan semua", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 55a5ba748..a8a162d82 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "La lokala tempolineo esas vakua. Skribez ulo publike por iniciar la agiveso!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon esas programaro kun apertita kodexo. Tu povas kontributar o signalar problemi en GitHub ye {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.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": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Montrar plue", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d6f6ff3e2..7907909c5 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Risultati della ricerca", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi e luoghi", + "empty_column.account_timeline": "No toots here!", "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.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon è un software open source. Puoi contribuire o segnalare errori su GitHub all'indirizzo {github}.", "getting_started.security": "Sicurezza", "getting_started.terms": "Condizioni del servizio", + "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.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": "Semplice", "home.column_settings.show_reblogs": "Mostra post condivisi", "home.column_settings.show_replies": "Mostra risposte", @@ -313,10 +321,11 @@ "status.show_less_all": "Mostra meno per tutti", "status.show_more": "Mostra di più", "status.show_more_all": "Mostra di più per tutti", + "status.show_thread": "Show thread", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Elimina suggerimento", + "suggestions.header": "Ti potrebbe interessare…", "tabs_bar.federated_timeline": "Federazione", "tabs_bar.home": "Home", "tabs_bar.local_timeline": "Locale", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index a79f9db86..e774bb70b 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -326,7 +326,7 @@ "status.show_less_all": "全て隠す", "status.show_more": "もっと見る", "status.show_more_all": "全て見る", - "status.show_thread": "続きを読む", + "status.show_thread": "スレッドを表示", "status.unmute_conversation": "会話のミュートを解除", "status.unpin": "プロフィールの固定表示を解除", "suggestions.dismiss": "隠す", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 5d6537b90..cbb639136 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "ძებნის შედეგები", "emoji_button.symbols": "სიმბოლოები", "emoji_button.travel": "მოგზაურობა და ადგილები", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "ლოკალური თაიმლაინი ცარიელია. დაწერეთ რაიმე ღიად ან ქენით რაიმე სხვა!", "empty_column.direct": "ჯერ პირდაპირი წერილები არ გაქვთ. როდესაც მიიღებთ ან გააგზავნით, გამოჩნდება აქ.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "მასტოდონი ღია პროგრამაა. შეგიძლიათ შეუწყოთ ხელი ან შექმნათ პრობემის რეპორტი {github}-ზე.", "getting_started.security": "უსაფრთხოება", "getting_started.terms": "მომსახურების პირობები", + "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.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": "ძირითადი", "home.column_settings.show_reblogs": "ბუსტების ჩვენება", "home.column_settings.show_replies": "პასუხების ჩვენება", @@ -313,6 +321,7 @@ "status.show_less_all": "აჩვენე ნაკლები ყველაზე", "status.show_more": "აჩვენე მეტი", "status.show_more_all": "აჩვენე მეტი ყველაზე", + "status.show_thread": "Show thread", "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება", "status.unpin": "პროფილიდან პინის მოშორება", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index a7228d4d5..cd481b9e5 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "아직 아무도 차단하지 않았습니다.", "empty_column.community": "로컬 타임라인에 아무 것도 없습니다. 아무거나 적어 보세요!", "empty_column.direct": "아직 다이렉트 메시지가 없습니다. 다이렉트 메시지를 보내거나 받은 경우, 여기에 표시 됩니다.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon은 오픈 소스 소프트웨어입니다. 누구나 GitHub({github})에서 개발에 참여하거나, 문제를 보고할 수 있습니다.", "getting_started.security": "보안", "getting_started.terms": "이용 약관", + "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.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": "기본 설정", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", @@ -313,10 +321,11 @@ "status.show_less_all": "모두 접기", "status.show_more": "더 보기", "status.show_more_all": "모두 펼치기", + "status.show_thread": "Show thread", "status.unmute_conversation": "이 대화의 뮤트 해제하기", "status.unpin": "고정 해제", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "추천 지우기", + "suggestions.header": "이것에 관심이 있을 것 같습니다…", "tabs_bar.federated_timeline": "연합", "tabs_bar.home": "홈", "tabs_bar.local_timeline": "로컬", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json new file mode 100644 index 000000000..3e243b743 --- /dev/null +++ b/app/javascript/mastodon/locales/ms.json @@ -0,0 +1,351 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.direct": "Direct message @{name}", + "account.disclaimer_full": "Information below may reflect the user's profile incompletely.", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel follow request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "account.view_full_profile": "View full profile", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media Only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "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.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "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.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": "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.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "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", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.documentation": "Documentation", + "getting_started.find_friends": "Find friends from Twitter", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {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.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": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "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.description": "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.hotkey": "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.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", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.info": "About this instance", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.group": "{count} notifications", + "onboarding.done": "Done", + "onboarding.next": "Next", + "onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", + "onboarding.page_four.home": "The home timeline shows posts from people you follow.", + "onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.", + "onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.", + "onboarding.page_one.full_handle": "Your full handle", + "onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.", + "onboarding.page_one.welcome": "Welcome to Mastodon!", + "onboarding.page_six.admin": "Your instance's admin is {admin}.", + "onboarding.page_six.almost_done": "Almost done...", + "onboarding.page_six.appetoot": "Bon Appetoot!", + "onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.", + "onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", + "onboarding.page_six.guidelines": "community guidelines", + "onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!", + "onboarding.page_six.various_app": "mobile apps", + "onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.", + "onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.", + "onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.", + "onboarding.skip": "Skip", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "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": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "standalone.public_title": "A look inside...", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_toggle": "Click to view", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "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_form.description": "Describe for the visually impaired", + "upload_form.focus": "Crop", + "upload_form.undo": "Delete", + "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", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index ec53a66b4..d8dea93d6 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en plekken", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Jij hebt nog geen enkele gebruiker geblokkeerd.", "empty_column.community": "De lokale tijdlijn is nog leeg. Toot iets in het openbaar om de bal aan het rollen te krijgen!", "empty_column.direct": "Je hebt nog geen directe berichten. Wanneer je er een verzend of ontvangt, zijn deze hier te zien.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon is vrije software. Je kunt bijdragen of problemen melden op GitHub via {github}.", "getting_started.security": "Beveiliging", "getting_started.terms": "Voorwaarden", + "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.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": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", @@ -313,10 +321,11 @@ "status.show_less_all": "Alles minder tonen", "status.show_more": "Meer tonen", "status.show_more_all": "Alles meer tonen", - "status.unmute_conversation": "Conversatie niet langer negeren", + "status.show_thread": "Show thread", + "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Suggestie verwerpen", + "suggestions.header": "Je bent waarschijnlijk ook geïnteresseerd in…", "tabs_bar.federated_timeline": "Globaal", "tabs_bar.home": "Start", "tabs_bar.local_timeline": "Lokaal", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index d827a9816..ea4e76de4 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Reise & steder", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokale tidslinjen er tom. Skriv noe offentlig for å få snøballen til å rulle!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon er fri programvare. Du kan bidra eller rapportere problemer på GitHub på {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.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": "Enkel", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Vis mer", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Ikke demp samtale", "status.unpin": "Angre festing på profilen", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 49da27568..ec0507e15 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Resultats de recèrca", "emoji_button.symbols": "Simbòls", "emoji_button.travel": "Viatges & lòcs", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Avètz pas blocat degun pel moment.", "empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !", "empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon es un logicial liure. Podètz contribuir e mandar vòstres comentaris e rapòrt de bug via {github} sus GitHub.", "getting_started.security": "Seguretat", "getting_started.terms": "Condicions d’utilizacion", + "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.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": "Basic", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", @@ -313,6 +321,7 @@ "status.show_less_all": "Los tornar plegar totes", "status.show_more": "Desplegar", "status.show_more_all": "Los desplegar totes", + "status.show_thread": "Show thread", "status.unmute_conversation": "Tornar mostrar la conversacion", "status.unpin": "Tirar del perfil", "suggestions.dismiss": "Regetar la suggestion", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index ed9956d2d..1fb8df0ad 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -116,6 +116,7 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", "empty_column.direct": "Nie masz żadnych wiadomości bezpośrednich. Kiedy dostaniesz lub wyślesz jakąś, pojawi się ona tutaj.", @@ -141,6 +142,13 @@ "getting_started.open_source_notice": "Mastodon jest oprogramowaniem o otwartym źródle. Możesz pomóc w rozwoju lub zgłaszać błędy na GitHubie tutaj: {github}.", "getting_started.security": "Bezpieczeństwo", "getting_started.terms": "Zasady użytkowania", + "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.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": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", @@ -318,6 +326,7 @@ "status.show_less_all": "Zwiń wszystkie", "status.show_more": "Rozwiń", "status.show_more_all": "Rozwiń wszystkie", + "status.show_thread": "Show thread", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 440a39c00..61811c53d 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Resultados da busca", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Você ainda não bloqueou nenhum usuário.", "empty_column.community": "A timeline local está vazia. Escreva algo publicamente para começar!", "empty_column.direct": "Você não tem nenhuma mensagem direta ainda. Quando você enviar ou receber uma, as mensagens aparecerão por aqui.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon é um software de código aberto. Você pode contribuir ou reportar problemas na página do GitHub do projeto: {github}.", "getting_started.security": "Segurança", "getting_started.terms": "Termos de serviço", + "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.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": "Básico", "home.column_settings.show_reblogs": "Mostrar compartilhamentos", "home.column_settings.show_replies": "Mostrar as respostas", @@ -203,7 +211,7 @@ "navigation_bar.lists": "Listas", "navigation_bar.logout": "Sair", "navigation_bar.mutes": "Usuários silenciados", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Pessoal", "navigation_bar.pins": "Postagens fixadas", "navigation_bar.preferences": "Preferências", "navigation_bar.public_timeline": "Global", @@ -313,6 +321,7 @@ "status.show_less_all": "Mostrar menos para todas as mensagens", "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais para todas as mensagens", + "status.show_thread": "Show thread", "status.unmute_conversation": "Desativar silêncio desta conversa", "status.unpin": "Desafixar do perfil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index 94d01f2a4..c03001080 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Ainda não existe conteúdo local para mostrar!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {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.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": "Básico", "home.column_settings.show_reblogs": "Mostrar as partilhas", "home.column_settings.show_replies": "Mostrar as respostas", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Mostrar mais", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Deixar de silenciar esta conversa", "status.unpin": "Não fixar no perfil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index ed6f2c7b1..fc196e820 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Rezultatele căutării", "emoji_button.symbols": "Simboluri", "emoji_button.travel": "Călătorii si Locuri", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Nu ai blocat nici un utilizator incă.", "empty_column.community": "Fluxul local este gol. Scrie ceva public pentru a împinge bila la vale!", "empty_column.direct": "Nu ai nici un mesaj direct incă. Când trimiți sau primești unul, vor fi afișate aici.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon este o rețea de socializare de tip open source. Puteți contribuii la dezvoltarea ei sau să semnalați erorile pe GitHub la {github}.", "getting_started.security": "Securitate", "getting_started.terms": "Termenii de Utilizare", + "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.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": "De bază", "home.column_settings.show_reblogs": "Arată redistribuirile", "home.column_settings.show_replies": "Arată răspunsurile", @@ -313,6 +321,7 @@ "status.show_less_all": "Arată mai puțin pentru toți", "status.show_more": "Arată mai mult", "status.show_more_all": "Arată mai mult pentru toți", + "status.show_thread": "Show thread", "status.unmute_conversation": "Repornește conversația", "status.unpin": "Eliberează din profil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d41cbd09d..3e2979c1b 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Вы ещё никого не заблокировали.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon - сервис с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.", "getting_started.security": "Безопасность", "getting_started.terms": "Условия использования", + "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.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": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", @@ -313,6 +321,7 @@ "status.show_less_all": "Свернуть для всех", "status.show_more": "Развернуть", "status.show_more_all": "Развернуть для всех", + "status.show_thread": "Show thread", "status.unmute_conversation": "Снять глушение с треда", "status.unpin": "Открепить от профиля", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 8d1547d66..e03cdef89 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -16,7 +16,7 @@ "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.", "account.follows_you": "Následuje ťa", "account.hide_reblogs": "Skryť povýšenia od @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} sa presunul/a na:", @@ -92,8 +92,8 @@ "confirmations.mute.message": "Naozaj chcete ignorovať {name}?", "confirmations.redraft.confirm": "Vyčistiť a prepísať", "confirmations.redraft.message": "Si si istý/á, že chceš premazať a prepísať tento príspevok? Jeho nadobudnuté odpovede, povýšenia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Odpovedať", + "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", "confirmations.unfollow.confirm": "Nesledovať", "confirmations.unfollow.message": "Naozaj chcete prestať sledovať {name}?", "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "Nájdené", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!", "empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.", "getting_started.security": "Zabezpečenie", "getting_started.terms": "Podmienky prevozu", + "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.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": "Základné", "home.column_settings.show_reblogs": "Zobraziť povýšené", "home.column_settings.show_replies": "Ukázať odpovede", @@ -297,7 +305,7 @@ "status.open": "Otvoriť tento status", "status.pin": "Pripni na profil", "status.pinned": "Pripnutý príspevok", - "status.read_more": "Read more", + "status.read_more": "Čítaj ďalej", "status.reblog": "Povýšiť", "status.reblog_private": "Povýš k pôvodnému publiku", "status.reblogged_by": "{name} povýšil/a", @@ -313,10 +321,11 @@ "status.show_less_all": "Všetkým ukáž menej", "status.show_more": "Ukáž viac", "status.show_more_all": "Všetkým ukáž viac", + "status.show_thread": "Show thread", "status.unmute_conversation": "Prestať ignorovať konverzáciu", "status.unpin": "Odopnúť z profilu", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Zavrhni návrh", + "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", "tabs_bar.home": "Domov", "tabs_bar.local_timeline": "Lokálna", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 01f2ccbf9..080ab8ffc 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -11,11 +11,11 @@ "account.endorse": "Zmožnost profila", "account.follow": "Sledi", "account.followers": "Sledilci", - "account.followers.empty": "Nihče ne sledi tega uporabnika.", + "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 napuhke od @{name}", + "account.hide_reblogs": "Skrij sunke od @{name}", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", "account.media": "Mediji", "account.mention": "Omeni @{name}", @@ -112,6 +112,7 @@ "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.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.", @@ -137,6 +138,13 @@ "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.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": "Osnovno", "home.column_settings.show_reblogs": "Pokaži sunke", "home.column_settings.show_replies": "Pokaži odgovore", @@ -313,6 +321,7 @@ "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", "status.show_more_all": "Prikaži več za vse", + "status.show_thread": "Show thread", "status.unmute_conversation": "Odtišaj pogovor", "status.unpin": "Odpni iz profila", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index b3075d2f1..feaeb95c1 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Rezultati pretrage", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Putovanja & mesta", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Lokalna lajna je prazna. Napišite nešto javno da lajna produva!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodont je softver otvorenog koda. Možete mu doprineti ili prijaviti probleme preko GitHub-a na {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.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": "Osnovno", "home.column_settings.show_reblogs": "Prikaži i podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Prikaži više", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Uključi prepisku", "status.unpin": "Otkači sa profila", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 4ed720c9f..7e3c3f213 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Резултати претраге", "emoji_button.symbols": "Симболи", "emoji_button.travel": "Путовања и места", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "Још увек немате блокираних корисника.", "empty_column.community": "Локална временска линија је празна. Напишите нешто јавно да започнете!", "empty_column.direct": "Још увек немате директних порука. Када пошаљете или примите једну, појавиће се овде.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Мастoдон је софтвер отвореног кода. Можете му допринети или пријавити проблеме преко ГитХаба на {github}.", "getting_started.security": "Безбедност", "getting_started.terms": "Услови коришћења", + "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.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": "Основно", "home.column_settings.show_reblogs": "Прикажи и подржавања", "home.column_settings.show_replies": "Прикажи одговоре", @@ -313,6 +321,7 @@ "status.show_less_all": "Прикажи мање за све", "status.show_more": "Прикажи више", "status.show_more_all": "Прикажи више за све", + "status.show_thread": "Show thread", "status.unmute_conversation": "Укључи преписку", "status.unpin": "Откачи са профила", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 7beee3cdc..6910b181d 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Sökresultat", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Resor & Platser", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!", "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.", "getting_started.security": "Säkerhet", "getting_started.terms": "Användarvillkor", + "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.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": "Grundläggande", "home.column_settings.show_reblogs": "Visa knuffar", "home.column_settings.show_replies": "Visa svar", @@ -313,6 +321,7 @@ "status.show_less_all": "Visa mindre för alla", "status.show_more": "Visa mer", "status.show_more_all": "Visa mer för alla", + "status.show_thread": "Show thread", "status.unmute_conversation": "Öppna konversation", "status.unpin": "Ångra fäst i profil", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 0c712e84c..3e243b743 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", "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.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {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.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": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index c602362bf..e5cfe4240 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -16,7 +16,7 @@ "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.", "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది", "account.media": "మీడియా", "account.mention": "@{name}ను ప్రస్తావించు", "account.moved_to": "{name} ఇక్కడికి మారారు:", @@ -92,8 +92,8 @@ "confirmations.mute.message": "{name}ను మీరు ఖచ్చితంగా మ్యూట్ చేయాలనుకుంటున్నారా?", "confirmations.redraft.confirm": "తొలగించు & తిరగరాయు", "confirmations.redraft.message": "మీరు ఖచ్చితంగా ఈ స్టేటస్ ని తొలగించి తిరగరాయాలనుకుంటున్నారా? ఈ స్టేటస్ యొక్క బూస్ట్ లు మరియు ఇష్టాలు పోతాయి,మరియు ప్రత్యుత్తరాలు అనాధలు అయిపోతాయి.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "ప్రత్యుత్తరమివ్వు", + "confirmations.reply.message": "ఇప్పుడే ప్రత్యుత్తరం ఇస్తే మీరు ప్రస్తుతం వ్రాస్తున్న సందేశం తిరగరాయబడుతుంది. మీరు ఖచ్చితంగా కొనసాగించాలనుకుంటున్నారా?", "confirmations.unfollow.confirm": "అనుసరించవద్దు", "confirmations.unfollow.message": "{name}ను మీరు ఖచ్చితంగా అనుసరించవద్దనుకుంటున్నారా?", "embed.instructions": "దిగువ కోడ్ను కాపీ చేయడం ద్వారా మీ వెబ్సైట్లో ఈ స్టేటస్ ని పొందుపరచండి.", @@ -112,6 +112,7 @@ "emoji_button.search_results": "శోధన ఫలితాలు", "emoji_button.symbols": "చిహ్నాలు", "emoji_button.travel": "ప్రయాణం & ప్రదేశాలు", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "మీరు ఇంకా ఏ వినియోగదారులనూ బ్లాక్ చేయలేదు.", "empty_column.community": "స్థానిక కాలక్రమం ఖాళీగా ఉంది. మొదలుపెట్టడానికి బహిరంగంగా ఏదో ఒకటి వ్రాయండి!", "empty_column.direct": "మీకు ఇంకా ఏ ప్రత్యక్ష సందేశాలు లేవు. మీరు ఒకదాన్ని పంపినప్పుడు లేదా స్వీకరించినప్పుడు, అది ఇక్కడ చూపబడుతుంది.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "మాస్టొడొన్ ఓపెన్ సోర్స్ సాఫ్ట్వేర్. మీరు {github} వద్ద GitHub పై సమస్యలను నివేదించవచ్చు లేదా తోడ్పడచ్చు.", "getting_started.security": "భద్రత", "getting_started.terms": "సేవా నిబంధనలు", + "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.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": "ప్రాథమిక", "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు", "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు", @@ -297,7 +305,7 @@ "status.open": "ఈ స్టేటస్ ను విస్తరించు", "status.pin": "ప్రొఫైల్లో అతికించు", "status.pinned": "అతికించిన టూట్", - "status.read_more": "Read more", + "status.read_more": "ఇంకా చదవండి", "status.reblog": "బూస్ట్", "status.reblog_private": "అసలు ప్రేక్షకులకు బూస్ట్ చేయి", "status.reblogged_by": "{name} బూస్ట్ చేసారు", @@ -313,10 +321,11 @@ "status.show_less_all": "అన్నిటికీ తక్కువ చూపించు", "status.show_more": "ఇంకా చూపించు", "status.show_more_all": "అన్నిటికీ ఇంకా చూపించు", + "status.show_thread": "Show thread", "status.unmute_conversation": "సంభాషణను అన్మ్యూట్ చేయి", "status.unpin": "ప్రొఫైల్ నుండి పీకివేయు", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "సూచనను రద్దు చేయి", + "suggestions.header": "మీకు వీటి మీద ఆసక్తి ఉండవచ్చు…", "tabs_bar.federated_timeline": "సమాఖ్య", "tabs_bar.home": "హోమ్", "tabs_bar.local_timeline": "స్థానిక", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 86d8c9b2b..a85cc63dc 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", "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.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {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.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": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Show more", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 98ae1185d..e1d0f33c4 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Yerel zaman tüneliniz boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın.", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon açık kaynaklı bir yazılımdır. Github {github}. {apps} üzerinden katkıda bulunabilir, hata raporlayabilirsiniz.", "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.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": "Temel", "home.column_settings.show_reblogs": "Boost edilenleri göster", "home.column_settings.show_replies": "Cevapları göster", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Daha fazlası", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 95a947f78..08c30833b 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!", "empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon - програма з відкритим вихідним кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.", "getting_started.security": "Безпека", "getting_started.terms": "Умови використання", + "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.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": "Основні", "home.column_settings.show_reblogs": "Показувати передмухи", "home.column_settings.show_replies": "Показувати відповіді", @@ -313,6 +321,7 @@ "status.show_less_all": "Show less for all", "status.show_more": "Розгорнути", "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", "status.unmute_conversation": "Зняти глушення з діалогу", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 3d837001a..e24910153 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", "emoji_button.travel": "旅行和地点", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!", "empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon 是一个开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。", "getting_started.security": "帐户安全", "getting_started.terms": "使用条款", + "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.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": "基本设置", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", @@ -313,6 +321,7 @@ "status.show_less_all": "隐藏所有内容", "status.show_more": "显示内容", "status.show_more_all": "显示所有内容", + "status.show_thread": "Show thread", "status.unmute_conversation": "不再隐藏此对话", "status.unpin": "在个人资料页面取消置顶", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 035a645b8..7e1d4c73b 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊景物", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "本站時間軸暫時未有內容,快寫一點東西來搶頭香啊!", "empty_column.direct": "你沒有個人訊息。當你發出或接收個人訊息,就會在這裡出現。", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon(萬象)是一個開放源碼的軟件。你可以在官方 GitHub ({github}) 貢獻或者回報問題。", "getting_started.security": "帳戶安全", "getting_started.terms": "服務條款", + "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.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": "基本", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", @@ -313,6 +321,7 @@ "status.show_less_all": "減少顯示這類文章", "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類文章", + "status.show_thread": "Show thread", "status.unmute_conversation": "解禁對話", "status.unpin": "解除置頂", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index acacc571d..4261c9345 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -112,6 +112,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", + "empty_column.account_timeline": "No toots here!", "empty_column.blocks": "你還沒有封鎖任何使用者。", "empty_column.community": "本地時間軸是空的。公開寫點什麼吧!", "empty_column.direct": "你還沒有使用過私訊。當你發出或著收到私訊時,它會在這裡顯示。", @@ -137,6 +138,13 @@ "getting_started.open_source_notice": "Mastodon 是開源軟體。你可以在 GitHub {github} 上做出貢獻或是回報問題。", "getting_started.security": "登入資訊", "getting_started.terms": "使用條款", + "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.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": "基本", "home.column_settings.show_reblogs": "顯示轉推", "home.column_settings.show_replies": "顯示回應", @@ -313,6 +321,7 @@ "status.show_less_all": "減少顯示這類嘟文", "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類嘟文", + "status.show_thread": "Show thread", "status.unmute_conversation": "解除此對話的靜音", "status.unpin": "解除置頂", "suggestions.dismiss": "Dismiss suggestion", diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 9cf783c84..47c4bf75c 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -47,7 +47,7 @@ function main() { content.textContent = timeAgoString({ formatMessage: ({ id, defaultMessage }, values) => (new IntlMessageFormat(messages[id] || defaultMessage, locale)).format(values), formatDate: (date, options) => (new Intl.DateTimeFormat(locale, options)).format(date), - }, datetime, now, datetime.getFullYear()); + }, datetime, now, now.getFullYear()); }); const reactComponents = document.querySelectorAll('[data-component]'); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 0ee0b002f..fc55163bc 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4658,6 +4658,19 @@ a.status-card.compact:hover { z-index: 5; } +.detailed, +.fullscreen { + .video-player__volume__current, + .video-player__volume::before { + bottom: 27px; + } + + .video-player__volume__handle { + bottom: 23px; + } + +} + .video-player { overflow: hidden; position: relative; @@ -4806,7 +4819,7 @@ a.status-card.compact:hover { &__time-current { color: $white; - margin-left: 10px; + margin-left: 60px; } &__time-sep { @@ -4819,6 +4832,48 @@ a.status-card.compact:hover { color: $white; } + &__volume { + cursor: pointer; + height: 24px; + display: inline; + + &::before { + content: ""; + width: 50px; + background: rgba($white, 0.35); + border-radius: 4px; + display: block; + position: absolute; + height: 4px; + left: 70px; + bottom: 20px; + } + + &__current { + display: block; + position: absolute; + height: 4px; + border-radius: 4px; + left: 70px; + bottom: 20px; + background: lighten($ui-highlight-color, 8%); + } + + &__handle { + position: absolute; + z-index: 3; + border-radius: 50%; + width: 12px; + height: 12px; + bottom: 16px; + left: 70px; + transition: opacity .1s ease; + background: lighten($ui-highlight-color, 8%); + box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); + pointer-events: none; + } + } + &__seek { cursor: pointer; height: 24px; diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 46ef85774..4f96204f2 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -266,7 +266,7 @@ code { font-family: inherit; font-size: 14px; color: $primary-text-color; - display: block; + display: inline-block; width: auto; position: relative; padding-top: 5px; diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 999954cb5..0a729011f 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -129,4 +129,10 @@ class ActivityPub::Activity ::FetchRemoteStatusService.new.call(@object['url']) end end + + def lock_or_return(key, expire_after = 7.days.seconds) + yield if redis.set(key, true, nx: true, ex: expire_after) + ensure + redis.del(key) + end end diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb index 457047ac0..8270fed1b 100644 --- a/app/lib/activitypub/activity/delete.rb +++ b/app/lib/activitypub/activity/delete.rb @@ -12,8 +12,10 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity private def delete_person - SuspendAccountService.new.call(@account) - @account.destroy! + lock_or_return("delete_in_progress:#{@account.id}") do + SuspendAccountService.new.call(@account) + @account.destroy! + end end def delete_note diff --git a/app/lib/entity_cache.rb b/app/lib/entity_cache.rb index 2aa37389c..8fff544a0 100644 --- a/app/lib/entity_cache.rb +++ b/app/lib/entity_cache.rb @@ -21,7 +21,7 @@ class EntityCache end unless uncached_ids.empty? - uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).map { |item| [item.shortcode, item] }.to_h + uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).each_with_object({}) { |item, h| h[item.shortcode] = item } uncached.each_value { |item| Rails.cache.write(to_key(:emoji, item.shortcode, domain), item, expires_in: MAX_EXPIRATION) } end diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 3d7db2721..31ff53860 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -40,7 +40,11 @@ class FeedManager end def push_to_list(list, status) - return false if status.reply? && status.in_reply_to_account_id != status.account_id + if status.reply? && status.in_reply_to_account_id != status.account_id + should_filter = status.in_reply_to_account_id != list.account_id + should_filter &&= !ListAccount.where(list_id: list.id, account_id: status.in_reply_to_account_id).exists? + return false if should_filter + end return false unless add_to_feed(:list, list.id, status) trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}") if push_update_required?("timeline:list:#{list.id}") diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index d13884ec8..05fd9eeb1 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -128,9 +128,9 @@ class Formatter return html if emojis.empty? emoji_map = if animate - emojis.map { |e| [e.shortcode, full_asset_url(e.image.url)] }.to_h + emojis.each_with_object({}) { |e, h| h[e.shortcode] = full_asset_url(e.image.url) } else - emojis.map { |e| [e.shortcode, full_asset_url(e.image.url(:static))] }.to_h + emojis.each_with_object({}) { |e, h| h[e.shortcode] = full_asset_url(e.image.url(:static)) } end i = -1 diff --git a/app/lib/request.rb b/app/lib/request.rb index 73b495ce1..bb6ef4661 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -2,6 +2,7 @@ require 'ipaddr' require 'socket' +require 'resolv' class Request REQUEST_TARGET = '(request-target)' @@ -45,7 +46,7 @@ class Request end begin - yield response.extend(ClientLimit) + yield response.extend(ClientLimit) if block_given? ensure http_client.close end @@ -94,7 +95,7 @@ class Request end def timeout - { connect: 1, read: 10, write: 10 } + { connect: nil, read: 10, write: 10 } end def http_client @@ -139,16 +140,29 @@ class Request class Socket < TCPSocket class << self def open(host, *args) - return super host, *args if thru_hidden_service? host + return super(host, *args) if thru_hidden_service?(host) + outer_e = nil - Addrinfo.foreach(host, nil, nil, :SOCK_STREAM) do |address| - begin - raise Mastodon::HostValidationError if PrivateAddressCheck.private_address? IPAddr.new(address.ip_address) - return super address.ip_address, *args - rescue => e - outer_e = e + + Resolv::DNS.open do |dns| + dns.timeouts = 1 + + addresses = dns.getaddresses(host).take(2) + time_slot = 10.0 / addresses.size + + addresses.each do |address| + begin + raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(IPAddr.new(address.to_s)) + + ::Timeout.timeout(time_slot, HTTP::TimeoutError) do + return super(address.to_s, *args) + end + rescue => e + outer_e = e + end end end + raise outer_e if outer_e end diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb index 70de7b792..343996e8a 100644 --- a/app/lib/settings/scoped_settings.rb +++ b/app/lib/settings/scoped_settings.rb @@ -32,7 +32,7 @@ module Settings def all_as_records vars = thing_scoped - records = vars.map { |r| [r.var, r] }.to_h + records = vars.each_with_object({}) { |r, h| h[r.var] = r } Setting.default_settings.each do |key, default_value| next if records.key?(key) || default_value.is_a?(Hash) @@ -66,7 +66,7 @@ module Settings class << self def default_settings - defaulting = DEFAULTING_TO_UNSCOPED.map { |k| [k, Setting[k]] }.to_h + defaulting = DEFAULTING_TO_UNSCOPED.each_with_object({}) { |k, h| h[k] = Setting[k] } Setting.default_settings.merge!(defaulting) end end diff --git a/app/models/account.rb b/app/models/account.rb index bd3dc9c96..645a303c3 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -32,9 +32,6 @@ # suspended :boolean default(FALSE), not null # locked :boolean default(FALSE), not null # header_remote_url :string default(""), not null -# statuses_count :integer default(0), not null -# followers_count :integer default(0), not null -# following_count :integer default(0), not null # last_webfingered_at :datetime # inbox_url :string default(""), not null # outbox_url :string default(""), not null @@ -49,7 +46,7 @@ # class Account < ApplicationRecord - USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.]+[a-z0-9_]+)?/i + USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i include AccountAvatar @@ -58,6 +55,7 @@ class Account < ApplicationRecord include AccountInteractions include Attachmentable include Paginable + include AccountCounters MAX_DISPLAY_NAME_LENGTH = (ENV['MAX_DISPLAY_NAME_CHARS'] || 30).to_i MAX_NOTE_LENGTH = (ENV['MAX_BIO_CHARS'] || 500).to_i @@ -124,14 +122,13 @@ class Account < ApplicationRecord scope :remote, -> { where.not(domain: nil) } scope :local, -> { where(domain: nil) } - scope :without_followers, -> { where(followers_count: 0) } - scope :with_followers, -> { where('followers_count > 0') } scope :expiring, ->(time) { remote.where.not(subscription_expires_at: nil).where('subscription_expires_at < ?', time) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } scope :silenced, -> { where(silenced: true) } scope :suspended, -> { where(suspended: true) } scope :without_suspended, -> { where(suspended: false) } scope :recent, -> { reorder(id: :desc) } + scope :bots, -> { where(actor_type: %w(Application Service)) } scope :alphabetic, -> { order(domain: :asc, username: :asc) } scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } scope :matches_username, ->(value) { where(arel_table[:username].matches("#{value}%")) } @@ -388,7 +385,9 @@ class Account < ApplicationRecord LIMIT ? SQL - find_by_sql([sql, limit]) + records = find_by_sql([sql, limit]) + ActiveRecord::Associations::Preloader.new.preload(records, :account_stat) + records end def advanced_search_for(terms, account, limit = 10, following = false) @@ -415,7 +414,7 @@ class Account < ApplicationRecord LIMIT ? SQL - find_by_sql([sql, account.id, account.id, account.id, limit]) + records = find_by_sql([sql, account.id, account.id, account.id, limit]) else sql = <<-SQL.squish SELECT @@ -431,8 +430,11 @@ class Account < ApplicationRecord LIMIT ? SQL - find_by_sql([sql, account.id, account.id, limit]) + records = find_by_sql([sql, account.id, account.id, limit]) end + + ActiveRecord::Associations::Preloader.new.preload(records, :account_stat) + records end private diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb index 84364bf1b..b10f50db7 100644 --- a/app/models/account_filter.rb +++ b/app/models/account_filter.rb @@ -5,13 +5,14 @@ class AccountFilter def initialize(params) @params = params + set_defaults! end def results - scope = Account.recent + scope = Account.recent.includes(:user) params.each do |key, value| - scope.merge!(scope_for(key, value)) if value.present? + scope.merge!(scope_for(key, value.to_s.strip)) if value.present? end scope @@ -19,6 +20,11 @@ class AccountFilter private + def set_defaults! + params['local'] = '1' if params['remote'].blank? + params['active'] = '1' if params['suspended'].blank? && params['silenced'].blank? + end + def scope_for(key, value) case key.to_s when 'local' @@ -27,10 +33,10 @@ class AccountFilter Account.remote when 'by_domain' Account.where(domain: value) + when 'active' + Account.without_suspended when 'silenced' Account.silenced - when 'alphabetic' - Account.reorder(nil).alphabetic when 'suspended' Account.suspended when 'username' @@ -40,11 +46,7 @@ class AccountFilter when 'email' accounts_with_users.merge User.matches_email(value) when 'ip' - if valid_ip?(value) - accounts_with_users.merge User.with_recent_ip_address(value) - else - Account.default_scoped - end + valid_ip?(value) ? accounts_with_users.where('users.current_sign_in_ip <<= ?', value) : Account.none when 'staff' accounts_with_users.merge User.staff else @@ -57,8 +59,7 @@ class AccountFilter end def valid_ip?(value) - IPAddr.new(value) - true + IPAddr.new(value) && true rescue IPAddr::InvalidAddressError false end diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb new file mode 100644 index 000000000..d5715268e --- /dev/null +++ b/app/models/account_stat.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: account_stats +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# statuses_count :bigint(8) default(0), not null +# following_count :bigint(8) default(0), not null +# followers_count :bigint(8) default(0), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class AccountStat < ApplicationRecord + belongs_to :account, inverse_of: :account_stat + + def increment_count!(key) + update(key => public_send(key) + 1) + end + + def decrement_count!(key) + update(key => [public_send(key) - 1, 0].max) + end +end diff --git a/app/models/concerns/account_counters.rb b/app/models/concerns/account_counters.rb new file mode 100644 index 000000000..fa3ec9a3d --- /dev/null +++ b/app/models/concerns/account_counters.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module AccountCounters + extend ActiveSupport::Concern + + included do + has_one :account_stat, inverse_of: :account + after_save :save_account_stat + end + + delegate :statuses_count, + :statuses_count=, + :following_count, + :following_count=, + :followers_count, + :followers_count=, + :increment_count!, + :decrement_count!, + to: :account_stat + + def account_stat + super || build_account_stat + end + + private + + def save_account_stat + return unless account_stat&.changed? + account_stat.save + end +end diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index ff57a884b..f27d39483 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -45,9 +45,9 @@ module AccountInteractions end def domain_blocking_map(target_account_ids, account_id) - accounts_map = Account.where(id: target_account_ids).select('id, domain').map { |a| [a.id, a.domain] }.to_h + accounts_map = Account.where(id: target_account_ids).select('id, domain').each_with_object({}) { |a, h| h[a.id] = a.domain } blocked_domains = domain_blocking_map_by_domain(accounts_map.values.compact, account_id) - accounts_map.map { |id, domain| [id, blocked_domains[domain]] }.to_h + accounts_map.reduce({}) { |h, (id, domain)| h.merge(id => blocked_domains[domain]) } end def domain_blocking_map_by_domain(target_domains, account_id) diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb index fa441469c..b9c800c2a 100644 --- a/app/models/concerns/status_threading_concern.rb +++ b/app/models/concerns/status_threading_concern.rb @@ -8,7 +8,7 @@ module StatusThreadingConcern end def descendants(limit, account = nil, max_child_id = nil, since_child_id = nil, depth = nil) - find_statuses_from_tree_path(descendant_ids(limit, max_child_id, since_child_id, depth), account) + find_statuses_from_tree_path(descendant_ids(limit, max_child_id, since_child_id, depth), account, promote: true) end private @@ -76,7 +76,7 @@ module StatusThreadingConcern descendants_with_self - [self] end - def find_statuses_from_tree_path(ids, account) + def find_statuses_from_tree_path(ids, account, promote: false) statuses = statuses_with_accounts(ids).to_a account_ids = statuses.map(&:account_id).uniq domains = statuses.map(&:account_domain).compact.uniq @@ -86,6 +86,28 @@ module StatusThreadingConcern # Order ancestors/descendants by tree path statuses.sort_by! { |status| ids.index(status.id) } + + # Bring self-replies to the top + if promote + promote_by!(statuses) { |status| status.in_reply_to_account_id == status.account_id } + else + statuses + end + end + + def promote_by!(arr) + insert_at = arr.find_index { |item| !yield(item) } + + return arr if insert_at.nil? + + arr.each_with_index do |item, index| + next if index <= insert_at || !yield(item) + + arr.insert(insert_at, arr.delete_at(index)) + insert_at += 1 + end + + arr end def relations_map_for_account(account, account_ids, domains) diff --git a/app/models/follow.rb b/app/models/follow.rb index 7ad56eb78..87fa11425 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -16,11 +16,8 @@ class Follow < ApplicationRecord include Paginable include RelationshipCacheable - belongs_to :account, counter_cache: :following_count - - belongs_to :target_account, - class_name: 'Account', - counter_cache: :followers_count + belongs_to :account + belongs_to :target_account, class_name: 'Account' has_one :notification, as: :activity, dependent: :destroy @@ -39,7 +36,9 @@ class Follow < ApplicationRecord end before_validation :set_uri, only: :create + after_create :increment_cache_counters after_destroy :remove_endorsements + after_destroy :decrement_cache_counters private @@ -50,4 +49,14 @@ class Follow < ApplicationRecord def remove_endorsements AccountPin.where(target_account_id: target_account_id, account_id: account_id).delete_all end + + def increment_cache_counters + account&.increment_count!(:following_count) + target_account&.increment_count!(:followers_count) + end + + def decrement_cache_counters + account&.decrement_count!(:following_count) + target_account&.decrement_count!(:followers_count) + end end diff --git a/app/models/identity.rb b/app/models/identity.rb index a5e0c09ec..8cc65aef4 100644 --- a/app/models/identity.rb +++ b/app/models/identity.rb @@ -3,12 +3,12 @@ # # Table name: identities # -# id :integer not null, primary key -# user_id :integer # provider :string default(""), not null # uid :string default(""), not null # created_at :datetime not null # updated_at :datetime not null +# id :bigint(8) not null, primary key +# user_id :bigint(8) # class Identity < ApplicationRecord diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 0f787ebc4..a034b55fd 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -77,6 +77,7 @@ class MediaAttachment < ApplicationRecord format: 'mp4', convert_options: { output: { + 'loglevel' => 'fatal', 'movflags' => 'faststart', 'pix_fmt' => 'yuv420p', 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'', diff --git a/app/models/notification.rb b/app/models/notification.rb index 78b180301..2f0a9b78c 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -75,7 +75,7 @@ class Notification < ApplicationRecord return if account_ids.empty? - accounts = Account.where(id: account_ids).map { |a| [a.id, a] }.to_h + accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } cached_items.each do |item| item.from_account = accounts[item.from_account_id] diff --git a/app/models/setting.rb b/app/models/setting.rb index 033d09fd5..a5878e96a 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -40,7 +40,7 @@ class Setting < RailsSettings::Base def all_as_records vars = thing_scoped - records = vars.map { |r| [r.var, r] }.to_h + records = vars.each_with_object({}) { |r, h| h[r.var] = r } default_settings.each do |key, default_value| next if records.key?(key) || default_value.is_a?(Hash) diff --git a/app/models/status.rb b/app/models/status.rb index e73f11503..65cd97c51 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -99,17 +99,16 @@ class Status < ApplicationRecord scope :not_local_only, -> { where(local_only: [false, nil]) } - cache_associated :account, - :application, + cache_associated :application, :media_attachments, :conversation, :status_stat, :tags, :preview_cards, :stream_entry, - active_mentions: :account, + account: :account_stat, + active_mentions: { account: :account_stat }, reblog: [ - :account, :application, :stream_entry, :tags, @@ -117,9 +116,10 @@ class Status < ApplicationRecord :media_attachments, :conversation, :status_stat, - active_mentions: :account, + account: :account_stat, + active_mentions: { account: :account_stat }, ], - thread: :account + thread: { account: :account_stat } delegate :domain, to: :account, prefix: true @@ -328,7 +328,7 @@ class Status < ApplicationRecord end def favourites_map(status_ids, account_id) - Favourite.select('status_id').where(status_id: status_ids).where(account_id: account_id).map { |f| [f.status_id, true] }.to_h + Favourite.select('status_id').where(status_id: status_ids).where(account_id: account_id).each_with_object({}) { |f, h| h[f.status_id] = true } end def bookmarks_map(status_ids, account_id) @@ -336,15 +336,15 @@ class Status < ApplicationRecord end def reblogs_map(status_ids, account_id) - select('reblog_of_id').where(reblog_of_id: status_ids).where(account_id: account_id).reorder(nil).map { |s| [s.reblog_of_id, true] }.to_h + select('reblog_of_id').where(reblog_of_id: status_ids).where(account_id: account_id).reorder(nil).each_with_object({}) { |s, h| h[s.reblog_of_id] = true } end def mutes_map(conversation_ids, account_id) - ConversationMute.select('conversation_id').where(conversation_id: conversation_ids).where(account_id: account_id).map { |m| [m.conversation_id, true] }.to_h + ConversationMute.select('conversation_id').where(conversation_id: conversation_ids).where(account_id: account_id).each_with_object({}) { |m, h| h[m.conversation_id] = true } end def pins_map(status_ids, account_id) - StatusPin.select('status_id').where(status_id: status_ids).where(account_id: account_id).map { |p| [p.status_id, true] }.to_h + StatusPin.select('status_id').where(status_id: status_ids).where(account_id: account_id).each_with_object({}) { |p, h| h[p.status_id] = true } end def reload_stale_associations!(cached_items) @@ -359,7 +359,7 @@ class Status < ApplicationRecord return if account_ids.empty? - accounts = Account.where(id: account_ids).map { |a| [a.id, a] }.to_h + accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } cached_items.each do |item| item.account = accounts[item.account_id] @@ -471,6 +471,8 @@ class Status < ApplicationRecord end def set_conversation + self.thread = thread.reblog if thread&.reblog? + self.reply = !(in_reply_to_id.nil? && thread.nil?) unless reply if reply? && !thread.nil? @@ -501,12 +503,7 @@ class Status < ApplicationRecord def increment_counter_caches return if direct_visibility? - if association(:account).loaded? - account.update_attribute(:statuses_count, account.statuses_count + 1) - else - Account.where(id: account_id).update_all('statuses_count = COALESCE(statuses_count, 0) + 1') - end - + account&.increment_count!(:statuses_count) reblog&.increment_count!(:reblogs_count) if reblog? thread&.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?) end @@ -514,12 +511,7 @@ class Status < ApplicationRecord def decrement_counter_caches return if direct_visibility? || marked_for_mass_destruction? - if association(:account).loaded? - account.update_attribute(:statuses_count, [account.statuses_count - 1, 0].max) - else - Account.where(id: account_id).update_all('statuses_count = GREATEST(COALESCE(statuses_count, 0) - 1, 0)') - end - + account&.decrement_count!(:statuses_count) reblog&.decrement_count!(:reblogs_count) if reblog? thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?) end diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb index c559651c6..3a8be2164 100644 --- a/app/models/trending_tags.rb +++ b/app/models/trending_tags.rb @@ -18,7 +18,7 @@ class TrendingTags def get(limit) key = "#{KEY}:#{Time.now.utc.beginning_of_day.to_i}" tag_ids = redis.zrevrange(key, 0, limit - 1).map(&:to_i) - tags = Tag.where(id: tag_ids).to_a.map { |tag| [tag.id, tag] }.to_h + tags = Tag.where(id: tag_ids).to_a.each_with_object({}) { |tag, h| h[tag.id] = tag } tag_ids.map { |tag_id| tags[tag_id] }.compact end diff --git a/app/models/user.rb b/app/models/user.rb index b9e18eecd..704523d34 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -83,7 +83,6 @@ class User < ApplicationRecord 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(accounts: { suspended: false }) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } - scope :with_recent_ip_address, ->(value) { where(arel_table[:current_sign_in_ip].eq(value).or(arel_table[:last_sign_in_ip].eq(value))) } before_validation :sanitize_languages diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index 5d22962cf..b0756d1f4 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -22,7 +22,7 @@ class InstancePresenter end def status_count - Rails.cache.fetch('local_status_count') { Account.local.sum(:statuses_count) } + Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i end def domain_count diff --git a/app/serializers/rest/filter_serializer.rb b/app/serializers/rest/filter_serializer.rb index 3134be371..57205630b 100644 --- a/app/serializers/rest/filter_serializer.rb +++ b/app/serializers/rest/filter_serializer.rb @@ -3,4 +3,8 @@ class REST::FilterSerializer < ActiveModel::Serializer attributes :id, :phrase, :context, :whole_word, :expires_at, :irreversible + + def id + object.id.to_s + end end diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index b7296cf7c..fc412c7d4 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -12,12 +12,12 @@ class BatchedRemoveStatusService < BaseService def call(statuses) statuses = Status.where(id: statuses.map(&:id)).includes(:account, :stream_entry).flat_map { |status| [status] + status.reblogs.includes(:account, :stream_entry).to_a } - @mentions = statuses.map { |s| [s.id, s.active_mentions.includes(:account).to_a] }.to_h - @tags = statuses.map { |s| [s.id, s.tags.pluck(:name)] }.to_h + @mentions = statuses.each_with_object({}) { |s, h| h[s.id] = s.active_mentions.includes(:account).to_a } + @tags = statuses.each_with_object({}) { |s, h| h[s.id] = s.tags.pluck(:name) } @stream_entry_batches = [] @salmon_batches = [] - @json_payloads = statuses.map { |s| [s.id, Oj.dump(event: :delete, payload: s.id.to_s)] }.to_h + @json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } @activity_xml = {} # Ensure that rendered XML reflects destroyed state diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb index 550e75f33..d6508a988 100644 --- a/app/services/fetch_atom_service.rb +++ b/app/services/fetch_atom_service.rb @@ -29,7 +29,7 @@ class FetchAtomService < BaseService def perform_request(&block) accept = 'text/html' - accept = 'application/activity+json, application/ld+json, application/atom+xml, ' + accept unless @unsupported_activity + accept = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/atom+xml, ' + accept unless @unsupported_activity Request.new(:get, @url).add_headers('Accept' => accept).perform(&block) end @@ -39,7 +39,7 @@ class FetchAtomService < BaseService if response.mime_type == 'application/atom+xml' [@url, { prefetched_body: response.body_with_limit }, :ostatus] - elsif ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(response.mime_type) + elsif ['application/activity+json', 'application/ld+json'].include?(response.mime_type) body = response.body_with_limit json = body_to_json(body) if supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) && json['inbox'].present? diff --git a/app/services/hashtag_query_service.rb b/app/services/hashtag_query_service.rb index 86558a446..5773d78c6 100644 --- a/app/services/hashtag_query_service.rb +++ b/app/services/hashtag_query_service.rb @@ -2,15 +2,14 @@ class HashtagQueryService < BaseService def call(tag, params, account = nil, local = false) - any = tags_for(params[:any]) + tags = tags_for(Array(tag.name) | Array(params[:any])).pluck(:id) all = tags_for(params[:all]) none = tags_for(params[:none]) - @query = Status.as_tag_timeline(tag, account, local) - .tagged_with_all(all) - .tagged_with_none(none) - @query = @query.distinct.or(self.class.new.call(any, params.except(:any), account, local).distinct) if any - @query + Status.distinct + .as_tag_timeline(tags, account, local) + .tagged_with_all(all) + .tagged_with_none(none) end private diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index b825b82cb..0ee9dd7de 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -8,8 +8,8 @@ %meta{ name: 'robots', content: 'noindex' }/ %link{ rel: 'salmon', href: api_salmon_url(@account.id) }/ - %link{ rel: 'alternate', type: 'application/rss+xml', href: account_url(@account, format: 'rss') }/ %link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/ + %link{ rel: 'alternate', type: 'application/rss+xml', href: account_url(@account, format: 'rss') }/ %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/ - if @older_url diff --git a/app/views/admin/accounts/_account.html.haml b/app/views/admin/accounts/_account.html.haml index c6e63152d..0fadaae1e 100644 --- a/app/views/admin/accounts/_account.html.haml +++ b/app/views/admin/accounts/_account.html.haml @@ -1,18 +1,15 @@ %tr - %td.username - = account.username %td - - unless account.local? - = link_to account.domain, admin_accounts_path(by_domain: account.domain) + = admin_account_link_to(account) %td - - if account.local? - - if account.user.nil? - = t("admin.accounts.moderation.suspended") - - else - = t("admin.accounts.roles.#{account.user.role}") + %div{ style: 'margin: -2px 0' }= account_badge(account, all: true) + %td + - if account.user_current_sign_in_ip + %samp= account.user_current_sign_in_ip - else - = account.protocol.humanize + \- %td - = table_link_to 'circle', t('admin.accounts.web'), web_path("accounts/#{account.id}") - = table_link_to 'globe', t('admin.accounts.public'), TagManager.instance.url_for(account) - = table_link_to 'pencil', t('admin.accounts.edit'), admin_account_path(account.id) + - if account.user_current_sign_in_at + %time.time-ago{ datetime: account.user_current_sign_in_at.iso8601, title: l(account.user_current_sign_in_at) }= l account.user_current_sign_in_at + - else + \- diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index 4bee73adc..0d31eee36 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -5,41 +5,19 @@ .filter-subset %strong= t('admin.accounts.location.title') %ul - %li= filter_link_to t('admin.accounts.location.all'), local: nil, remote: nil - %li - - if selected? local: '1', remote: nil - = filter_link_to t('admin.accounts.location.local'), {local: nil, remote: nil}, {local: '1', remote: nil} - - else - = filter_link_to t('admin.accounts.location.local'), local: '1', remote: nil - %li - - if selected? remote: '1', local: nil - = filter_link_to t('admin.accounts.location.remote'), {remote: nil, local: nil}, {remote: '1', local: nil} - - else - = filter_link_to t('admin.accounts.location.remote'), remote: '1', local: nil + %li= filter_link_to t('admin.accounts.location.local'), remote: nil + %li= filter_link_to t('admin.accounts.location.remote'), remote: '1' .filter-subset %strong= t('admin.accounts.moderation.title') %ul - %li= filter_link_to t('admin.accounts.moderation.all'), silenced: nil, suspended: nil - %li - - if selected? silenced: '1' - = filter_link_to t('admin.accounts.moderation.silenced'), {silenced: nil}, {silenced: '1'} - - else - = filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1' - %li - - if selected? suspended: '1' - = filter_link_to t('admin.accounts.moderation.suspended'), {suspended: nil}, {suspended: '1'} - - else - = filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1' + %li= filter_link_to t('admin.accounts.moderation.active'), silenced: nil, suspended: nil + %li= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1', suspended: nil + %li= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1', silenced: nil .filter-subset %strong= t('admin.accounts.role') %ul %li= filter_link_to t('admin.accounts.moderation.all'), staff: nil %li= filter_link_to t('admin.accounts.roles.staff'), staff: '1' - .filter-subset - %strong= t('admin.accounts.order.title') - %ul - %li= filter_link_to t('admin.accounts.order.most_recent'), alphabetic: nil - %li= filter_link_to t('admin.accounts.order.alphabetic'), alphabetic: '1' = form_tag admin_accounts_url, method: 'GET', class: 'simple_form' do .fields-group @@ -60,9 +38,9 @@ %thead %tr %th= t('admin.accounts.username') - %th= t('admin.accounts.domain') - %th - %th + %th= t('admin.accounts.role') + %th= t('admin.accounts.most_recent_ip') + %th= t('admin.accounts.most_recent_activity') %tbody = render @accounts diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 17f1f224d..c1a5fc1bd 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -68,7 +68,7 @@ %time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) } = l @account.user_current_sign_in_at - else - Never + \- - else %tr %th= t('admin.accounts.profile_url') diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml index 7fc08a23b..694461fdf 100644 --- a/app/views/auth/registrations/edit.html.haml +++ b/app/views/auth/registrations/edit.html.haml @@ -9,13 +9,14 @@ = f.input :email, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, required: true, hint: false .fields-group - = f.input :password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: false + = f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true .fields-group - = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_new_password'), :autocomplete => 'off' } + = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: false .fields-group - = f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true + = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_new_password'), :autocomplete => 'off' } + .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/config/locales/activerecord.ast.yml b/config/locales/activerecord.ast.yml index 6e32cbc2f..de95817c1 100644 --- a/config/locales/activerecord.ast.yml +++ b/config/locales/activerecord.ast.yml @@ -1,2 +1,9 @@ --- -ast: {} +ast: + activerecord: + errors: + models: + account: + attributes: + username: + invalid: namái lletres, númberos y guiones baxos diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 095b1f584..dd0cfd1f2 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -30,16 +30,34 @@ ar: other_instances: خوادم أخرى privacy_policy: سياسة الخصوصية source_code: الشفرة المصدرية - status_count_after: منشورات + status_count_after: + few: منشورات + many: منشورات + one: منشور + other: منشورات + two: منشورات + zero: منشورات status_count_before: نشروا terms: شروط الخدمة - user_count_after: مستخدِمين + user_count_after: + few: مستخدمين + many: مستخدمين + one: مستخدم + other: مستخدمين + two: مستخدمين + zero: مستخدمين user_count_before: يستضيف what_is_mastodon: ما هو ماستدون ؟ accounts: choices_html: 'توصيات %{name} :' follow: إتبع - followers: مُتابِعون + followers: + few: متابِعون + many: متابِعون + one: متابِع + other: متابِعون + two: متابِعون + zero: متابِعون following: مُتابَع joined: انضم·ت في %{date} link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date} @@ -51,7 +69,13 @@ ar: people_who_follow: الأشخاص الذين يتبعون %{name} pin_errors: following: يجب أن تكون مِن متابعي حساب الشخص الذي تريد إبرازه - posts: تبويقات + posts: + few: تبويقات + many: تبويقات + one: تبويق + other: تبويقات + two: تبويقات + zero: تبويقات posts_tab_heading: تبويقات posts_with_replies: التبويقات و الردود reserved_username: إسم المستخدم محجوز @@ -115,10 +139,6 @@ ar: most_recent_ip: أحدث عنوان إيبي no_limits_imposed: مِن دون حدود مشروطة not_subscribed: غير مشترك - order: - alphabetic: أبجديًا - most_recent: الأحدث - title: الترتيب outbox_url: رابط صندوق الصادر perform_full_suspension: تعطيل profile_url: رابط الملف الشخصي @@ -262,7 +282,13 @@ ar: suspend: تعليق severity: الشدة show: - affected_accounts: "%{count} حسابات معنية في قاعدة البيانات" + affected_accounts: + few: "%{count} حسابات معنية في قاعدة البيانات" + many: "%{count} حسابات معنية في قاعدة البيانات" + one: حساب واحد معني في قاعدة البيانات + other: "%{count} حسابات معنية في قاعدة البيانات" + two: حسابات معنية في قاعدة البيانات + zero: حسابات معنية في قاعدة البيانات retroactive: silence: إلغاء الكتم عن كافة الحسابات المتواجدة على هذا النطاق suspend: إلغاء التعليق المفروض على كافة حسابات هذا النطاق @@ -586,7 +612,13 @@ ar: expires_in_prompt: أبدا generate: توليد invited_by: 'تمت دعوتك من طرف :' - max_uses: "%{count} استخدامات" + max_uses: + few: "%{count} استخدامات" + many: "%{count} استخدامات" + one: استخدام واحد + other: "%{count} استخدامات" + two: استخدامات + zero: استخدامات max_uses_prompt: بلا حدود prompt: توليد و مشاركة روابط للسماح للآخَرين بالنفاذ إلى مثيل الخادوم هذا table: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index f787e98f8..795fac5ad 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -22,8 +22,10 @@ ast: learn_more: Deprendi más source_code: Códigu fonte status_count_after: estaos + status_count_before: Que crearon terms: Términos del serviciu user_count_after: usuarios + user_count_before: Ye'l llar de what_is_mastodon: "¿Qué ye Mastodon?" accounts: followers: @@ -35,6 +37,7 @@ ast: nothing_here: "¡Equí nun hai nada!" people_followed_by: Persones a les que sigue %{name} people_who_follow: Persones que siguen a %{name} + posts: Toots reserved_username: El nome d'usuariu ta acutáu roles: bot: Robó @@ -95,6 +98,8 @@ ast: available: Disponible expired: Caducó title: Invitaciones + relays: + save_and_enable: Guardar y activar reports: are_you_sure: "¿De xuru?" status: Estáu @@ -122,11 +127,14 @@ ast: invalid_url: La URL apurrida nun ye válida warning: Ten curiáu con estos datos, ¡enxamás nun los compartas con naide! auth: - agreement_html: Aniciando sesión aceutes siguir <a href="%{rules_path}">les regles de la instancia</a> y <a href="%{terms_path}">los nuesos términos del serviciu</a>. + agreement_html: Faciendo clic en «Aniciar sesión» aceutes siguir <a href="%{rules_path}"> les regles de la instancia</a> y <a href="%{terms_path}">los nuesos términos del serviciu</a>. change_password: Contraseña + delete_account: Desaniciu de la cuenta delete_account_html: Si deseyes desaniciar la to cuenta, pues <a href="%{path}">siguir equí</a>. Va pidísete la confirmación. forgot_password: "¿Escaeciesti la contraseña?" login: Aniciar sesión + migrate_account: Mudase a otra cuenta + migrate_account_html: Si deseyes redirixir esta cuenta a otra, pues <a href="%{path}"> configuralo equí</a>. providers: cas: CAS saml: SAML @@ -163,12 +171,30 @@ ast: csv: CSV filters: contexts: + notifications: Avisos public: Llinies temporales públiques thread: Conversaciones + index: + title: Peñeres + new: + title: Amestar una peñera nueva followers: domain: Dominiu followers_count: Númberu de siguidores + purge: Desaniciar de los siguidores + generic: + changes_saved_msg: "¡Los cambeos guardáronse con ésitu!" + save_changes: Guardar cambeos + imports: + preface: Pues importar los datos qu'esportares dende otra instancia, como por exemplu la llista de persones que bloquiares o tubieres siguiendo. + types: + blocking: Llista de xente bloquiao + following: Llista de siguidores + muting: Llista de xente silenciao + upload: Xubir invites: + delete: Desactivar + expired: Caducó expires_in: '1800': 30 minutos '21600': 6 hores @@ -182,6 +208,7 @@ ast: one: 1 usu other: "%{count} usos" table: + expires_at: Data de caducidá uses: Usos lists: errors: @@ -192,6 +219,7 @@ ast: too_many: Nun puen axuntase más de 4 ficheros migrations: acct: nome_usuariu@dominiu de la cuenta nueva + proceed: Guardar notification_mailer: digest: body: Equí hai un resume de los mensaxes que nun viesti dende la última visita'l %{since} @@ -208,6 +236,10 @@ ast: body: "%{name} mentóte en:" subject: "%{name} mentóte" title: Mención nueva + reblog: + body: "%{name} compartió'l to estáu:" + subject: "%{name} compartió'l to estáu" + title: Compartición nueva de toot number: human: decimal_units: @@ -216,6 +248,7 @@ ast: next: Siguiente preferences: languages: Llingües + publishing: Espublización web: Web remote_follow: acct: Introduz el nome_usuariu@dominiu dende'l que lo quies facer @@ -267,6 +300,9 @@ ast: authorized_apps: Aplicaciones autorizaes back: Volver a Mastodon edit_profile: Edición del perfil + export: Esportación de datos + followers: Siguidores autorizaos + import: Importación notifications: Avisos preferences: Preferencies settings: Axustes @@ -279,13 +315,19 @@ ast: video: one: "%{count} videu" other: "%{count} vídeos" + boosted_from_html: Compartióse'l toot dende %{acct_link} + language_detection: Deteutala automáticamente pin_errors: limit: Yá fixesti'l númberu máxiumu de toots + ownership: Nun pue fixase'l toot d'otra persona + private: Nun puen fixase los toots que nun seyan públicos + reblog: Nun pue fixase un toot compartíu show_more: Amosar más title: "%{name}: «%{quote}»" visibilities: private: Namái siguidores stream_entries: + reblogged: compartióse sensitive_content: Conteníu sensible themes: default: Mastodon diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 91c6dfb61..4de5b1e22 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -75,7 +75,7 @@ bg: too_many: Не мога да прикача повече от 4 файла notification_mailer: digest: - body: 'Ето кратко резюме на нещата, които се случиха от последното ти посещение на %{since}:' + body: Ето кратко резюме на нещата, които се случиха от последното ти посещение на %{since} mention: "%{name} те спомена в:" new_followers_summary: one: Имаш един нов последовател! Ура! diff --git a/config/locales/ca.yml b/config/locales/ca.yml index b65257f24..54ca4a4bf 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -123,10 +123,6 @@ ca: most_recent_ip: IP més recent no_limits_imposed: Sense límits imposats not_subscribed: No subscrit - order: - alphabetic: Alfabètic - most_recent: Més recent - title: Ordre outbox_url: URL de la bústia de sortida perform_full_suspension: Suspèn profile_url: URL del perfil diff --git a/config/locales/co.yml b/config/locales/co.yml index 9306c6c33..b4458f602 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -123,10 +123,6 @@ co: most_recent_ip: IP più ricente no_limits_imposed: Nisuna limita imposta not_subscribed: Micca abbunatu - order: - alphabetic: Alfabeticu - most_recent: Più ricente - title: Urdine outbox_url: URL di l’outbox perform_full_suspension: Suspende profile_url: URL di u prufile @@ -256,7 +252,7 @@ co: create: Creà un blucchime hint: U blucchime di duminiu ùn impedirà micca a creazione di conti indè a database, mà metudi di muderazione specifiche saranu applicati. severity: - desc_html: Cù<strong>Silenzà</strong>, solu l’abbunati di u contu viderenu i so missaghji. <strong>Suspende</strong> sguassarà tutti i cuntenuti è dati di u contu. Utilizate <strong>Nisuna</strong> s’è voi vulete solu righjittà fugliali media. + desc_html: Cù <strong>Silenzà</strong>, solu l’abbunati di u contu viderenu i so missaghji. <strong>Suspende</strong> sguassarà tutti i cuntenuti è dati di u contu. Utilizate <strong>Nisuna</strong> s’è voi vulete solu righjittà fugliali media. noop: Nisuna silence: Silenzà suspend: Suspende diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 05f65653b..74e1b0e45 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -30,17 +30,26 @@ cs: other_instances: Seznam instancí privacy_policy: Zásady soukromí source_code: Zdrojový kód - status_count_after: příspěvků + status_count_after: + few: příspěvků + one: příspěvek + other: příspěvků status_count_before: Kteří napsali terms: Podmínky používání - user_count_after: uživatelů + user_count_after: + few: uživatelů + one: uživatele + other: uživatelů user_count_before: Domov what_is_mastodon: Co je Mastodon? accounts: choices_html: 'Volby uživatele %{name}:' follow: Sledovat - followers: Sledovatelé - following: Sledovaní + followers: + few: Sledovatelé + one: Sledovatel + other: Sledovatelé + following: Sledovaných joined: Připojil/a se v %{date} link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date} media: Média @@ -51,7 +60,10 @@ cs: people_who_follow: Lidé, kteří sledují uživatele %{name} pin_errors: following: Musíte již sledovat osobu, kterou chcete podpořit - posts: Tooty + posts: + few: Tooty + one: Toot + other: Tooty posts_tab_heading: Tooty posts_with_replies: Tooty a odpovědi reserved_username: Toto uživatelské jméno je rezervováno @@ -115,10 +127,6 @@ cs: most_recent_ip: Nejnovější IP no_limits_imposed: Nejsou nastavena žádná omezení not_subscribed: Neodebírá - order: - alphabetic: Abecedně - most_recent: Nejnovější - title: Pořadí outbox_url: URL odchozích zpráv perform_full_suspension: Suspendovat profile_url: URL profilu @@ -263,7 +271,10 @@ cs: suspend: Suspendovat severity: Přísnost show: - affected_accounts: "%{count} účtů v databázi byl ovlivněn" + affected_accounts: + few: "%{count} účtů v databázi bylo ovlivněno" + one: Jeden účet v databázi byl ovlivněn + other: "%{count} účtů v databázi bylo ovlivněno" retroactive: silence: Odtišit všechny existující účty z této domény suspend: Zrušit suspenzaci všech existujících účtů z této domény @@ -482,7 +493,7 @@ cs: already_following: Tento účet již sledujete error: Při hledání vzdáleného účtu bohužel nastala chyba follow: Sledovat - follow_request: 'Poslal/a jste žádost o sledování uživateli:' + follow_request: 'Poslal/a jste požadavek o sledování uživateli:' following: 'Podařilo se! Nyní sledujete uživatele:' post_follow: close: Nebo můžete toto okno klidně zavřít. @@ -506,7 +517,7 @@ cs: deletes: bad_password_msg: Dobrý pokus, hackeři! Nesprávné heslo confirm_password: Zadejte svoje současné heslo pro ověření vaší identity - description_html: Tímto <strong>trvale a nenávratně</strong> odstraníte obsah z vašeho účtu a deaktivuje ho. Vaše uživatelské jméno zůstane rezervované pro zabránění budoucím napodobováním. + description_html: Tímto <strong>trvale a nenávratně</strong> odstraníte obsah z vašeho účtu a deaktivujete ho. Vaše uživatelské jméno zůstane rezervované pro zabránění budoucím napodobováním. proceed: Odstranit účet success_msg: Váš účet byl úspěšně odstraněn warning_html: Pouze vymazání obsahu z této konkrétní instance je zaručeno. Obsah, který byl široce sdílen, po sobě pravděpodobně zanechá stopy. U offline serverů a serverů, které vaše aktualizace již neodebírají, nebudou databáze aktualizovány. @@ -535,7 +546,7 @@ cs: csv: CSV follows: Sledujete mutes: Ignorujete - storage: Úložisko médií + storage: Paměť médií filters: contexts: home: Domovská časová osa @@ -558,7 +569,10 @@ cs: followers_count: Počet sledovatelů lock_link: Zamkněte svůj účet purge: Odstranit ze sledovatelů - success: V průběhu utišování sledovatelů z %{count} domén... + success: + few: V průběhu blokování sledovatelů z %{count} domény... + one: V průběhu blokování sledovatelů z jedné domény... + other: V průběhu blokování sledovatelů z %{count} domény... true_privacy_html: Berte prosím na vědomí, že <strong>skutečného soukromí se dá dosáhnout pouze za pomoci end-to-end šifrování</strong>. unlocked_warning_html: Kdokoliv vás může sledovat a okamžitě vidět vaše soukromé příspěvky. %{lock_link}, abyste mohl/a zkontrolovat a odmítnout sledovatele. unlocked_warning_title: Váš účet není zamknutý @@ -570,7 +584,10 @@ cs: changes_saved_msg: Změny byly úspěšně uloženy! copy: Kopírovat save_changes: Uložit změny - validation_errors: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže + validation_errors: + few: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže + one: Něco ještě není úplně v pořádku! Prosím zkontrolujte chybu níže + other: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže imports: preface: Můžete importovat data, která jste exportoval/a z jiné instance, jako například seznam lidí, které sledujete či blokujete. success: Vaše data byla úspěšně nahrána a nyní budou zpracována v daný čas @@ -593,7 +610,10 @@ cs: expires_in_prompt: Nikdy generate: Vygenerovat invited_by: 'Byl/a jste pozván/a uživatelem:' - max_uses: "%{count} použití" + max_uses: + few: "%{count} použití" + one: 1 použití + other: "%{count} použití" max_uses_prompt: Bez limitu prompt: Vygenerujte a sdílejte s ostatními odkazy a umožněte jim přístup na tuto instanci table: @@ -619,8 +639,14 @@ cs: action: Zobrazit všechna oznámení body: Zde najdete stručný souhrn zpráv, které jste zmeškal/a od vaší poslední návštěvy %{since} mention: "%{name} vás zmínil/a v:" - new_followers_summary: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! - subject: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418" + new_followers_summary: + few: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! + one: Navíc jste získal/a jednoho nového sledovatele, zatímco jste byl/a pryč! Hurá! + other: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! + subject: + few: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418" + one: "1 nové oznámení od vaší poslední návštěvy \U0001F418" + other: "%{count} nových oznámení od vaší poslední návštěvy \U0001F418" title: Ve vaší nepřítomnosti... favourite: body: 'Váš příspěvek si oblíbil/a %{name}:' @@ -631,10 +657,10 @@ cs: subject: "%{name} vás nyní sleduje" title: Nový sledovatel follow_request: - action: Spravovat žádosti o sledování - body: "%{name} žádá o povolení vás následovat" + action: Spravovat požadavky o sledování + body: "%{name} požádal/a o povolení vás sledovat" subject: 'Čekající sledovatel: %{name}' - title: Nová žádost o sledování + title: Nový požadavek o sledování mention: action: Odpovědět body: 'Byl/a jste zmíněn/a uživatelem %{name} v:' @@ -656,7 +682,7 @@ cs: trillion: bil pagination: newer: Novější - next: Starší + next: Další older: Starší prev: Před truncate: "…" @@ -737,11 +763,20 @@ cs: statuses: attached: description: 'Přiloženo: %{attached}' - image: "%{count} obrázků" - video: "%{count} videí" + image: + few: "%{count} obrázků" + one: "%{count} obrázek" + other: "%{count} obrázků" + video: + few: "%{count} videí" + one: "%{count} video" + other: "%{count} videí" boosted_from_html: Boostnuto z %{acct_link} content_warning: 'Varování o obsahu: %{warning}' - disallowed_hashtags: 'obsahuje nepovolené hashtagy: %{tags}' + disallowed_hashtags: + few: 'obsahoval nepovolené hashtagy: %{tags}' + one: 'obsahoval nepovolený hashtag: %{tags}' + other: 'obsahoval nepovolené hashtagy: %{tags}' language_detection: Zjistit jazyk automaticky open_in_web: Otevřít na webu over_character_limit: limit %{max} znaků byl překročen @@ -865,7 +900,7 @@ cs: generate_recovery_codes: Vygenerovat záložní kódy instructions_html: "<strong>Naskenujte tento QR kód Google Authenticatorem nebo jinou TOTP aplikací na vašem telefonu</strong>. Od teď bude tato aplikace generovat tokeny, které budete muset zadat při přihlášení." lost_recovery_codes: Záložní kódy vám dovolí dostat se k vašemu účtu, pokud ztratíte telefon. Ztratíte-li záložní kódy, můžete je zde znovu vygenerovat. Vaše staré záložní kódy budou zneplatněny. - manual_instructions: 'Nemůžete-li oskenovat QR kód a je potřebovat ho zadat ručně, zde je tajemství v prostém textu:' + manual_instructions: 'Nemůžete-li oskenovat QR kód a je potřeba ho zadat ručně, zde je tajemství v prostém textu:' recovery_codes: Záložní kódy pro obnovu recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerované recovery_instructions_html: Ztratíte-li někdy přístup k vašemu telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. <strong>Uchovávejte tyto kódy v bezpečí</strong>. Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty. diff --git a/config/locales/cy.yml b/config/locales/cy.yml index a4df28b61..24ae6fa10 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -115,10 +115,6 @@ cy: most_recent_ip: IP diweddaraf no_limits_imposed: Dim terfynau wedi'i gosod not_subscribed: Heb danysgrifio - order: - alphabetic: Allfabetig - most_recent: Diweddaraf - title: Trefnu outbox_url: Allflwch URL perform_full_suspension: Atal profile_url: URL proffil @@ -762,7 +758,7 @@ cy: unlisted_long: Gall pawb weld, ond heb ei restru ar ffrydiau cyhoeddus stream_entries: pinned: Tŵt wedi'i binio - reblogged: bŵstiwyd + reblogged: hybwyd sensitive_content: Cynnwys sensitif terms: body_html: | diff --git a/config/locales/da.yml b/config/locales/da.yml index d9ce9d55d..c6bdc753a 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -122,10 +122,6 @@ da: most_recent_activity: Seneste aktivitet most_recent_ip: Senest IP not_subscribed: Ikke abonneret - order: - alphabetic: Alfabetisk - most_recent: Seneste - title: Rækkefølge outbox_url: Link til udgående perform_full_suspension: Udeluk profile_url: Link til profil @@ -304,8 +300,13 @@ da: title: Invitationer relays: add_new: Tilføj nyt relay + delete: Slet description_html: Et <strong>federation relay</strong> er en mellemleds server der udveksler store mængder af offentlige trut mellem servere der abonnerer på og offentliggør til det. <strong>Det kan hjælpe små og mellemstore servere opdage indhold fra fediverset</strong>, hvilket der ellers ville kræve at lokale brugere manuelt følger andre folk på fjerne servere. + disable: Deaktiver + disabled: Deaktiveret + enable: Aktiver enable_hint: Når dette er aktiveret, vil serveren abonnere på alle offentlige trut fra dette relay, og vil begynde at sende offentlige trut fra denne server dertil. + enabled: Aktiveret inbox_url: Link til relay pending: Venter på godkendelse fra relæet save_and_enable: Gem og aktiver @@ -569,6 +570,7 @@ da: resources: Ressourcer generic: changes_saved_msg: Ændringerne blev gemt! + copy: Kopier save_changes: Gem ændringer validation_errors: one: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende fejl forneden diff --git a/config/locales/de.yml b/config/locales/de.yml index d3b571f66..03358f5a0 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -16,12 +16,12 @@ de: <h3>Ein guter Platz für Regeln</h3> <p>Die erweiterte Beschreibung wurde noch nicht aufgesetzt.</p> features: - humane_approach_body: Mastodon hat von den Fehlern anderer Netzwerke gelernt und wurde mit dem Augenmerk darauf entwickelt, den Missbrauch sozialer Medien zu bekämpfen. + humane_approach_body: Aus den Fehlern anderer Netzwerke lernend, zielt Mastodon darauf ab, mit ethischen Design-Entscheidungen den Missbrauch sozialer Medien zu verhindern. humane_approach_title: Ein menschlicherer Ansatz not_a_product_body: Mastodon ist kein kommerzielles Netzwerk. Keine Werbung, kein Abgraben deiner Daten, keine geschlossene Plattform. Es gibt keine Zentrale. not_a_product_title: Du bist ein Mensch und keine Ware - real_conversation_body: Mit 500 Zeichen pro Beitrag und der Ermöglichung präziser Inhalts- und Bilderwarnungen kannst du dich so ausdrücken, wie du es möchtest. - real_conversation_title: Für das echte Gespräch gemacht + real_conversation_body: Mit 500 Zeichen pro Beitrag und Features wie Inhalts- und Bilderwarnungen kannst du dich so ausdrücken, wie du es möchtest. + real_conversation_title: Geschaffen für echte Gespräche within_reach_body: Verschiedene Apps für iOS, Android und andere Plattformen erlauben dir, dank unseres blühenden API-Ökosystems, dich von überall auf dem Laufenden zu halten. within_reach_title: Immer für dich da generic_description: "%{domain} ist ein Server im Netzwerk" @@ -123,10 +123,6 @@ de: most_recent_ip: Letzte IP-Adresse no_limits_imposed: Keine Limits eingesetzt not_subscribed: Nicht abonniert - order: - alphabetic: Alphabetisch - most_recent: Neueste - title: Sortierung outbox_url: Postausgangs-URL perform_full_suspension: Sperren profile_url: Profil-URL diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml index 4d80176c6..e004bc963 100644 --- a/config/locales/devise.ar.yml +++ b/config/locales/devise.ar.yml @@ -77,4 +77,10 @@ ar: expired: إنتهت مدة صلاحيته، الرجاء طلب واحد جديد not_found: لا يوجد not_locked: ليس مقفلاً - not_saved: "%{count} أخطاء منعت %{resource} مِن القيام بالإحتفاظ :" + not_saved: + few: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + many: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + one: 'خطأ واحد منع هذا %{resource} من الحفظ:' + other: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" + two: 'أخطاء منعت هذا %{resource} من الحفظ:' + zero: 'أخطاء منعت هذا %{resource} من الحفظ:' diff --git a/config/locales/devise.ast.yml b/config/locales/devise.ast.yml index 6e32cbc2f..49b0c8daf 100644 --- a/config/locales/devise.ast.yml +++ b/config/locales/devise.ast.yml @@ -1,2 +1,30 @@ --- -ast: {} +ast: + devise: + failure: + already_authenticated: Yá aniciesti sesión. + inactive: Entá nun s'activó la cuenta. + last_attempt: Tienes un intentu más enantes de bloquiar la cuenta. + locked: La cuenta ta bloquiada. + timeout: La sesión caducó. Volvi aniciar sesión pa siguir, por favor. + unauthenticated: Precises aniciar sesión o rexistrate enantes de siguir. + mailer: + confirmation_instructions: + explanation: Creesti una cuenta en %{host} con esta direición de corréu. Tas a un clic d'activala. Si nun fuisti tu, inora esti corréu. + email_changed: + title: Direición de corréu nueva + reset_password_instructions: + explanation: Solicitesti una contraseña nueva pa la cuenta. + extra: Si nun solicitesti esto, inora esti corréu. La contraseña nun va camudar hasta que nun accedas al enllaz d'enriba y crees una nueva. + registrations: + signed_up: "¡Afáyate! Rexistréstite con ésitu." + signed_up_but_unconfirmed: Unvióse un mensaxe de confirmación a la direición de corréu. Sigui l'enllaz p'activar la cuenta. Comprueba la carpeta Puxarra si nun recibiesti esti corréu, por favor. + updated: La cuenta anovóse con ésitu. + unlocks: + send_instructions: Nunos minutos vas recibir un corréu coles instrucciones pa cómo desbloquiar la cuenta. Comprueba la carpeta Puxarra si nun lu recibiesti. + send_paranoid_instructions: Si esiste la cuenta, nun momentu vas recibir un corréu coles instrucciones pa cómo desbloquiala. Comprueba la carpeta Puxarra si nun recibiesti esti corréu. + unlocked: La cuenta desbloquióse con ésitu. Anicia sesión pa siguir, por favor. + errors: + messages: + already_confirmed: yá se confirmó, volvi aniciar sesión + not_found: nun s'alcontró diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index 4268dc0ad..de23b5847 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -46,7 +46,7 @@ cs: unlock_instructions: subject: 'Mastodon: Instrukce pro odemčení účtu' omniauth_callbacks: - failure: Nelze vás ověřit z %{kind}, protože "%{reason}". + failure: Nelze vás ověřit z %{kind}, protože „%{reason}“. success: Úspěšně ověřeno z účtu %{kind}. passwords: no_token: Tuto stránku nemůžete navštívit, pokud nepřicházíte z e-mailu pro obnovu hesla. Pokud jste z něj přišel/la, ujistěte se, že jste použil/a celé URL z e-mailu. @@ -77,4 +77,7 @@ cs: expired: vypršel, prosím vyžádejte si nový not_found: nenalezen not_locked: nebyl uzamčen - not_saved: "%{count} chyb zabránila uložení tohoto %{resource}:" + not_saved: + few: "%{count} chyb zabránilo uložení tohoto %{resource}:" + one: '1 chyba zabránila uložení tohoto %{resource}:' + other: "%{count} chyb zabránilo uložení tohoto %{resource}:" diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 637b1e731..1d597d53d 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -8,11 +8,11 @@ nl: failure: already_authenticated: Je bent al ingelogd. inactive: Jouw account is nog niet geactiveerd. - invalid: Ongeldig %{authentication_keys}. + invalid: "%{authentication_keys} of wachtwoord ongeldig." invalid_token: Ongeldige bevestigingscode. last_attempt: Je hebt nog één poging over voordat jouw account wordt opgeschort. locked: Jouw account is opgeschort. - not_found_in_database: Ongeldig %{authentication_keys}. + not_found_in_database: "%{authentication_keys} of wachtwoord ongeldig." timeout: Jouw sessie is verlopen, log opnieuw in. unauthenticated: Je dient in te loggen of te registreren. unconfirmed: Je dient eerst jouw account te bevestigen. diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index 6dec562e1..abbe45942 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -77,4 +77,6 @@ zh-TW: expired: 已經過期,請重新申請 not_found: 找不到 not_locked: 並未被鎖定 - not_saved: "%{count} 個錯誤使 %{resource} 無法被儲存︰" + not_saved: + one: 有 1 個錯誤讓此 %{resource} 無法儲存: + other: 有 %{count} 個錯誤讓此 %{resource} 無法儲存: diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml index 6e32cbc2f..ce88af797 100644 --- a/config/locales/doorkeeper.ast.yml +++ b/config/locales/doorkeeper.ast.yml @@ -1,2 +1,72 @@ --- -ast: {} +ast: + activerecord: + attributes: + doorkeeper/application: + name: Nome de l'aplicación + website: Sitiu web de l'aplicación + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + invalid_uri: ha ser una URI válida. + relative_uri: ha ser una URI absoluta. + doorkeeper: + applications: + buttons: + cancel: Encaboxar + destroy: Destruyir + edit: Editar + submit: Unviar + index: + name: Nome + show: + actions: Aiciones + title: 'Aplicación: %{name}' + authorizations: + error: + title: Asocedió un fallu + new: + able_to: Va ser a + prompt: L'aplicación %{client_name} solicitó l'accesu a la to cuenta + show: + title: Copia esti códigu d'autorización y apégalu na aplicación. + authorized_applications: + buttons: + revoke: Revocar + index: + date_format: "%H:%M:%S %d-%m-%Y" + title: Les aplicaciones qu'autoricesti + errors: + messages: + invalid_token: + expired: Caducó'l pase d'accesu + revoked: Revocóse'l pase d'accesu + unknown: El pase d'accesu nun ye válidu + unauthorized_client: El veceru nun ta autorizáu pa facer esta solicitú usando esti métodu. + unsupported_response_type: El sirvidor d'autorización nun sofita esta triba de rempuesta. + layouts: + admin: + nav: + applications: Aplicaciones + oauth2_provider: Fornidor d'OAuth2 + scopes: + read:accounts: ver información de cuentes + read:blocks: ver quién bloquies + read:filters: ver les tos peñeres + read:follows: ver quién sigues + read:lists: ver les tos llistes + read:mutes: ver quién silencies + read:notifications: ver los tos avisos + read:statuses: ver tolos estaos + write: modificar los datos de la to cuenta + write:accounts: modificar el to perfil + write:blocks: bloquiar cuentes y dominios + write:filters: crear peñeres + write:follows: siguir a xente + write:lists: crear llistes + write:media: xubir ficheros de medios + write:mutes: silenciar xente y conversaciones + write:notifications: llimpiar los tos avisos + write:statuses: espublizar estaos diff --git a/config/locales/el.yml b/config/locales/el.yml index 8f718a849..3ed577230 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -123,10 +123,6 @@ el: most_recent_ip: Πιο πρόσφατη IP no_limits_imposed: Χωρίς όρια not_subscribed: Άνευ συνδρομής - order: - alphabetic: Αλφαβητικά - most_recent: Πιο πρόσφατα - title: Ταξινόμηση outbox_url: URL εξερχομένων perform_full_suspension: Κάνε πλήρη αναστολή profile_url: URL προφίλ @@ -928,5 +924,5 @@ el: seamless_external_login: Επειδή έχεις συνδεθεί μέσω τρίτης υπηρεσίας, οι ρυθμίσεις συνθηματικού και email δεν είναι διαθέσιμες. signed_in_as: 'Έχεις συνδεθεί ως:' verification: - explanation_html: 'Μπορείς να <strong>πιστοποιήσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου</strong>. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής <strong>πρέπει</strong> περιέχει την ιδιότητα (attribute) <code>rel="me"</code>. Το κείμενο κειμένου δεν έχει σημασία. Για παράδειγμα:' + explanation_html: 'Μπορείς να <strong>πιστοποιήσεις τον εαυτό σου ως ιδιοκτήτη των συνδέσμων που εμφανίζεις στα μεταδεδομένα του προφίλ σου</strong>. Για να συμβεί αυτό, ο συνδεδεμένος ιστότοπος πρέπει να περιέχει ένα σύνδεσμο που να επιστρέφει προς το προφίλ σου στο Mastodon. Ο σύνδεσμος επιστροφής <strong>πρέπει</strong> περιέχει την ιδιότητα (attribute) <code>rel="me"</code>. Το περιεχόμενο του κειμένου δεν έχει σημασία. Για παράδειγμα:' verification: Πιστοποίηση diff --git a/config/locales/en.yml b/config/locales/en.yml index 2c679061e..58cf2a101 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -123,10 +123,6 @@ en: most_recent_ip: Most recent IP no_limits_imposed: No limits imposed not_subscribed: Not subscribed - order: - alphabetic: Alphabetic - most_recent: Most recent - title: Order outbox_url: Outbox URL perform_full_suspension: Suspend profile_url: Profile URL diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 72628a944..eddefab05 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -112,10 +112,6 @@ eo: most_recent_activity: Lasta ago most_recent_ip: Lasta IP not_subscribed: Ne abonita - order: - alphabetic: Laŭalfabete - most_recent: Plej lastatempa - title: Ordo outbox_url: Elira URL perform_full_suspension: Tute haltigi profile_url: Profila URL diff --git a/config/locales/es.yml b/config/locales/es.yml index b11ff8761..9d6dc64c3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -123,10 +123,6 @@ es: most_recent_ip: IP más reciente no_limits_imposed: Sin límites impuestos not_subscribed: No se está suscrito - order: - alphabetic: Alfabético - most_recent: Más reciente - title: Orden outbox_url: URL de bandeja de salida perform_full_suspension: Suspender profile_url: URL del perfil diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 206b439b0..122b074eb 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -123,10 +123,6 @@ eu: most_recent_ip: Azken IP-a no_limits_imposed: Ez da mugarik ezarri not_subscribed: Harpidetu gabe - order: - alphabetic: Alfabetikoa - most_recent: Azkena - title: Ordena outbox_url: Irteera ontziaren URL-a perform_full_suspension: Kanporatu profile_url: Profilaren URL-a diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 4209a2c00..7802ca98d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -123,10 +123,6 @@ fa: most_recent_ip: آخرین IP ها no_limits_imposed: بدون محدودیت not_subscribed: عضو نیست - order: - alphabetic: الفبایی - most_recent: تازهترینها - title: ترتیب outbox_url: نشانی صندوق خروجی perform_full_suspension: تعلیق profile_url: نشانی نمایه @@ -848,5 +844,5 @@ fa: seamless_external_login: شما با یک سرویس خارج از مجموعه وارد شدهاید، به همین دلیل تنظیمات ایمیل و رمز برای شما در دسترس نیست. signed_in_as: 'واردشده به نام:' verification: - explanation_html: 'شما میتوانید <strong>خود را به عنوان مالک صفحهای که در نمایهتان به آن پیوند دادهاید تأیید کنید.</strong> برای این کار، صفحهای که به آن پیوند دادهاید، خودش باید پیوندی به نمایهٔ ماستدون شما داشته باشد. پیوند در آن صفحه <strong>باید</strong> عبارت <code>rel="me"</code> را به عنوان attribute در خود داشته باشد. محتوای متن پیوند اهمتی ندارد. یک نمونه از چنین پیوندی:' + explanation_html: 'شما میتوانید <strong>خود را به عنوان مالک صفحهای که در نمایهتان به آن پیوند دادهاید تأیید کنید.</strong> برای این کار، صفحهای که به آن پیوند دادهاید، خودش باید پیوندی به نمایهٔ ماستدون شما داشته باشد. پیوند در آن صفحه <strong>باید</strong> عبارت <code>rel="me"</code> را به عنوان attribute در خود داشته باشد. محتوای متن پیوند اهمتی ندارد. یک نمونه از چنین پیوندی:' verification: تأیید diff --git a/config/locales/fi.yml b/config/locales/fi.yml index c90490212..77fca8dec 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -102,10 +102,6 @@ fi: most_recent_activity: Viimeisin toiminta most_recent_ip: Viimeisin IP not_subscribed: Ei tilaaja - order: - alphabetic: Aakkosjärjestys - most_recent: Uusin - title: Järjestys outbox_url: Lähtevän postilaatikon osoite perform_full_suspension: Siirrä kokonaan jäähylle profile_url: Profiilin osoite diff --git a/config/locales/fr.yml b/config/locales/fr.yml index e3128b569..51b4fb1f8 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -123,10 +123,6 @@ fr: most_recent_ip: Adresse IP la plus récente no_limits_imposed: Aucune limite imposée not_subscribed: Non abonné - order: - alphabetic: Alphabétique - most_recent: Plus récent - title: Tri outbox_url: URL de sortie perform_full_suspension: Suspendre profile_url: URL du profil diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 9c5144d97..86c07ad89 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -123,10 +123,6 @@ gl: most_recent_ip: IP máis recente no_limits_imposed: Sen límites impostos not_subscribed: Non suscrita - order: - alphabetic: Alfabética - most_recent: Máis recente - title: Orde outbox_url: URL caixa de saída perform_full_suspension: Suspender profile_url: URL do perfil diff --git a/config/locales/he.yml b/config/locales/he.yml index 79b1ed822..8f651052a 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -95,10 +95,6 @@ he: most_recent_activity: פעילות עדכנית most_recent_ip: כתובות אחרונות not_subscribed: לא רשום - order: - alphabetic: אלפביתי - most_recent: עדכני - title: סידור outbox_url: כתובת תיבת דואר יוצא perform_full_suspension: ביצוע השעייה מלאה profile_url: כתובת פרופיל @@ -297,7 +293,7 @@ he: too_many: לא ניתן להוסיף יותר מארבעה קבצים notification_mailer: digest: - body: 'להלן סיכום זריז של הדברים שקרו על מאז ביקורך האחרון ב-%{since}:' + body: להלן סיכום זריז של הדברים שקרו על מאז ביקורך האחרון ב-%{since} mention: "%{name} פנה אליך ב:" new_followers_summary: one: נוסף לך עוקב! סחתיין! diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 729206a98..38971833c 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -72,7 +72,7 @@ hr: upload: Upload notification_mailer: digest: - body: 'Ovo je kratak sažetak propuštenog od tvog prošlog posjeta %{since}:' + body: Ovo je kratak sažetak propuštenog od tvog prošlog posjeta %{since} mention: "%{name} te je spomenuo:" new_followers_summary: Imaš %{count} novih sljedbenika! Prekrašno! subject: "%{count} novih notifikacija od tvog prošlog posjeta \U0001F418" diff --git a/config/locales/hu.yml b/config/locales/hu.yml index faa52fabc..cf2c5f1e4 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -92,10 +92,6 @@ hu: most_recent_activity: Legutóbbi tevékenységek most_recent_ip: Legutóbbi IP-cím not_subscribed: Nincs feliratkozás - order: - alphabetic: Alfabetikus - most_recent: Legutóbbi - title: Rendezés outbox_url: Kimenő üzenetek URL perform_full_suspension: Teljes felfüggesztés profile_url: Profil URL diff --git a/config/locales/id.yml b/config/locales/id.yml index 38b08a257..e18207e24 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -50,10 +50,6 @@ id: most_recent_activity: Aktivitas terbaru most_recent_ip: IP terbaru not_subscribed: Tidak berlangganan - order: - alphabetic: Alfabetik - most_recent: Terbaru - title: Urutan perform_full_suspension: Lakukan suspen penuh profile_url: URL profil public: Publik @@ -221,7 +217,7 @@ id: too_many: Tidak dapat melampirkan lebih dari 4 file notification_mailer: digest: - body: 'Ini adalah ringkasan singkat yang anda lewatkan pada sejak kunjungan terakhir anda pada %{since}:' + body: Ini adalah ringkasan singkat yang anda lewatkan pada sejak kunjungan terakhir anda pada %{since} mention: "%{name} menyebut anda di:" new_followers_summary: one: Anda mendapatkan satu pengikut baru! Hore! diff --git a/config/locales/io.yml b/config/locales/io.yml index 0c1e6520b..f52f2bc80 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -44,10 +44,6 @@ io: most_recent_activity: Most recent activity most_recent_ip: Most recent IP not_subscribed: Not subscribed - order: - alphabetic: Alphabetic - most_recent: Most recent - title: Order perform_full_suspension: Perform full suspension profile_url: Profile URL public: Public @@ -201,7 +197,7 @@ io: too_many: Cannot attach more than 4 files notification_mailer: digest: - body: 'Yen mikra rezumo di to, depos ke tu laste vizitis en %{since}:' + body: Yen mikra rezumo di to, depos ke tu laste vizitis en %{since} mention: "%{name} mencionis tu en:" new_followers_summary: one: Tu obtenis nova sequanto! Yey! diff --git a/config/locales/it.yml b/config/locales/it.yml index 4fffded5f..dc62b1bea 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -123,10 +123,6 @@ it: most_recent_ip: IP più recenti no_limits_imposed: Nessun limite imposto not_subscribed: Non sottoscritto - order: - alphabetic: Alfabetico - most_recent: Più recente - title: Ordine outbox_url: URL outbox perform_full_suspension: Sospendi profile_url: URL profilo diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 9121094b7..dc2e015b5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -123,12 +123,8 @@ ja: most_recent_ip: 直近のIP no_limits_imposed: 制限なし not_subscribed: 購読していない - order: - alphabetic: アルファベット順 - most_recent: 直近の活動順 - title: 順序 outbox_url: Outbox URL - perform_full_suspension: 完全に活動停止させる + perform_full_suspension: 活動を完全に停止させる profile_url: プロフィールURL promote: 昇格 protocol: プロトコル @@ -264,7 +260,7 @@ ja: reject_media: メディアファイルを拒否 reject_media_hint: ローカルに保存されたメディアファイルを削除し、今後のダウンロードを拒否します。停止とは無関係です reject_reports: レポートを拒否 - reject_reports_hint: このドメインからのすべてのレポートを無視します。停止とは無関係です + reject_reports_hint: このドメインからのレポートをすべて無視します。停止とは無関係です severities: noop: なし silence: サイレンス diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 1b74405d2..b0d1087c3 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -112,10 +112,6 @@ ka: most_recent_activity: უახლესი აქტივობა most_recent_ip: უახლესი აი-პი not_subscribed: გამოუწერელი - order: - alphabetic: ანბანური - most_recent: უახლესი - title: წესრიგი outbox_url: აუთბოქსის ურლ perform_full_suspension: მოახდინეთ სრული შეჩერება profile_url: პროფილის ურლ diff --git a/config/locales/ko.yml b/config/locales/ko.yml index e1cb350d1..7c948e8ba 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -123,10 +123,6 @@ ko: most_recent_ip: 최근 IP no_limits_imposed: 제한 없음 not_subscribed: 구독하지 않음 - order: - alphabetic: 알파벳 순 - most_recent: 최근 순 - title: 순서 outbox_url: 발신함 URL perform_full_suspension: 정지시키기 profile_url: 프로필 URL diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 2eff09e1b..c361371fe 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1,6 +1,350 @@ --- ms: about: - about_this: Mengenai + about_hashtag_html: Terdapat toot awam yang ditanda dengan <strong>#%{hashtag}</strong>. Anda boleh berinteraksi dengan mereka jika anda mempunyai akaun di mana-mana dunia persekutuan Mastodon. + about_mastodon_html: Mastodon ialah rangkaian sosial berasaskan protokol web terbuka dan perisian percuma bersumber terbuka. Ianya tak terpusat seperti emel. + about_this: Mengenai Kami administered_by: 'Ditadbir oleh:' - contact: Hubungi + api: API + apps: Aplikasi mudah alih + closed_registrations: Pendaftaran ditutup di tika ini. Tetapi! Anda boleh mencari tika lain untuk mencipta akaun dan capai ke rangkaian yang sama daripada sana. + contact: Hubungi kami + contact_missing: Tidak ditetapkan + contact_unavailable: Tidak tersedia + documentation: Pendokumenan + extended_description_html: | + <h3>Tempat sesuai untuk peraturan</h3> + <p>Kenyataan penuh masih belum ditetapkan.</p> + features: + humane_approach_body: Belajar daripada kegagalan rangkaian lain, Mastodon berazam untuk membuat pilihan reka cipta beretika untuk mengatasi penyalahgunaan media sosial. + humane_approach_title: Pendekatan yang lebih berperikemanusiaan + not_a_product_body: Mastodon bukannya rangkaian komersial. Tiada iklan, tiada perlombongan data, tiada kurungan atau tapisan. Tiada pihak berkuasa pusat. + not_a_product_title: Anda seorang manusia, bukannya sebuah produk + real_conversation_body: Dengan had 500 aksara dan sokongan kandungan berbutir serta pemberi amaran media, anda boleh meluahkan diri anda dengan cara yang anda inginkan. + real_conversation_title: Dibina untuk perbualan sebenar + within_reach_body: Pelbagai aplikasi untuk iOS, Android, dan platform lain telah dibangunkan dengan ekosistem API mesra-pembangun membolehkan anda terus berhubung dengan rakan anda di mana-mana sahaja. + within_reach_title: Sentiasa dalam jangkauan + generic_description: "%{domain} ialah salah sebuah pelayan dalam rangkaian Mastodon" + hosted_on: Mastodon dihoskan di %{domain} + learn_more: Ketahui lebih lanjut + other_instances: Senarai tika + privacy_policy: Polisi privasi + source_code: Kod sumber + status_count_after: + one: status + other: status + status_count_before: Telah menulis + terms: Terma perkhidmatan + user_count_after: + one: pengguna + other: pengguna + user_count_before: Rumah kepada + what_is_mastodon: Apakah itu Mastodon? + accounts: + choices_html: 'Pilihan %{name}:' + follow: Ikut + followers: + one: Pengikut + other: Pengikut + following: Mengikuti + joined: Sertai pada %{date} + link_verified_on: Pemilikan pautan ini diperiksa pada %{date} + media: Media + moved_html: "%{name} telah berpindah ke %{new_profile_link}:" + network_hidden: Maklumat ini tidak tersedia + nothing_here: Tiada apa-apa di sini! + people_followed_by: Orang yang %{name} ikuti + people_who_follow: Orang yang mengikut %{name} + pin_errors: + following: Anda mestilah sudah mengikuti orang yang anda ingin syorkan + posts: + one: Toot + other: Toot + posts_tab_heading: Toot + posts_with_replies: Toot dan maklum balas + reserved_username: Nama pengguna ini terpelihara + roles: + admin: Admin + bot: Bot + moderator: Pengawal + unfollow: Nyahikut + admin: + account_moderation_notes: + create: Tinggalkan nota + created_msg: Nota kawalan telah berjaya dicipta! + delete: Padam + destroyed_msg: Nota kawalan telah berjaya dipadam! + accounts: + are_you_sure: Anda pasti? + avatar: Avatar + by_domain: Domain + change_email: + changed_msg: Emel akaun telah berjaya ditukar! + current_email: Emel Semasa + label: Tukar Emel + new_email: Emel Baru + submit: Tukar Emel + title: Tukar Emel untuk %{username} + confirm: Sahkan + confirmed: Disahkan + confirming: Mengesahkan + demote: Turunkan pangkat + disable: Lumpuhkan + disable_two_factor_authentication: Lumpuhkan 2FA + disabled: Dilumpuhkan + display_name: Nama paparan + domain: Domain + edit: Tukar + email: Emel + email_status: Status Emel + enable: Bolehkan + enabled: Dibolehkan + feed_url: Suapan URL + followers: Pengikut + followers_url: URL Pengikut + follows: Mengikuti + inbox_url: URL mesej masuk + ip: Alamat IP + location: + all: Semua + local: Tempatan + remote: Jarak Jauh + title: Kedudukan + login_status: Status log masuk + media_attachments: Lampiran media + memorialize: Tukarkan menjadi akaun peringatan + moderation: + all: Semua + silenced: Disenyapkan + suspended: Digantungkan + title: Kawalan + moderation_notes: Nota kawalan + most_recent_activity: Aktiviti terbaru + most_recent_ip: IP terbaru + no_limits_imposed: Tiada had dikuatkuasakan + not_subscribed: Tiada langganan + outbox_url: URL mesej keluar + perform_full_suspension: Gantung + profile_url: URL profil + promote: Naikkan pangkat + protocol: Protokol + public: Awam + push_subscription_expires: Langganan PuSH tamat tempoh + redownload: Segarkan semula avatar + remove_avatar: Buang avatar + resend_confirmation: + already_confirmed: Pengguna ini telah disahkan + send: Hantar semula emel pengesahan + success: Emel pengesahan telah berjaya dihantar! + reset: Set semula + reset_password: Set semula kata laluan + resubscribe: Langgan semula + role: Kebenaran + roles: + admin: Pentadbir + moderator: Pengawal + staff: Kakitangan + user: Pengguna + salmon_url: URL Salmon + search: Cari + shared_inbox_url: URL Peti Masuk Berkongsi + show: + created_reports: Laporan yang dicipta oleh akaun ini + report: laporan + targeted_reports: Laporan yang dicipta berkaitan akaun ini + silence: Senyap + silenced: Disenyapkan + statuses: Status + subscribe: Langgan + suspended: Digantung + title: Akaun + unconfirmed_email: Emel Belum Disahkan + undo_silenced: Buang senyap + undo_suspension: Buang penggantungan + unsubscribe: Buang langganan + username: Nama pengguna + web: Web + action_logs: + actions: + assigned_to_self_report: "%{name} memberikan laporan %{target} kepada diri mereka sendiri" + change_email_user: "%{name} menukar alamat emel pengguna %{target}" + confirm_user: "%{name} mengesahkan alamat emel pengguna %{target}" + create_custom_emoji: "%{name} memuat naik emoji baru %{target}" + create_domain_block: "%{name} menyekat domain %{target}" + create_email_domain_block: "%{name} menyenaraihitamkan domain emel %{target}" + demote_user: "%{name} menurunkan pangkat pengguna %{target}" + destroy_custom_emoji: "%{name} membuang emoji %{target}" + destroy_domain_block: "%{name} membuang sekatan domain %{target}" + destroy_email_domain_block: "%{name} menyenaraiputihkan domain emel %{target}" + destroy_status: "%{name} membuang status oleh %{target}" + disable_2fa_user: "%{name} melumpuhkan keperluan dua faktor untuk pengguna %{target}" + disable_custom_emoji: "%{name} melumpuhkan emoji %{target}" + disable_user: "%{name} melumpuhkan log masuk untuk pengguna %{target}" + enable_custom_emoji: "%{name} membolehkan emoji %{target}" + enable_user: "%{name} membolehkan log masuk untuk pengguna %{target}" + memorialize_account: "%{name} menukarkan akaun %{target} menjadi halaman peringatan" + promote_user: "%{name} menaikkan pangkat pengguna %{target}" + remove_avatar_user: "%{name} membuang avatar pengguna %{target}" + reopen_report: "%{name} membuka semula laporan %{target}" + reset_password_user: "%{name} set semula kata laluan pengguna %{target}" + resolve_report: "%{name} menyelesaikan laporan %{target}" + silence_account: "%{name} menyenyapkan akaun %{target}" + suspend_account: "%{name} menggantung akaun %{target}" + unassigned_report: "%{name} menyahtugaskan laporan %{target}" + unsilence_account: "%{name} menyahsenyapkan akaun %{target}" + unsuspend_account: "%{name} menyahgantungkan akaun %{target}" + update_custom_emoji: "%{name} mengemaskini emoji %{target}" + update_status: "%{name} mengemaskini status oleh %{target}" + deleted_status: "(status telah dipadam)" + title: Log audit + custom_emojis: + by_domain: Domain + copied_msg: Telah berjaya mencipta salinan tempatan emoji + copy: Salin + copy_failed_msg: Tidak dapat membuat salinan tempatan emoji tersebut + created_msg: Emoji berjaya dicipta! + delete: Padam + destroyed_msg: Emoji berjaya dipadam! + disable: Lumpuhkan + disabled_msg: Emoji tersebut berjaya dilumpuhkan + emoji: Emoji + enable: Bolehkan + enabled_msg: Emoji tersebut berjaya dibolehkan + image_hint: PNG, maksimum 50KB + listed: Disenaraikan + new: + title: Tambah emoji sendiri baru + overwrite: Tulis ganti + shortcode: Kod pendek + shortcode_hint: Sekurang-kurangnya 2 aksara, hanya aksara angka abjad dan garis bawah + title: Emoji sendiri + unlisted: Tidak disenaraikan + update_failed_msg: Tidak boleh mengemaskini emoji tersebut + updated_msg: Emoji berjaya dikemaskini! + upload: Muat naik + dashboard: + backlog: tugasan tunggakan + config: Tatarajah + feature_deletions: Pemadaman akaun + feature_invites: Pautan undangan + feature_registrations: Pendaftaran + feature_relay: Geganti persekutuan + features: Ciri-ciri + hidden_service: Persekutuan dengan perkhidmatan tersembunyi + open_reports: laporan belum selesai + recent_users: Pengguna terbaru + search: Carian teks penuh + single_user_mode: Mod pengguna tunggal + software: Perisian + space: Kegunaan ruang + title: Papan pemuka + total_users: pengguna keseluruhannya + trends: Trend + week_interactions: interaksi minggu ini + week_users_active: aktif minggu ini + week_users_new: pengguna minggu ini + domain_blocks: + add_new: Tambah + created_msg: Sekatan domain sedang diproses + destroyed_msg: Sekatan domain telah dibatalkan + domain: Domain + new: + create: Cipta sekatan + hint: Sekatan domain tidak akan menghindarkan penciptaan entri akaun dalam pangkalan data, tetapi akan diberikan kaedah kawalan khusus tertentu pada akaun-akaun tersebut secara retroaktif dan automatik. + severity: + desc_html: "<strong>Senyapkan</strong> akan membuatkan hantaran akaun tidak kelihatan kepada sesiapa yang tidak mengikut mereka. <strong>Gantungkan</strong> akan membuang semua kandungan, media, dan data profil akaun tersebut. Gunakan <strong>Tiada</strong> jika anda hanya ingin menolak fail media." + noop: Tiada + silence: Senyapkan + suspend: Gantungkan + title: Sekatan domain baru + reject_media: Tolak fail media + reject_media_hint: Buang fail media yang disimpan di sini dan menolak sebarang muat turun pada masa depan. Tidak berkaitan dengan penggantungan + reject_reports: Tolak laporan + reject_reports_hint: Abaikan semua laporan daripada domain ini. Tidak dikira untuk penggantungan + severities: + noop: Tiada + silence: Senyapkan + suspend: Gantungkan + severity: Tahap teruk + show: + affected_accounts: + one: Satu akaun dalam pangkalan data menerima kesan + other: "%{count} akaun dalam pangkalan data menerima kesan" + retroactive: + silence: Buang penyenyapan semua akaun sedia ada daripada domain ini + suspend: Buang penggantungan semua akaun sedia ada daripada domain ini + title: Buang sekatan domain %{domain} + undo: Buang + title: Sekatan domain + undo: Buang + email_domain_blocks: + add_new: Tambah + created_msg: Berjaya menambah domain emel ke dalam senarai hitam + delete: Padam + destroyed_msg: Berjaya memadam domain emel daripada senarai hitam + domain: Domain + new: + create: Tambah domain + title: Entri senarai hitam emel baru + title: Senarai hitam emel + instances: + account_count: Akaun diketahui + domain_name: Domain + reset: Set semula + search: Cari + title: Tika diketahui + invites: + deactivate_all: Nyahaktifkan semua + filter: + all: Semua + available: Tersedia + expired: Tamat tempoh + title: Tapis + title: Undangan + relays: + add_new: Tambah geganti baru + delete: Padam + description_html: "<strong>Geganti persekutuan</strong> ialah pelayan perantara yang saling menukar toot awam dalam jumlah yang banyak di antara pelayan yang melanggan ia dan menerbitkan kepada ia. <strong>Ia boleh bantu pelayan kecil dan sederhana untuk menemui kandungan daripada dunia persekutuan Mastodon</strong>, yang mana jika tidak digunakan akan memerlukan pengguna tempatan mengikut orang lain di pelayan jarak jauh secara manual." + disable: Lumpuhkan + disabled: Dilumpuhkan + enable: Bolehkan + enable_hint: Apabila dibolehkan, pelayan anda akan melanggan kesemua toot awam daripada geganti ini, dan akan mula menghantar toot awam pelayan ini kepada ia. + enabled: Dibolehkan + inbox_url: URL geganti + pending: Menunggu persetujuan geganti + save_and_enable: Simpan dan bolehkan + setup: Tetapkan sambungan geganti + status: Status + title: Geganti + report_notes: + created_msg: Nota laporan berjaya dicipta! + destroyed_msg: Nota laporan berjaya dipadam! + reports: + account: + note: nota + report: laporan + action_taken_by: Tindakan oleh + are_you_sure: Anda pasti? + assign_to_self: Berikan pada saya + assigned: Pengawal yang menerima + comment: + none: Tiada + created_at: Dilaporkan + mark_as_resolved: Tanda sebagai sudah selesai + mark_as_unresolved: Tanda sebagai belum selesai + notes: + create: Tambah nota + create_and_resolve: Selesaikan dengan nota + placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan... + exports: + archive_takeout: + in_progress: Mengkompil arkib anda... + followers: + success: + one: Dalam proses menyekat-lembut pengikut daripada satu domain... + other: Dalam proses menyekat-lembut pengikut daripada %{count} domain... + notification_mailer: + digest: + title: Ketika anda tiada di sini... + users: + follow_limit_reached: Anda tidak boleh mengikut lebih daripada %{limit} orang diff --git a/config/locales/nl.yml b/config/locales/nl.yml index df65cfa2c..a396a41da 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -123,10 +123,6 @@ nl: most_recent_ip: Laatst gebruikt IP-adres no_limits_imposed: Geen limieten ingesteld not_subscribed: Niet geabonneerd - order: - alphabetic: Alfabetisch - most_recent: Meest recent - title: Sorteren outbox_url: Outbox-URL perform_full_suspension: Opschorten profile_url: Profiel-URL diff --git a/config/locales/no.yml b/config/locales/no.yml index 61466fa20..5e06564ac 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -92,10 +92,6 @@ most_recent_activity: Nyligste aktivitet most_recent_ip: Nyligste IP not_subscribed: Ikke abonnért - order: - alphabetic: Alfabetisk - most_recent: Nyligst - title: Rekkefølge outbox_url: Utboks URL perform_full_suspension: Utfør full utvisning profile_url: Profil-URL diff --git a/config/locales/oc.yml b/config/locales/oc.yml index d968567dd..f9cf623f0 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -123,10 +123,6 @@ oc: most_recent_ip: IP mai recenta no_limits_imposed: Cap de limit impausat not_subscribed: Pas seguidor - order: - alphabetic: Alfabetic - most_recent: Mai recent - title: Ordre outbox_url: URL Outbox perform_full_suspension: Suspendre profile_url: URL del perfil diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 18b295da6..f6958b4e1 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -131,10 +131,6 @@ pl: most_recent_ip: Ostatnie IP no_limits_imposed: Nie nałożono ograniczeń not_subscribed: Nie zasubskrybowano - order: - alphabetic: Alfabetycznie - most_recent: Najnowsze - title: Kolejność outbox_url: Adres skrzynki nadawczej perform_full_suspension: Zawieś profile_url: Adres profilu @@ -376,7 +372,7 @@ pl: desc_html: Wyświetlany na stronie głównej. Zalecany jest rozmiar przynajmniej 600x100 pikseli. Jeżeli nie ustawiony, zostanie użyta miniatura instancji title: Obraz bohatera mascot: - desc_html: Wyświetlany na wielu stronach. Zalecany jest rozmiar przynajmniej 293px × 205px. Jeżeli nie ustawiono, zostanie użyta domyślna. + desc_html: Wyświetlany na wielu stronach. Zalecany jest rozmiar przynajmniej 293px × 205px. Jeżeli nie ustawiono, zostanie użyta domyślna title: Obraz maskotki peers_api_enabled: desc_html: Nazwy domen, z którymi ta instancja wchodziła w interakcje diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 1c9964daf..aa6c81e3c 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -10,7 +10,7 @@ pt-BR: closed_registrations: Os cadastros estão atualmente fechados nesta instância. No entanto, você pode procurar uma instância diferente na qual possa criar uma conta e acessar a mesma rede por lá. contact: Contato contact_missing: Não definido - contact_unavailable: N/A + contact_unavailable: Não disponível documentation: Documentação extended_description_html: | <h3>Um bom lugar para regras</h3> @@ -123,10 +123,6 @@ pt-BR: most_recent_ip: IP mais recente no_limits_imposed: Nenhum limite imposto not_subscribed: Não está inscrito - order: - alphabetic: Alfabética - most_recent: Mais recente - title: Ordem outbox_url: URL da caixa de saída perform_full_suspension: Suspender profile_url: URL do perfil diff --git a/config/locales/pt.yml b/config/locales/pt.yml index b68ffbd7f..4c23c9cf4 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -92,10 +92,6 @@ pt: most_recent_activity: Actividade mais recente most_recent_ip: IP mais recente not_subscribed: Não inscrito - order: - alphabetic: Alfabética - most_recent: Mais recente - title: Ordem outbox_url: URL da caixa de saída perform_full_suspension: Fazer suspensão completa profile_url: URL do perfil diff --git a/config/locales/ru.yml b/config/locales/ru.yml index a3ac754f2..9fa85b7c2 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -128,10 +128,6 @@ ru: most_recent_activity: Последняя активность most_recent_ip: Последний IP not_subscribed: Не подписаны - order: - alphabetic: По алфавиту - most_recent: По дате - title: Порядок outbox_url: URL исходящих perform_full_suspension: Полная блокировка profile_url: URL профиля diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 0d78f419f..b91d5780a 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -6,9 +6,14 @@ ast: autofollow: La xente que se rexistre pente la invitación va siguite automáticamente bot: Esta cuenta fai principalmente aiciones automatizaes y podría nun supervisase digest: Namái s'unvia tres un periodu llargu d'inactividá y namái si recibiesti cualesquier mensaxe personal na to ausencia + email: Vamos unviate un corréu de confirmación irreversible: Los toots peñeraos van desapaecer de mou irreversible, magar que se desanicie la peñera dempués + password: Usa 8 caráuteres polo menos setting_hide_network: La xente que sigas y teas siguiendo nun va amosase nel perfil setting_theme: Afeuta al aspeutu de Mastodon cuando anicies sesión dende cualesquier preséu. + username: El nome d'usuariu va ser únicu en %{domain} + imports: + data: El ficheru CSV esportáu dende otra instancia de Mastodon labels: account: fields: @@ -22,18 +27,27 @@ ast: current_password: Contraseña actual data: Datos display_name: Nome a amosar + email: Direición de corréu + expires_in: Caduca tres fields: Datos meta del perfil header: Testera + irreversible: Escartar en cuentes d'anubrir locale: Llingua de la interfaz locked: Bloquiar cuenta + max_uses: Númberu máximu d'usos new_password: Contraseña nueva note: Bio otp_attempt: Códigu de verificación en dos pasos password: Contraseña + phrase: Pallabra clave o fras setting_auto_play_gif: Reproducir GIFs automáticamente - setting_default_language: Llingua d'espublización + setting_default_language: Llingua de les espublizaciones setting_default_privacy: Privacidá d'espublizaciones + setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar un toot + setting_system_font_ui: Usar la fonte predeterminada del sistema + setting_unfollow_modal: Amosar el diálogu de confirmación enantes de dexar de siguir a daquién severity: Severidá + type: Triba de la importación username: Nome d'usuariu username_or_email: Nome d'usuariu o corréu interactions: diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index c2fd93ee1..b4f2e04c0 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -4,13 +4,13 @@ cs: hints: defaults: autofollow: Lidé, kteří se zaregistrují přes pozvání, vás budou automaticky sledovat - avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px + avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován context: Jedno či více kontextů, ve kterých má být filtr uplatněn digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy email: Bude vám poslán potvrzovací e-mail fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka - header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšena na %{dimensions} px + header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px inbox_url: Zkopírujte URL z hlavní stránky mostu, který chcete použít irreversible: Filtrované tooty nenávratně zmizí, i pokud bude filtr později odstraněn locale: Jazyk uživatelského rozhraní, e-mailů a oznámení push diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 1063466ca..8dfb1ddec 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -65,6 +65,7 @@ da: setting_default_privacy: Privatliv setting_default_sensitive: Marker altid medier som værende følsomt setting_delete_modal: Vis bekræftelses dialog før du sletter et trut + setting_display_media_default: Standard setting_hide_network: Skjul dit netværk setting_noindex: Frameld dig søgemaskiners indeksering setting_reduce_motion: Reducer animationers bevægelse diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index b510370a3..e9ab97c87 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -3,7 +3,7 @@ eu: simple_form: hints: defaults: - autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko zaituzte + autofollow: Gonbidapena erabiliz izena ematen dutenek automatikoki jarraituko dizute avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen context: Iragazkia aplikatzeko testuinguru bat edo batzuk @@ -12,18 +12,18 @@ eu: fields: 4 elementu bistaratu ditzakezu taula batean zure profilean header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da inbox_url: Kopiatu erabili nahi duzun errelearen hasiera orriaren URLa - irreversible: Iragazitako toot-ak betirako galduko dira, geroago iragazkia kentzen baduzu ere + irreversible: Iragazitako Toot-ak betirako galduko dira, geroago iragazkia kentzen baduzu ere locale: Erabiltzaile-interfazea, e-mail mezuen eta jakinarazpenen hizkuntza locked: Jarraitzaileak eskuz onartu behar dituzu password: Erabili 8 karaktere gutxienez phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar. - setting_default_language: Zure toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza + setting_default_language: Zure Toot-en hizkuntza automatikoki antzeman daiteke, baina ez da beti zehatza setting_display_media_default: Ezkutatu hunkigarri gisa markatutako multimedia setting_display_media_hide_all: Ezkutatu multimedia guztia beti setting_display_media_show_all: Erakutsi beti hunkigarri gisa markatutako multimedia setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean - setting_noindex: Zure profil publiko eta toot orrietan eragina du + setting_noindex: Zure profil publiko eta Toot-en orrietan eragina du setting_theme: Edozein gailutik konektatzean Mastodon-en itxuran eragiten du. username: Zure erabiltzaile-izena bakana izango da %{domain} domeinuan whole_word: Hitz eta esaldi gakoa alfanumerikoa denean, hitz osoarekin bat datorrenean besterik ez da aplikatuko diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 2f9c80dbe..2eeacade6 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -82,7 +82,7 @@ fa: setting_unfollow_modal: نمایش پیغام تأیید پیش از لغو پیگیری دیگران severity: شدت type: نوع درونریزی - username: نام کاربری (تنها حروف انگلیسی) + username: نام کاربری (لاتین) username_or_email: نام کاربری یا ایمیل whole_word: تطابق واژهٔ کامل interactions: diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 53ccb069e..01d12b14b 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -75,9 +75,9 @@ it: setting_display_media_show_all: Mostra tutti setting_expand_spoilers: Espandi sempre toot con content warning setting_hide_network: Nascondi la tua rete - setting_noindex: Non indicizzare dai motori di ricerca + setting_noindex: Non farti indicizzare dai motori di ricerca setting_reduce_motion: Riduci movimento nelle animazioni - setting_system_font_ui: Usa il carattere di default del sistema + setting_system_font_ui: Usa il carattere predefinito del sistema setting_theme: Tema sito setting_unfollow_modal: Mostra dialogo di conferma prima di smettere di seguire qualcuno severity: Severità @@ -86,7 +86,7 @@ it: username_or_email: Nome utente o email whole_word: Parola intera interactions: - must_be_follower: Blocca notifiche dai non follower + must_be_follower: Blocca notifiche da chi non ti segue must_be_following: Blocca notifiche dalle persone che non segui must_be_following_dm: Blocca i messaggi diretti dalle persone che non segui notification_emails: diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 3ff75c2f2..9916ce13e 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -8,18 +8,24 @@ sk: bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdŕžal/a nejaké osobné správy kým si bol/a preč - fields: Môžeš mať 4 položky na svojom profile zobrazené vo forme tabuľky - header: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px + email: Bude ti odoslaný potvrdzujúci email + fields: Až štyri položky môžeš mať na svojom profile zobrazené vo forme tabuľky + header: PNG, GIF, alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px inbox_url: Skopíruj adresu z hlavnej stránky mostíka, ktorý chceš používať irreversible: Vytriedené príspevky zmiznú nenávratne, aj keď triedenie neskôr zrušíš locale: Jazyk užívateľského rozhrania, emailových a nástenkových oboznámení locked: Vyžaduje manuálne schvalovať sledujúcich + password: Zadaj aspoň osem znakov phrase: Zhoda sa nájde nezávisle od toho, či je text napísaný, veľkými, alebo malými písmenami, či už v tele, alebo v hlavičke scopes: Ktoré API budú povolené aplikácii pre prístup. Ak vyberieš vrcholný stupeň, nemusíš už potom vyberať po jednom. setting_default_language: Jazyk tvojích príspevkov môže byť zistený automaticky, ale nieje to vždy presné + setting_display_media_default: Skryť médiá označené ako citlivé + setting_display_media_hide_all: Vždy ukryť všetky médiá + setting_display_media_show_all: Stále ukazuj médiá označené ako citlivé setting_hide_network: Koho následuješ, a kto následuje teba nebude zobrazené na tvojom profile setting_noindex: Ovplyvňuje verejný profil a stránky s príspevkami setting_theme: Ovplyvňuje ako Mastodon vyzerá pri prihlásení z hociakého zariadenia. + username: Tvoja prezývka bude unikátna pre server %{domain} whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom imports: data: CSV súbor vyexportovaný z inej Mastodon inštancie @@ -63,6 +69,11 @@ sk: setting_default_privacy: Súkromie príspevkov setting_default_sensitive: Označ všetky mediálne súbory ako chúlostivé setting_delete_modal: Zobrazuj potvrdzovacie okno pred vymazaním toot-u + setting_display_media: Zobrazovanie médií + setting_display_media_default: Štandard + setting_display_media_hide_all: Skryť všetky + setting_display_media_show_all: Ukáž všetky + setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o obsahu setting_hide_network: Ukri svoju sieť kontaktov setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče setting_reduce_motion: Redukovať pohyb v animáciách diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 618446db1..890cbac41 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -13,5 +13,92 @@ sl: header: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px inbox_url: Kopirajte URL naslov s prve strani releja, ki ga želite uporabiti irreversible: Filtrirani trobi bodo nepovratno izginili, tudi če je filter kasneje odstranjen + locale: Jezik uporabniškega vmesnika, e-poštnih sporočil in potisnih obvestil + locked: Zahteva, da ročno odobrite sledilce + password: Uporabite najmanj 8 znakov + phrase: Se bo ujemal, ne glede na začetnice v tekstu ali opozorilo o vsebini troba + scopes: Do katerih API-jev bo imel program dostop. Če izberete obseg najvišje ravni, vam ni treba izbrati posameznih. + setting_default_language: Jezik vaših trobov je lahko samodejno zaznan, vendar ni vedno pravilen + setting_display_media_default: Skrij medij, ki je označen kot občutljiv + setting_display_media_hide_all: Vedno skrij vse medije + setting_display_media_show_all: Vedno pokaži medij, ki je označen kot občutljiv + setting_hide_network: Kogar spremljate in kdo vas spremlja ne bo prikazano na vašem profilu + setting_noindex: Vpliva na vaš javni profil in na strani s stanjem + setting_theme: Vpliva na to, kako izgleda Mastodon, ko ste prijavljeni s katero koli napravo. + username: Vaše uporabniško ime bo edinstveno na %{domain} + whole_word: Ko je ključna beseda ali fraza samo alfanumerična, se bo uporabljala le, če se bo ujemala s celotno besedo imports: data: Izvožena CSV datoteka iz drugega Mastodon vozlišča + sessions: + otp: 'Vnesite dvomestno kodo, ki je ustvarjena z aplikacijo na telefonu, ali uporabite eno od vaših obnovitvenih kod:' + user: + chosen_languages: Ko je označeno, bodo v javnih časovnicah prikazani samo trobi v izbranih jezikih + labels: + account: + fields: + name: Oznaka + value: Vsebina + defaults: + autofollow: Povabite, da sledi vašemu računu + avatar: Podoba + bot: To je račun robota + chosen_languages: Filtriraj jezike + confirm_new_password: Potrdite novo geslo + confirm_password: Potrdite geslo + context: Filtriraj vsebino + current_password: Trenutno geslo + data: Podatki + display_name: Prikazno ime + email: E-poštni naslov + expires_in: Preteče po + fields: Metapodatki profila + header: Glava + inbox_url: URL mape "Prejeto" + irreversible: Opusti namesto skrij + locale: Jezik vmesnika + locked: Zaklenjen račun + max_uses: Največje število uporabnikov + new_password: Novo geslo + note: Bio + otp_attempt: Dvofaktorska koda + password: Geslo + phrase: Ključna beseda ali fraza + setting_auto_play_gif: Samodejno predvajanje animiranih GIF-ov + setting_boost_modal: Pred sunkom pokaži potrditveno okno + setting_default_language: Jezik objavljanja + setting_default_privacy: Zasebnost objave + setting_default_sensitive: Vedno označi medije kot občutljive + setting_delete_modal: Pred brisanjem troba prikaži okno za pritrditev + setting_display_media: Prikaz medijev + setting_display_media_default: Privzeto + setting_display_media_hide_all: Skrij vse + setting_display_media_show_all: Prikaži vse + setting_expand_spoilers: Vedno razširi trobe, označene z opozorili o vsebini + setting_hide_network: Skrij svoje omrežje + setting_noindex: Odsotnost indeksiranja iskalnikov + setting_reduce_motion: Zmanjšanje premikanja v animacijah + setting_system_font_ui: Uporabi privzeto pisavo sistema + setting_theme: Tema strani + setting_unfollow_modal: Pokaži potrditveno okno, preden nekoga prenehamo slediti + severity: Strogost + type: Vrsta uvoza + username: Uporabniško ime + username_or_email: Uporabniško ime ali E-pošta + whole_word: Celotna beseda + interactions: + must_be_follower: Blokiraj obvestila nesledilcev + must_be_following: Blokiraj obvestila oseb, ki jim ne sledite + must_be_following_dm: Blokiraj neposredna sporočila oseb, ki jim ne sledite + notification_emails: + digest: Pošlji izvlečke e-pošt + favourite: Pošlji e-pošto, ko nekdo doda vaše stanje med priljubljene + follow: Pošlji e-pošto, ko vas nekdo sledi + follow_request: Pošlji e-pošto, ko vam nekdo želi slediti + mention: Pošlji e-pošto, ko vas nekdo omeni + reblog: Pošlji e-pošto, ko nekdo sune vaše stanje + report: Pošlji e-pošto, ko je oddano novo poročilo + 'no': Ne + required: + mark: "*" + text: zahtevano + 'yes': Da diff --git a/config/locales/sk.yml b/config/locales/sk.yml index bf56ef465..32bfcb8e1 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -30,18 +30,28 @@ sk: other_instances: Zoznam ďalších inštancií privacy_policy: Ustanovenia o súkromí source_code: Zdrojový kód - status_count_after: statusy + status_count_after: + few: príspevkov + one: príspevok + other: príspevkov status_count_before: Ktorí napísali terms: Podmienky užívania - user_count_after: užívateľov + user_count_after: + few: užívatelia + one: užívateľ + other: užívatelia user_count_before: Domov pre what_is_mastodon: Čo je Mastodon? accounts: choices_html: "%{name}vé voľby:" - follow: Sledovať - followers: Sledovatelia - following: Sledovaní + follow: Sleduj + followers: + few: Sledovatelia + one: Sledujúci + other: Sledovatelia + following: Sledovaných joined: Pridal/a sa %{date} + link_verified_on: Vlastníctvo tohto odkazu bolo skontrolované %{date} media: Médiá moved_html: "%{name} účet bol presunutý na %{new_profile_link}:" network_hidden: Táto informácia nieje k dispozícii @@ -50,7 +60,10 @@ sk: people_who_follow: Ľudia sledujúci %{name} pin_errors: following: Musíš už následovať toho človeka, ktorého si praješ zviditeľniť - posts: Príspevky + posts: + few: Príspevkov + one: Príspevok + other: Príspevkov posts_tab_heading: Príspevky posts_with_replies: Príspevky s odpoveďami reserved_username: Prihlasovacie meno je rezervované @@ -58,7 +71,7 @@ sk: admin: Administrátor bot: Automat moderator: Moderátor - unfollow: Prestať sledovať + unfollow: Prestaň sledovať admin: account_moderation_notes: create: Zanechaj poznámku @@ -112,13 +125,10 @@ sk: moderation_notes: Moderátorské poznámky most_recent_activity: Posledná aktivita most_recent_ip: Posledná IP + no_limits_imposed: Niesú stanovené žiadné obmedzenia not_subscribed: Nezaregistrované - order: - alphabetic: Abecedne - most_recent: Podľa času - title: Zoradiť outbox_url: URL poslaných - perform_full_suspension: Suspendovať + perform_full_suspension: Zablokovať profile_url: URL profilu promote: Povýšiť protocol: Protokol @@ -127,18 +137,18 @@ sk: redownload: Obnoviť avatar remove_avatar: Odstrániť avatár resend_confirmation: - already_confirmed: Tento používateľ už bol potvrdený - send: Znova odoslať potvrdzovací e-mail - success: Potvrdený e-mail bol úspešne odoslaný! - reset: Reset - reset_password: Obnoviť heslo + already_confirmed: Tento užívateľ už je potvrdený + send: Znovu odoslať potvrdzovací email + success: Potvrdzujúci email bol úspešne odoslaný! + reset: Resetuj + reset_password: Obnov heslo resubscribe: Znovu odoberať role: Oprávnenia roles: admin: Administrátor moderator: Moderátor staff: Člen - user: Používateľ + user: Užívateľ salmon_url: Salmon adresa search: Hľadať shared_inbox_url: URL zdieľanej schránky @@ -147,14 +157,16 @@ sk: report: report targeted_reports: Nahlásenia pre tento účet silence: Stíšiť + silenced: Utíšení statuses: Príspevky subscribe: Odoberať + suspended: Zablokovaní title: Účty unconfirmed_email: Nepotvrdený email undo_silenced: Zrušiť stíšenie undo_suspension: Zrušiť suspendáciu - unsubscribe: Prestať odoberať - username: Používateľske meno + unsubscribe: Prestaň odoberať + username: Prezývka web: Web action_logs: actions: @@ -165,6 +177,7 @@ sk: create_domain_block: "%{name} zablokoval doménu %{target}" create_email_domain_block: "%{name} pridal e-mailovú doménu %{target} na zoznam zakázaných" demote_user: "%{name} degradoval používateľa %{target}" + destroy_custom_emoji: "%{name} zničil/a %{target} emoji" destroy_domain_block: "%{name} povolil doménu %{target}" destroy_email_domain_block: "%{name} pridal e-mailovú doménu %{target} na zoznam povolených" destroy_status: "%{name} zmazal status %{target}" @@ -250,6 +263,8 @@ sk: title: Nové blokovanie domény reject_media: Odmietať súbory s obrázkami alebo videami reject_media_hint: Zmaže lokálne uložené súbory médií a odmietne ich sťahovanie v budúcnosti. Irelevantné pre suspendáciu + reject_reports: Zamietni hlásenia + reject_reports_hint: Ignoruj všetky hlásenia prichádzajúce z tejto domény. Nevplýva na blokovania severities: noop: Žiadne silence: Stíšiť @@ -293,8 +308,13 @@ sk: title: Pozvánky relays: add_new: Pridaj novú priechodnú oporu + delete: Vymaž description_html: "<strong>Federovací mostík</strong> je prechodný server ktorý obmieňa veľké množstvá verejných príspevkov medzi tými servermi ktoré na od neho odoberajú, aj doňho prispievajú. <strong>Môže to pomôcť malým a stredným instanciám objavovať federovaný obsah</strong>, čo inak vyžaduje aby miestni užívatelia ručne následovali iných ľudí zo vzdialených instancií." + disable: Pozastav + disabled: Zastavené + enable: Povoľ enable_hint: Ak povolíš, tvoj server bude odoberať všetky verejné príspevky z tohto mostu, a začne posielať verejné príspevky tvojho servera na tento most. + enabled: Povolené inbox_url: URL mostu pending: Čakám na povolenie od prechodného mostu save_and_enable: Uložiť a povoliť @@ -350,6 +370,9 @@ sk: hero: desc_html: Zobrazuje sa na hlavnej stránke. Doporučuje sa rozlišenie aspoň 600x100px Pokiaľ tu nieje nič dodané, bude nastavený základný orázok tohoto serveru title: Obrázok hrdinu + mascot: + desc_html: Zobrazované na viacerých stránkach. Odporúčaná veľkosť aspoň 293×205px. Pokiaľ nieje nahraté, bude zobrazený základný maskot + title: Obrázok maskota peers_api_enabled: desc_html: Domény na ktoré táto instancia už vo fediverse natrafila title: Zverejniť zoznam objavených instancií @@ -370,8 +393,8 @@ sk: desc_html: Povoliť každému aby si mohli vytvoriť účet title: Verejná registrácia show_known_fediverse_at_about_page: - desc_html: Pokiaľ je zapnuté, bude v ukážke osi možné nahliadnúť toot statusy z celého známeho fediversa. V opačnom prípade tam budú ukázané iba statusy z lokálnej osi. - title: Ukázať celé známe fediversum ako ukážku osi + desc_html: Pokiaľ je zapnuté, bude v ukážke osi možné nahliadnúť príspevky z celého známeho fediversa. Inak budú ukázané iba statusy z lokálnej osi. + title: Ukázať celé známe fediversum na ukážke osi show_staff_badge: desc_html: Zobraziť moderátorsku značku na užívateľovej stránke title: Zobraziť značku moderátora @@ -406,7 +429,7 @@ sk: title: Médiá no_media: Žiadné médiá no_status_selected: Žiadne príspevky neboli zmenené, keďže si žiadne nemal/a zvolené - title: Statusy na účte + title: Príspevky na účte with_media: S médiami subscriptions: callback_url: Zdrojová adresa URL @@ -500,7 +523,7 @@ sk: warning_html: Iba vymazanie obsahu z tejto konkrétnej instancie je garantované. Obsah ktorý bol zdieľaný široko-ďaleko pravdepodobne zanechá nejaké stopy. Servery ktoré sú offline a tie ktoré ignorujú tvoje zmeny teda nezaktualizujú svoje databázy. warning_title: O dostupnosti distribuovaného obsahu errors: - '403': Nemáte dostatočné povolenie na zobrazenie tejto stránky. + '403': Nemáš povolenie na zobrazenie tejto stránky. '404': Stránka ktorú si hľadal/a sa tu nenachádza. '410': Stránka ktorú si tu hľadal/a už viac neexistuje. '422': @@ -559,10 +582,11 @@ sk: resources: Podklady generic: changes_saved_msg: Zmeny boli úspešne uložené! - save_changes: Uložiť zmeny + copy: Kopírovať + save_changes: Ulož zmeny validation_errors: few: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetky %{count} chyby - one: Niečo nieje úplne v poriadku! Prosím skontroluj chybu + one: Niečo nieje úplne v poriadku! Prosím skontroluj danú chybu other: Niečo ešte stále nieje v poriadku! Prosím skontroluj všetkých %{count} chýb imports: preface: Môžeš importovať dáta ktoré si exportoval/a z iného Mastodon serveru, ako sú napríklad zoznamy ľudí ktorých sleduješ, alebo blokuješ. @@ -738,8 +762,11 @@ sk: other: "%{count} videí" boosted_from_html: Povýšené od %{acct_link} content_warning: 'Varovanie o obsahu: %{warning}' - disallowed_hashtags: 'obsahuje nepovolené haštagy: %{tags}' - language_detection: Zisti jazyk automaticky + disallowed_hashtags: + few: 'obsahoval nepovolené hashtagy: %{tags}' + one: 'obsahoval nepovolený hashtag: %{tags}' + other: 'obsahoval nepovolené hashtagy: %{tags}' + language_detection: Jazyk zisti automaticky open_in_web: Otvor v okne prehliadača over_character_limit: limit počtu %{max} znakov bol presiahnutý pin_errors: @@ -808,8 +835,12 @@ sk: tips: Tipy title: Vitaj na palube, %{name}! users: + follow_limit_reached: Nemôžeš následovať viac ako %{limit} ľudí invalid_email: Emailová adresa je neplatná invalid_otp_token: Neplatný kód pre dvojfaktorovú autentikáciu otp_lost_help_html: Pokiaľ si stratil/a prístup k obom, môžeš dať vedieť %{email} seamless_external_login: Si prihlásená/ý cez externú službu, takže nastavenia hesla a emailu ti niesú prístupné. signed_in_as: 'Prihlásený ako:' + verification: + explanation_html: 'Môžeš sa <strong>overiť ako majiteľ odkazov v metadátach tvojho profilu</strong>. Na to musí ale odkazovaná stránka obsahovať odkaz späť na tvoj Mastodon profil. Tento spätný odkaz <strong>musí</strong> mať prívlastok <code>rel="me"</code>. Na texte odkazu nezáleží. Tu je príklad:' + verification: Overenie diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 0e9d7d3aa..f35d5f09e 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -16,35 +16,59 @@ sl: <h3>Dober prostor za pravila</h3> <p>Razširjen opis še ni bil nastavljen.</p> features: + humane_approach_body: Na podlagi učenja od neuspehov drugih omrežij, želi Mastodon oblikovati etične načrte za boj proti zlorabi socialnih medijev. humane_approach_title: Bolj human pristop + not_a_product_body: Mastodon ni komercialno omrežje. Brez oglaševanja, brez podatkovnega rudarjenja, brez obzidanih vrtov. Ni osrednjega organa. not_a_product_title: Ti si oseba, ne izdelek + real_conversation_body: S 500 znaki, ki so vam na voljo, in podporo za zrnate vsebine ter opozorila pred mediji, se lahko izrazite tako, kot želite. real_conversation_title: Zgrajen za pravi pogovor + within_reach_body: Zahvaljujoč razvijalcem prijaznemu API ekosistemu, obstaja več aplikacija za iOS, Arduino in druge platforme, ki vam omogočajo, da sledite svojim prijateljem kjerkoli. within_reach_title: Vedno na dosegu roke generic_description: "%{domain} je en strežnik v omrežju" hosted_on: Mastodon gostuje na %{domain} learn_more: Spoznaj več other_instances: Seznam vozlišč + privacy_policy: Politika zasebnosti source_code: Izvorna koda - status_count_after: statusi + status_count_after: + few: stanja + one: stanje + other: stanja + two: stanja status_count_before: Kdo je avtor - user_count_after: uporabniki + terms: Pogoji storitve + user_count_after: + few: uporabniki + one: uporabnik + other: uporabniki + two: uporabniki user_count_before: Dom za what_is_mastodon: Kaj je Mastodon? accounts: + choices_html: "%{name} izbire:" follow: Sledi - followers: Sledilci + followers: + few: Sledilci + one: Sledilec + other: Sledilci + two: Sledilci following: Sledim + joined: Se je pridružil na %{date} + link_verified_on: Lastništvo te povezave je bilo preverjeno na %{date} media: Medij moved_html: "%{name} se je prestavil na %{new_profile_link}:" network_hidden: Te informacije niso na voljo nothing_here: Nič ni tukaj! people_followed_by: Ljudje, ki jim sledi %{name} people_who_follow: Ljudje, ki sledijo %{name} + pin_errors: + following: Verjetno že sledite osebi, ki jo želite potrditi posts: few: Trob one: Trob other: Trob two: Trob + posts_tab_heading: Trobi posts_with_replies: Tuti in odgovori reserved_username: Uporabniško ime je zasedeno roles: @@ -57,6 +81,7 @@ sl: create: Pusti sporočilo created_msg: Uspešno ustvarjena opomba moderiranja! delete: Izbriši + destroyed_msg: Moderirana opomba je uspešno uničena! accounts: are_you_sure: Ali si prepričan? avatar: Avatar @@ -71,9 +96,11 @@ sl: confirm: Potrdi confirmed: Potrjeno confirming: Potrjujem + demote: Ponižaj disable: Onemogoči disable_two_factor_authentication: Onemogoči 2FA disabled: Onemogočeno + display_name: Prikazno ime domain: Domena edit: Uredi email: E-pošta @@ -102,10 +129,6 @@ sl: moderation_notes: Opombe moderiranja most_recent_activity: Zadnja aktivnost most_recent_ip: Zadnji IP - order: - alphabetic: Po abecedi - most_recent: Najnovejše - title: Red promote: Spodbujanje remote_interaction: prompt: 'Želite interakcijo s tem trobom:' diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 1e32190cc..93ba091cb 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -92,10 +92,6 @@ sr-Latn: most_recent_activity: Najskorija aktivnost most_recent_ip: Najskorija IP adresa not_subscribed: Nije pretplaćen - order: - alphabetic: Abecedni - most_recent: Najskoriji - title: Redosled outbox_url: Odlazno sanduče perform_full_suspension: Izvrši kompletno isključenje profile_url: Adresa profila @@ -465,7 +461,7 @@ sr-Latn: title: Moderacija notification_mailer: digest: - body: 'Evo kratak pregled šta ste propustili od poslednje posete od %{since}:' + body: Evo kratak pregled šta ste propustili od poslednje posete od %{since} mention: "%{name} Vas je pomenuo u:" new_followers_summary: few: Dobili ste %{count} nova pratioca! Sjajno! diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 1ade87f9e..14354f8a6 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -113,10 +113,6 @@ sr: most_recent_activity: Најскорија активност most_recent_ip: Најскорија IP адреса not_subscribed: Није претплаћен - order: - alphabetic: Абецедни - most_recent: Најскорији - title: Редослед outbox_url: Одлазно сандуче perform_full_suspension: Изврши комплетно искључење profile_url: Адреса профила diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 465a9b127..55ab9b2ba 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -103,10 +103,6 @@ sv: most_recent_activity: Senaste aktivitet most_recent_ip: Senaste IP not_subscribed: Inte prenumererat - order: - alphabetic: Alfabetiskt - most_recent: Senaste - title: Ordning outbox_url: Utkorg URL perform_full_suspension: Utför full avstängning profile_url: Profil URL diff --git a/config/locales/te.yml b/config/locales/te.yml index f28b56052..bde34980a 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -2,4 +2,6 @@ te: about: about_this: గురించి + administered_by: 'నిర్వహణలో:' contact: సంప్రదించండి + contact_unavailable: వర్తించదు diff --git a/config/locales/th.yml b/config/locales/th.yml index b0b8e9ba0..42d52af26 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -49,10 +49,6 @@ th: most_recent_activity: กิจกรรมล่าสุด most_recent_ip: IP ล่าสุด not_subscribed: Not subscribed - order: - alphabetic: ตามตัวอักษร - most_recent: ล่าสุด - title: จัดเรียง perform_full_suspension: Perform full suspension profile_url: Profile URL public: สาธารณะ diff --git a/config/locales/tr.yml b/config/locales/tr.yml index bc0a558e1..486210af6 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -48,10 +48,6 @@ tr: most_recent_activity: Son aktivite most_recent_ip: Son IP not_subscribed: Abone edilmedi - order: - alphabetic: Alfabetik - most_recent: En son - title: Sıralama perform_full_suspension: Tamamen uzaklaştır profile_url: Profil linki public: Herkese açık @@ -222,7 +218,7 @@ tr: too_many: 4'ten fazla dosya ekleyemezsiniz notification_mailer: digest: - body: 'Son ziyaretiniz olan %{since}''den beri''da kaçırdığınız şeylerin özeti:' + body: Son ziyaretiniz olan %{since}'den beri'da kaçırdığınız şeylerin özeti mention: "%{name} senden bahsetti:" new_followers_summary: one: Yeni bir takipçiniz var! diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e4ea774ec..28dd7f579 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -108,10 +108,6 @@ uk: most_recent_activity: Остання активність most_recent_ip: Останній IP not_subscribed: Не підписані - order: - alphabetic: За алфавітом - most_recent: За датою - title: Порядок outbox_url: Вихідний URL perform_full_suspension: Повне блокування profile_url: URL профілю diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a32f36e32..744648921 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -114,10 +114,6 @@ zh-CN: most_recent_activity: 最后一次活跃的时间 most_recent_ip: 最后一次活跃的 IP 地址 not_subscribed: 未订阅 - order: - alphabetic: 按字母 - most_recent: 按时间 - title: 排序 outbox_url: 发件箱(Outbox)URL perform_full_suspension: 永久封禁 profile_url: 个人资料页面 URL diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 7296587a3..abbaa77d6 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -103,10 +103,6 @@ zh-HK: most_recent_activity: 最新活動 most_recent_ip: 最新 IP 位域 not_subscribed: 未訂閱 - order: - alphabetic: 按字母 - most_recent: 按時間 - title: 排序 outbox_url: 寄件箱(Outbox)URL perform_full_suspension: 完全停權 profile_url: 個人檔案 URL diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 9a7c2b293..b4c15f6f1 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -108,10 +108,6 @@ zh-TW: most_recent_activity: 最近活動 most_recent_ip: 最近 IP 位址 not_subscribed: 未訂閱 - order: - alphabetic: 按字母 - most_recent: 按時間 - title: 排序 outbox_url: 寄件箱 (Outbox) URL perform_full_suspension: 進行停權 profile_url: 個人檔案 URL diff --git a/db/migrate/20181116165755_create_account_stats.rb b/db/migrate/20181116165755_create_account_stats.rb new file mode 100644 index 000000000..a798e8166 --- /dev/null +++ b/db/migrate/20181116165755_create_account_stats.rb @@ -0,0 +1,12 @@ +class CreateAccountStats < ActiveRecord::Migration[5.2] + def change + create_table :account_stats do |t| + t.belongs_to :account, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true } + t.bigint :statuses_count, null: false, default: 0 + t.bigint :following_count, null: false, default: 0 + t.bigint :followers_count, null: false, default: 0 + + t.timestamps + end + end +end diff --git a/db/migrate/20181116173541_copy_account_stats.rb b/db/migrate/20181116173541_copy_account_stats.rb new file mode 100644 index 000000000..bb523fbbd --- /dev/null +++ b/db/migrate/20181116173541_copy_account_stats.rb @@ -0,0 +1,54 @@ +class CopyAccountStats < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + safety_assured do + if supports_upsert? + up_fast + else + up_slow + end + end + end + + def down + # Nothing + end + + private + + def supports_upsert? + version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i + version >= 90500 + end + + def up_fast + say 'Upsert is available, importing counters using the fast method' + + Account.unscoped.select('id').find_in_batches(batch_size: 5_000) do |accounts| + execute <<-SQL.squish + INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at) + SELECT id, statuses_count, following_count, followers_count, created_at, updated_at + FROM accounts + WHERE id IN (#{accounts.map(&:id).join(', ')}) + ON CONFLICT (account_id) DO UPDATE + SET statuses_count = EXCLUDED.statuses_count, following_count = EXCLUDED.following_count, followers_count = EXCLUDED.followers_count + SQL + end + end + + def up_slow + say 'Upsert is not available in PostgreSQL below 9.5, falling back to slow import of counters' + + # We cannot use bulk INSERT or overarching transactions here because of possible + # uniqueness violations that we need to skip over + Account.unscoped.select('id, statuses_count, following_count, followers_count, created_at, updated_at').find_each do |account| + begin + params = [[nil, account.id], [nil, account.statuses_count], [nil, account.following_count], [nil, account.followers_count], [nil, account.created_at], [nil, account.updated_at]] + exec_insert('INSERT INTO account_stats (account_id, statuses_count, following_count, followers_count, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6)', nil, params) + rescue ActiveRecord::RecordNotUnique + next + end + end + end +end diff --git a/db/migrate/20181127130500_identity_id_to_bigint.rb b/db/migrate/20181127130500_identity_id_to_bigint.rb new file mode 100644 index 000000000..5f388aca7 --- /dev/null +++ b/db/migrate/20181127130500_identity_id_to_bigint.rb @@ -0,0 +1,27 @@ +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class IdentityIdToBigint < ActiveRecord::Migration[5.2] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured do + change_column_type_concurrently :identities, :id, :bigint + cleanup_concurrent_column_type_change :identities, :id + + change_column_type_concurrently :identities, :user_id, :bigint + cleanup_concurrent_column_type_change :identities, :user_id + end + end + + def down + safety_assured do + change_column_type_concurrently :identities, :id, :integer + cleanup_concurrent_column_type_change :identities, :id + + change_column_type_concurrently :identities, :user_id, :integer + cleanup_concurrent_column_type_change :identities, :user_id + end + end +end diff --git a/db/post_migrate/20181116184611_copy_account_stats_cleanup.rb b/db/post_migrate/20181116184611_copy_account_stats_cleanup.rb new file mode 100644 index 000000000..9267e9b2c --- /dev/null +++ b/db/post_migrate/20181116184611_copy_account_stats_cleanup.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class CopyAccountStatsCleanup < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + safety_assured do + remove_column :accounts, :statuses_count, :integer, default: 0, null: false + remove_column :accounts, :following_count, :integer, default: 0, null: false + remove_column :accounts, :followers_count, :integer, default: 0, null: false + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 9e718615f..cd70b7ed2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_10_26_034033) do +ActiveRecord::Schema.define(version: 2018_11_27_130500) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -56,6 +56,16 @@ ActiveRecord::Schema.define(version: 2018_10_26_034033) do t.index ["target_account_id"], name: "index_account_pins_on_target_account_id" end + create_table "account_stats", force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "statuses_count", default: 0, null: false + t.bigint "following_count", default: 0, null: false + t.bigint "followers_count", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true + end + create_table "accounts", force: :cascade do |t| t.string "username", default: "", null: false t.string "domain" @@ -85,9 +95,6 @@ ActiveRecord::Schema.define(version: 2018_10_26_034033) do t.boolean "suspended", default: false, null: false t.boolean "locked", default: false, null: false t.string "header_remote_url", default: "", null: false - t.integer "statuses_count", default: 0, null: false - t.integer "followers_count", default: 0, null: false - t.integer "following_count", default: 0, null: false t.datetime "last_webfingered_at" t.string "inbox_url", default: "", null: false t.string "outbox_url", default: "", null: false @@ -238,12 +245,12 @@ ActiveRecord::Schema.define(version: 2018_10_26_034033) do t.index ["target_account_id"], name: "index_follows_on_target_account_id" end - create_table "identities", id: :serial, force: :cascade do |t| - t.integer "user_id" + create_table "identities", force: :cascade do |t| t.string "provider", default: "", null: false t.string "uid", default: "", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.bigint "user_id" t.index ["user_id"], name: "index_identities_on_user_id" end @@ -640,6 +647,7 @@ ActiveRecord::Schema.define(version: 2018_10_26_034033) do add_foreign_key "account_moderation_notes", "accounts", column: "target_account_id" add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade add_foreign_key "account_pins", "accounts", on_delete: :cascade + add_foreign_key "account_stats", "accounts", on_delete: :cascade add_foreign_key "accounts", "accounts", column: "moved_to_account_id", on_delete: :nullify add_foreign_key "admin_action_logs", "accounts", on_delete: :cascade add_foreign_key "backups", "users", on_delete: :nullify @@ -656,7 +664,7 @@ ActiveRecord::Schema.define(version: 2018_10_26_034033) do add_foreign_key "follow_requests", "accounts", name: "fk_76d644b0e7", on_delete: :cascade add_foreign_key "follows", "accounts", column: "target_account_id", name: "fk_745ca29eac", on_delete: :cascade add_foreign_key "follows", "accounts", name: "fk_32ed1b5560", on_delete: :cascade - add_foreign_key "identities", "users", on_delete: :cascade + add_foreign_key "identities", "users", name: "fk_bea040f377", on_delete: :cascade add_foreign_key "imports", "accounts", name: "fk_6db1b6e408", on_delete: :cascade add_foreign_key "invites", "users", on_delete: :cascade add_foreign_key "list_accounts", "accounts", on_delete: :cascade diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 142436c19..9f7870bcd 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -242,8 +242,9 @@ module Mastodon end culled += 1 - say('.', :green, false) + say('+', :green, false) else + account.touch # Touch account even during dry run to avoid getting the account into the window again say('.', nil, false) end end diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb index 99660dd1d..6152d5a09 100644 --- a/lib/mastodon/media_cli.rb +++ b/lib/mastodon/media_cli.rb @@ -50,10 +50,10 @@ module Mastodon else MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).reorder(nil).find_in_batches do |media_attachments| media_attachments.each do |m| + size += m.file_file_size || 0 Maintenance::UncacheMediaWorker.new.perform(m) unless options[:dry_run] options[:verbose] ? say(m.id) : say('.', :green, false) processed += 1 - size += m.file_file_size || 0 end end end diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 60c4ffaa6..bc4712d9a 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -13,7 +13,7 @@ module Mastodon end def patch - 1 + 2 end def pre diff --git a/nanobox/nginx-local.conf b/nanobox/nginx-local.conf index f56339cac..c0e883603 100644 --- a/nanobox/nginx-local.conf +++ b/nanobox/nginx-local.conf @@ -38,7 +38,7 @@ http { root /app/public; - client_max_body_size 8M; + client_max_body_size 80M; location / { try_files $uri @rails; diff --git a/nanobox/nginx-stream.conf.erb b/nanobox/nginx-stream.conf.erb index 2a047dd9f..12bcc8ca5 100644 --- a/nanobox/nginx-stream.conf.erb +++ b/nanobox/nginx-stream.conf.erb @@ -32,7 +32,7 @@ http { listen 8080; add_header Strict-Transport-Security "max-age=31536000"; - add_header Content-Security-Policy "style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'self'; img-src data: https:; media-src data: https:; connect-src 'self' wss://<%= ENV["LOCAL_DOMAIN"] %>; upgrade-insecure-requests"; + # add_header Content-Security-Policy "style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'self'; img-src data: https:; media-src data: https:; connect-src 'self' wss://<%= ENV["LOCAL_DOMAIN"] %>; upgrade-insecure-requests"; root /app/public; diff --git a/nanobox/nginx-web.conf.erb b/nanobox/nginx-web.conf.erb index 797201eab..d96f1bfc7 100644 --- a/nanobox/nginx-web.conf.erb +++ b/nanobox/nginx-web.conf.erb @@ -32,11 +32,11 @@ http { listen 8080; add_header Strict-Transport-Security "max-age=31536000"; - add_header Content-Security-Policy "style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'self'; img-src data: https:; media-src data: https:; connect-src 'self' wss://<%= ENV["LOCAL_DOMAIN"] %>; upgrade-insecure-requests"; + # add_header Content-Security-Policy "style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'self'; img-src data: https:; media-src data: https:; connect-src 'self' wss://<%= ENV["LOCAL_DOMAIN"] %>; upgrade-insecure-requests"; root /app/public; - client_max_body_size 8M; + client_max_body_size 80M; location / { try_files $uri @rails; diff --git a/spec/controllers/admin/accounts_controller_spec.rb b/spec/controllers/admin/accounts_controller_spec.rb index ae9e058c8..dbcad3c2d 100644 --- a/spec/controllers/admin/accounts_controller_spec.rb +++ b/spec/controllers/admin/accounts_controller_spec.rb @@ -24,8 +24,8 @@ RSpec.describe Admin::AccountsController, type: :controller do expect(h[:local]).to eq '1' expect(h[:remote]).to eq '1' expect(h[:by_domain]).to eq 'domain' + expect(h[:active]).to eq '1' expect(h[:silenced]).to eq '1' - expect(h[:alphabetic]).to eq '1' expect(h[:suspended]).to eq '1' expect(h[:username]).to eq 'username' expect(h[:display_name]).to eq 'display name' @@ -39,8 +39,8 @@ RSpec.describe Admin::AccountsController, type: :controller do local: '1', remote: '1', by_domain: 'domain', + active: '1', silenced: '1', - alphabetic: '1', suspended: '1', username: 'username', display_name: 'display name', diff --git a/spec/fabricators/account_stat_fabricator.rb b/spec/fabricators/account_stat_fabricator.rb new file mode 100644 index 000000000..2b06b4790 --- /dev/null +++ b/spec/fabricators/account_stat_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator(:account_stat) do + account nil + statuses_count "" + following_count "" + followers_count "" +end diff --git a/spec/lib/request_spec.rb b/spec/lib/request_spec.rb index 8cc5d90ce..2d300f18d 100644 --- a/spec/lib/request_spec.rb +++ b/spec/lib/request_spec.rb @@ -48,9 +48,11 @@ describe Request do end it 'executes a HTTP request when the first address is private' do - allow(Addrinfo).to receive(:foreach).with('example.com', nil, nil, :SOCK_STREAM) - .and_yield(Addrinfo.new(["AF_INET", 0, "example.com", "0.0.0.0"], :PF_INET, :SOCK_STREAM)) - .and_yield(Addrinfo.new(["AF_INET6", 0, "example.com", "2001:4860:4860::8844"], :PF_INET6, :SOCK_STREAM)) + resolver = double + + allow(resolver).to receive(:getaddresses).with('example.com').and_return(%w(0.0.0.0 2001:4860:4860::8844)) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) expect { |block| subject.perform &block }.to yield_control expect(a_request(:get, 'http://example.com')).to have_been_made.once @@ -81,9 +83,12 @@ describe Request do end it 'raises Mastodon::ValidationError' do - allow(Addrinfo).to receive(:foreach).with('example.com', nil, nil, :SOCK_STREAM) - .and_yield(Addrinfo.new(["AF_INET", 0, "example.com", "0.0.0.0"], :PF_INET, :SOCK_STREAM)) - .and_yield(Addrinfo.new(["AF_INET6", 0, "example.com", "2001:db8::face"], :PF_INET6, :SOCK_STREAM)) + resolver = double + + allow(resolver).to receive(:getaddresses).with('example.com').and_return(%w(0.0.0.0 2001:db8::face)) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + expect { subject.perform }.to raise_error Mastodon::ValidationError end end diff --git a/spec/models/account_filter_spec.rb b/spec/models/account_filter_spec.rb index 0a0252642..176a0eeac 100644 --- a/spec/models/account_filter_spec.rb +++ b/spec/models/account_filter_spec.rb @@ -2,10 +2,10 @@ require 'rails_helper' describe AccountFilter do describe 'with empty params' do - it 'defaults to recent account list' do + it 'defaults to recent local not-suspended account list' do filter = described_class.new({}) - expect(filter.results).to eq Account.recent + expect(filter.results).to eq Account.local.recent.without_suspended end end @@ -17,23 +17,6 @@ describe AccountFilter do end end - describe 'when an IP address is provided' do - it 'filters with IP when valid' do - filter = described_class.new(ip: '127.0.0.1') - allow(User).to receive(:with_recent_ip_address).and_return(User.none) - - filter.results - expect(User).to have_received(:with_recent_ip_address).with('127.0.0.1') - end - - it 'skips IP when invalid' do - filter = described_class.new(ip: '345.678.901.234') - expect(User).not_to receive(:with_recent_ip_address) - - filter.results - end - end - describe 'with valid params' do it 'combines filters on Account' do filter = described_class.new( @@ -60,13 +43,13 @@ describe AccountFilter do end describe 'that call account methods' do - %i(local remote silenced alphabetic suspended).each do |option| + %i(local remote silenced suspended).each do |option| it "delegates the #{option} option" do allow(Account).to receive(option).and_return(Account.none) filter = described_class.new({ option => true }) filter.results - expect(Account).to have_received(option) + expect(Account).to have_received(option).at_least(1) end end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 5baf70ef9..a43421b76 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -618,9 +618,15 @@ RSpec.describe Account, type: :model do expect(account).not_to model_have_error_on_field(:username) end - it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do + it 'is valid even if the username contains hyphens' do account = Fabricate.build(:account, domain: 'domain', username: 'the-doctor') account.valid? + expect(account).to_not model_have_error_on_field(:username) + end + + it 'is invalid if the username doesn\'t only contains letters, numbers, underscores and hyphens' do + account = Fabricate.build(:account, domain: 'domain', username: 'the doctor') + account.valid? expect(account).to model_have_error_on_field(:username) end @@ -754,24 +760,6 @@ RSpec.describe Account, type: :model do expect(Account.suspended).to match_array([account_1]) end end - - describe 'without_followers' do - it 'returns a relation of accounts without followers' do - account_1 = Fabricate(:account) - account_2 = Fabricate(:account) - Fabricate(:follow, account: account_1, target_account: account_2) - expect(Account.without_followers).to match_array([account_1]) - end - end - - describe 'with_followers' do - it 'returns a relation of accounts with followers' do - account_1 = Fabricate(:account) - account_2 = Fabricate(:account) - Fabricate(:follow, account: account_1, target_account: account_2) - expect(Account.with_followers).to match_array([account_2]) - end - end end context 'when is local' do diff --git a/spec/models/account_stat_spec.rb b/spec/models/account_stat_spec.rb new file mode 100644 index 000000000..a94185109 --- /dev/null +++ b/spec/models/account_stat_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe AccountStat, type: :model do +end diff --git a/spec/models/concerns/status_threading_concern_spec.rb b/spec/models/concerns/status_threading_concern_spec.rb index e5736a307..94c2d5fc2 100644 --- a/spec/models/concerns/status_threading_concern_spec.rb +++ b/spec/models/concerns/status_threading_concern_spec.rb @@ -118,5 +118,15 @@ describe StatusThreadingConcern do viewer.block_domain!('example.com') expect(status.descendants(4, viewer)).to_not include(reply2) end + + it 'promotes self-replies to the top while leaving the rest in order' do + a = Fabricate(:status, account: alice) + d = Fabricate(:status, account: jeff, thread: a) + e = Fabricate(:status, account: bob, thread: d) + c = Fabricate(:status, account: alice, thread: a) + f = Fabricate(:status, account: bob, thread: c) + + expect(a.descendants(20)).to eq [c, d, e, f] + end end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index c781f2a29..403eb8c33 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -101,7 +101,7 @@ RSpec.describe Notification, type: :model do before do allow(accounts_with_ids).to receive(:[]).with(stale_account1.id).and_return(account1) allow(accounts_with_ids).to receive(:[]).with(stale_account2.id).and_return(account2) - allow(Account).to receive_message_chain(:where, :map, :to_h).and_return(accounts_with_ids) + allow(Account).to receive_message_chain(:where, :includes, :each_with_object).and_return(accounts_with_ids) end let(:cached_items) do diff --git a/spec/models/status_stat_spec.rb b/spec/models/status_stat_spec.rb index 5e9351aff..af1a6f288 100644 --- a/spec/models/status_stat_spec.rb +++ b/spec/models/status_stat_spec.rb @@ -1,5 +1,4 @@ require 'rails_helper' RSpec.describe StatusStat, type: :model do - pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 8c6778edc..c82919597 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -89,18 +89,6 @@ RSpec.describe User, type: :model do expect(User.matches_email('specified')).to match_array([specified]) end end - - describe 'with_recent_ip_address' do - it 'returns a relation of users who is, or was at last time, online with the given IP address' do - specifieds = [ - Fabricate(:user, current_sign_in_ip: '0.0.0.42', last_sign_in_ip: '0.0.0.0'), - Fabricate(:user, current_sign_in_ip: nil, last_sign_in_ip: '0.0.0.42') - ] - Fabricate(:user, current_sign_in_ip: '0.0.0.0', last_sign_in_ip: '0.0.0.0') - - expect(User.with_recent_ip_address('0.0.0.42')).to match_array(specifieds) - end - end end let(:account) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/fetch_atom_service_spec.rb b/spec/services/fetch_atom_service_spec.rb index 30e5b0935..495540004 100644 --- a/spec/services/fetch_atom_service_spec.rb +++ b/spec/services/fetch_atom_service_spec.rb @@ -60,8 +60,15 @@ RSpec.describe FetchAtomService, type: :service do it { is_expected.to eq [url, { :prefetched_body => "" }, :ostatus] } end - context 'content_type is json' do - let(:content_type) { 'application/activity+json' } + context 'content_type is activity+json' do + let(:content_type) { 'application/activity+json; charset=utf-8' } + let(:body) { json } + + it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] } + end + + context 'content_type is ld+json with profile' do + let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' } let(:body) { json } it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] } diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 40fa8fbef..349ad861b 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -25,6 +25,19 @@ RSpec.describe PostStatusService, type: :service do expect(status.thread).to eq in_reply_to_status end + it 'creates response to the original status of boost' do + boosted_status = Fabricate(:status) + in_reply_to_status = Fabricate(:status, reblog: boosted_status) + account = Fabricate(:account) + text = "test status update" + + status = subject.call(account, text, in_reply_to_status) + + expect(status).to be_persisted + expect(status.text).to eq text + expect(status.thread).to eq boosted_status + end + it 'creates a sensitive status' do status = create_status_with_options(sensitive: true) |