diff options
author | pluralcafe-docker <git@plural.cafe> | 2018-12-17 01:28:17 +0000 |
---|---|---|
committer | pluralcafe-docker <git@plural.cafe> | 2018-12-17 01:28:17 +0000 |
commit | f290c5e2c337bb0aab82cb23653d4ff084ba8bbe (patch) | |
tree | 65712093ee4852a04fab5160cea341cb80f91747 | |
parent | 87f09d3bebd2d890ecad19d360fc687f1a57f3b0 (diff) | |
parent | 396c5dea87f259255f3676bb7b30f5cfdfec9d4e (diff) |
Merge branch 'glitch'
152 files changed, 1284 insertions, 428 deletions
diff --git a/Gemfile b/Gemfile index 680e71411..ee2de58c9 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.27', require: false +gem 'aws-sdk-s3', '~> 1.30', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' @@ -70,7 +70,7 @@ gem 'rack-attack', '~> 5.4' gem 'rack-cors', '~> 1.0', require: 'rack/cors' gem 'rails-i18n', '~> 5.1' gem 'rails-settings-cached', '~> 0.6' -gem 'redis', '~> 4.0', require: ['redis', 'redis/connection/hiredis'] +gem 'redis', '~> 4.1', require: ['redis', 'redis/connection/hiredis'] gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'rqrcode', '~> 0.10' gem 'sanitize', '~> 5.0' @@ -91,7 +91,7 @@ gem 'webpacker', '~> 3.5' gem 'webpush' gem 'json-ld', '~> 2.2' -gem 'json-ld-preloaded', '~> 2.2' +gem 'json-ld-preloaded', '~> 3.0' gem 'rdf-normalize', '~> 0.3' group :development, :test do @@ -125,7 +125,7 @@ group :development do gem 'better_errors', '~> 2.5' gem 'binding_of_caller', '~> 0.7' gem 'bullet', '~> 5.9' - gem 'letter_opener', '~> 1.4' + gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.3' gem 'memory_profiler' gem 'rubocop', '~> 0.61', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 3a6283686..a5dac694a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -76,8 +76,8 @@ GEM av (0.9.0) cocaine (~> 0.5.3) aws-eventstream (1.0.1) - aws-partitions (1.118.0) - aws-sdk-core (3.41.0) + aws-partitions (1.122.0) + aws-sdk-core (3.43.0) aws-eventstream (~> 1.0) aws-partitions (~> 1.0) aws-sigv4 (~> 1.0) @@ -85,7 +85,7 @@ GEM aws-sdk-kms (1.13.0) aws-sdk-core (~> 3, >= 3.39.0) aws-sigv4 (~> 1.0) - aws-sdk-s3 (1.27.0) + aws-sdk-s3 (1.30.0) aws-sdk-core (~> 3, >= 3.39.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.0) @@ -292,10 +292,10 @@ GEM json-ld (2.2.1) multi_json (~> 1.12) rdf (>= 2.2.8, < 4.0) - json-ld-preloaded (2.2.3) + json-ld-preloaded (3.0.0) json-ld (>= 2.2, < 4.0) multi_json (~> 1.12) - rdf (>= 2.2, < 4.0) + rdf (~> 3.0) jsonapi-renderer (0.2.0) jwt (2.1.0) kaminari (1.1.1) @@ -312,7 +312,7 @@ GEM kaminari-core (1.1.1) launchy (2.4.3) addressable (~> 2.3) - letter_opener (1.6.0) + letter_opener (1.7.0) launchy (~> 2.2) letter_opener_web (1.3.4) actionmailer (>= 3.2) @@ -473,12 +473,12 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.9.10) ffi (>= 0.5.0, < 2) - rdf (3.0.2) + rdf (3.0.7) hamster (~> 3.0) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.3.3) rdf (>= 2.2, < 4.0) - redis (4.0.3) + redis (4.1.0) redis-actionpack (5.0.2) actionpack (>= 4.0, < 6) redis-rack (>= 1, < 3) @@ -657,7 +657,7 @@ DEPENDENCIES active_record_query_trace (~> 1.5) addressable (~> 2.5) annotate (~> 2.7) - aws-sdk-s3 (~> 1.27) + aws-sdk-s3 (~> 1.30) better_errors (~> 2.5) binding_of_caller (~> 0.7) bootsnap (~> 1.3) @@ -700,9 +700,9 @@ DEPENDENCIES idn-ruby iso-639 json-ld (~> 2.2) - json-ld-preloaded (~> 2.2) + json-ld-preloaded (~> 3.0) kaminari (~> 1.1) - letter_opener (~> 1.4) + letter_opener (~> 1.7) letter_opener_web (~> 1.3) link_header (~> 0.0) lograge (~> 0.10) @@ -740,7 +740,7 @@ DEPENDENCIES rails-i18n (~> 5.1) rails-settings-cached (~> 0.6) rdf-normalize (~> 0.3) - redis (~> 4.0) + redis (~> 4.1) redis-namespace (~> 1.5) redis-rails (~> 5.0) rqrcode (~> 0.10) diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb index 96bf901a7..995da9c55 100644 --- a/app/controllers/activitypub/collections_controller.rb +++ b/app/controllers/activitypub/collections_controller.rb @@ -31,7 +31,7 @@ class ActivityPub::CollectionsController < Api::BaseController when 'featured' @account.pinned_statuses.count else - raise ActiveRecord::NotFound + raise ActiveRecord::RecordNotFound end end @@ -42,7 +42,7 @@ class ActivityPub::CollectionsController < Api::BaseController scope.merge!(@account.pinned_statuses) end else - raise ActiveRecord::NotFound + raise ActiveRecord::RecordNotFound end end diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index f155543ce..771302db8 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -2,7 +2,7 @@ module Admin class AccountsController < BaseController - before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :enable, :disable, :memorialize] + before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :remove_header, :enable, :disable, :memorialize] before_action :require_remote_account!, only: [:subscribe, :unsubscribe, :redownload] before_action :require_local_account!, only: [:enable, :disable, :memorialize] @@ -71,6 +71,17 @@ module Admin redirect_to admin_account_path(@account.id) end + def remove_header + authorize @account, :remove_header? + + @account.header = nil + @account.save! + + log_action :remove_header, @account.user + + redirect_to admin_account_path(@account.id) + end + private def set_account diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index 7be753c9b..bb923c185 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -28,6 +28,7 @@ module Admin @pam_enabled = ENV['PAM_ENABLED'] == 'true' @hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true' @trending_hashtags = TrendingTags.get(7) + @profile_directory = Setting.profile_directory end private diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index fe2720c48..76b3c3a2b 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -28,6 +28,7 @@ module Admin show_known_fediverse_at_about_page preview_sensitive_media custom_css + profile_directory ).freeze BOOLEAN_SETTINGS = %w( @@ -39,6 +40,7 @@ module Admin peers_api_enabled show_known_fediverse_at_about_page preview_sensitive_media + profile_directory ).freeze UPLOAD_SETTINGS = %w( diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index 3f2256566..e9f4f2cfa 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -18,7 +18,7 @@ module Admin def unhide authorize @tag, :unhide? - @tag.account_tag_stat.update!(hidden: true) + @tag.account_tag_stat.update!(hidden: false) redirect_to admin_tags_path(@filter_params) end diff --git a/app/controllers/concerns/remote_account_controller_concern.rb b/app/controllers/concerns/remote_account_controller_concern.rb deleted file mode 100644 index e17910642..000000000 --- a/app/controllers/concerns/remote_account_controller_concern.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module RemoteAccountControllerConcern - extend ActiveSupport::Concern - - included do - layout 'public' - before_action :set_account - before_action :check_account_suspension - end - - private - - def set_account - @account = Account.find_remote!(params[:acct]) - end - - def check_account_suspension - gone if @account.suspended? - end -end diff --git a/app/controllers/directories_controller.rb b/app/controllers/directories_controller.rb index 9d65361a6..1c8ebdac9 100644 --- a/app/controllers/directories_controller.rb +++ b/app/controllers/directories_controller.rb @@ -3,6 +3,7 @@ class DirectoriesController < ApplicationController layout 'public' + before_action :check_enabled before_action :set_instance_presenter before_action :set_tag, only: :show before_action :set_tags @@ -23,6 +24,10 @@ class DirectoriesController < ApplicationController use_pack 'share' end + def check_enabled + return not_found unless Setting.profile_directory + end + def set_tag @tag = Tag.discoverable.find_by!(name: params[:id].downcase) end diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb index 03c890a50..d3ac268d8 100644 --- a/app/controllers/settings/applications_controller.rb +++ b/app/controllers/settings/applications_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class Settings::ApplicationsController < Settings::BaseController - before_action :set_application, only: [:show, :update, :destroy, :regenerate] before_action :prepare_scopes, only: [:create, :update] diff --git a/app/controllers/settings/sessions_controller.rb b/app/controllers/settings/sessions_controller.rb index f235dd477..780ea64b4 100644 --- a/app/controllers/settings/sessions_controller.rb +++ b/app/controllers/settings/sessions_controller.rb @@ -3,7 +3,6 @@ # Intentionally does not inherit from BaseController class Settings::SessionsController < ApplicationController before_action :set_session, only: :destroy - before_action :set_body_classes def destroy @session.destroy! @@ -16,8 +15,4 @@ class Settings::SessionsController < ApplicationController def set_session @session = current_user.session_activations.find(params[:id]) end - - def set_body_classes - @body_classes = 'admin' - end end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index c28f0be6b..68cf8c75d 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -92,7 +92,7 @@ module Admin::ActionLogsHelper opposite_verbs?(log) ? 'negative' : 'positive' when :update, :reset_password, :disable_2fa, :memorialize, :change_email 'neutral' - when :demote, :silence, :disable, :suspend, :remove_avatar, :reopen + when :demote, :silence, :disable, :suspend, :remove_avatar, :remove_header, :reopen 'negative' when :destroy opposite_verbs?(log) ? 'positive' : 'negative' diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb index ba7c443c2..9b3f1380b 100644 --- a/app/helpers/home_helper.rb +++ b/app/helpers/home_helper.rb @@ -23,7 +23,7 @@ module HomeHelper else link_to(path || TagManager.instance.url_for(account), class: 'account__display-name') do content_tag(:div, class: 'account__avatar-wrapper') do - content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{account.avatar.url})") + content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{full_asset_url(current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url)})") end + content_tag(:span, class: 'display-name') do content_tag(:bdi) do diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 58f2b3786..d53d26924 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -116,7 +116,7 @@ export function directCompose(account, router) { }; }; -export function submitCompose() { +export function submitCompose(routerHistory) { return function (dispatch, getState) { let status = getState().getIn(['compose', 'text'], ''); let media = getState().getIn(['compose', 'media_attachments']); @@ -158,6 +158,12 @@ export function submitCompose() { } }; + if (routerHistory && routerHistory.location.pathname === '/statuses/new' + && window.history.state + && !getState().getIn(['compose', 'advanced_options', 'threaded_mode'])) { + routerHistory.goBack(); + } + insertIfOnline('home'); if (response.data.in_reply_to_id === null && response.data.visibility === 'public') { diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index ffd259d5f..d13d66516 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -54,11 +54,13 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { params.since_id = timeline.getIn(['items', 0]); } + const isLoadingRecent = !!params.since_id; + dispatch(expandTimelineRequest(timelineId, isLoadingMore)); api(getState).get(path, { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingMore)); + dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore)); done(); }).catch(error => { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); @@ -85,13 +87,14 @@ export function expandTimelineRequest(timeline, isLoadingMore) { }; }; -export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingMore) { +export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore) { return { type: TIMELINE_EXPAND_SUCCESS, timeline, statuses, next, partial, + isLoadingRecent, skipLoading: !isLoadingMore, }; }; diff --git a/app/javascript/flavours/glitch/components/scrollable_list.js b/app/javascript/flavours/glitch/components/scrollable_list.js index a05d49829..bd922462e 100644 --- a/app/javascript/flavours/glitch/components/scrollable_list.js +++ b/app/javascript/flavours/glitch/components/scrollable_list.js @@ -164,7 +164,7 @@ export default class ScrollableList extends PureComponent { const { fullscreen } = this.state; const childrenCount = React.Children.count(children); - const loadMore = (hasMore && childrenCount > 0 && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; + const loadMore = (hasMore && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; let scrollableArea = null; if (showLoading) { @@ -179,7 +179,7 @@ export default class ScrollableList extends PureComponent { </div> </div> ); - } else if (isLoading || childrenCount > 0 || !emptyMessage) { + } else if (isLoading || childrenCount > 0 || hasMore || !emptyMessage) { scrollableArea = ( <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}> <div role='feed' className='item-list'> @@ -204,7 +204,7 @@ export default class ScrollableList extends PureComponent { ); } else { scrollableArea = ( - <div className={classNames('scrollable', { fullscreen })} ref={this.setRef} style={{ flex: '1 1 auto', display: 'flex', flexDirection: 'column' }}> + <div className={classNames('scrollable scrollable--flex', { fullscreen })} ref={this.setRef}> {alwaysPrepend && prepend} <div className='empty-column-indicator'> diff --git a/app/javascript/flavours/glitch/components/status_list.js b/app/javascript/flavours/glitch/components/status_list.js index 68cd608b9..5249af76d 100644 --- a/app/javascript/flavours/glitch/components/status_list.js +++ b/app/javascript/flavours/glitch/components/status_list.js @@ -55,7 +55,7 @@ export default class StatusList extends ImmutablePureComponent { } handleLoadOlder = debounce(() => { - this.props.onLoadMore(this.props.statusIds.last()); + this.props.onLoadMore(this.props.statusIds.size > 0 ? this.props.statusIds.last() : undefined); }, 300, { leading: true }) _selectChild (index) { diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js index f0d36947d..dc5b1447b 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.js +++ b/app/javascript/flavours/glitch/features/account/components/header.js @@ -7,7 +7,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import Avatar from 'flavours/glitch/components/avatar'; import IconButton from 'flavours/glitch/components/icon_button'; -import { me } from 'flavours/glitch/util/initial_state'; +import { autoPlayGif, me } from 'flavours/glitch/util/initial_state'; import classNames from 'classnames'; const messages = defineMessages({ @@ -108,7 +108,7 @@ export default class Header extends ImmutablePureComponent { return ( <div className='account__header__wrapper'> - <div className={classNames('account__header', { inactive: !!account.get('moved') })} style={{ backgroundImage: `url(${account.get('header')})` }}> + <div className={classNames('account__header', { inactive: !!account.get('moved') })} style={{ backgroundImage: `url(${autoPlayGif ? account.get('header') : account.get('header_static')})` }}> <div> <a href={account.get('url')} diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js index 53b906d16..3f61af0e8 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/index.js +++ b/app/javascript/flavours/glitch/features/account_gallery/index.js @@ -35,7 +35,7 @@ class LoadMoreMedia extends ImmutablePureComponent { return ( <LoadMore disabled={this.props.disabled} - onLoadMore={this.handleLoadMore} + onClick={this.handleLoadMore} /> ); } @@ -67,7 +67,7 @@ export default class AccountGallery extends ImmutablePureComponent { handleScrollToBottom = () => { if (this.props.hasMore) { - this.handleLoadMore(this.props.medias.last().getIn(['status', 'id'])); + this.handleLoadMore(this.props.medias.size > 0 ? this.props.medias.last().getIn(['status', 'id']) : undefined); } } @@ -107,8 +107,8 @@ export default class AccountGallery extends ImmutablePureComponent { ); } - if (!isLoading && medias.size > 0 && hasMore) { - loadOlder = <LoadMore onClick={this.handleLoadOlder} />; + if (hasMore) { + loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />; } return ( @@ -116,14 +116,15 @@ export default class AccountGallery extends ImmutablePureComponent { <ColumnBackButton /> <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> + <div className='scrollable scrollable--flex' onScroll={this.handleScroll}> <HeaderContainer accountId={this.props.params.accountId} /> - <div className='account-gallery__container'> + <div role='feed' className='account-gallery__container'> {medias.map((media, index) => media === null ? ( <LoadMoreMedia key={'more:' + medias.getIn(index + 1, 'id')} maxId={index > 0 ? medias.getIn(index - 1, 'id') : null} + onLoadMore={this.handleLoadMore} /> ) : ( <MediaItem @@ -133,6 +134,12 @@ export default class AccountGallery extends ImmutablePureComponent { ))} {loadOlder} </div> + + {isLoading && medias.size === 0 && ( + <div className='scrollable__append'> + <LoadingIndicator /> + </div> + )} </div> </ScrollContainer> </Column> diff --git a/app/javascript/flavours/glitch/features/composer/index.js b/app/javascript/flavours/glitch/features/composer/index.js index 029b11a36..40eae1f53 100644 --- a/app/javascript/flavours/glitch/features/composer/index.js +++ b/app/javascript/flavours/glitch/features/composer/index.js @@ -159,15 +159,15 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onSelectSuggestion(position, token, suggestion) { dispatch(selectComposeSuggestion(position, token, suggestion)); }, - onMediaDescriptionConfirm() { + onMediaDescriptionConfirm(routerHistory) { dispatch(openModal('CONFIRM', { message: intl.formatMessage(messages.missingDescriptionMessage), confirm: intl.formatMessage(messages.missingDescriptionConfirm), - onConfirm: () => dispatch(submitCompose()), + onConfirm: () => dispatch(submitCompose(routerHistory)), })); }, - onSubmit() { - dispatch(submitCompose()); + onSubmit(routerHistory) { + dispatch(submitCompose(routerHistory)); }, onUndoUpload(id) { dispatch(undoUploadCompose(id)); @@ -256,9 +256,9 @@ const handlers = { inputs[firstWithoutDescription].focus(); } } - onMediaDescriptionConfirm(); + onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null); } else if (onSubmit) { - onSubmit(); + onSubmit(this.context.router ? this.context.router.history : null); } }, @@ -563,6 +563,10 @@ Composer.propTypes = { onMediaDescriptionConfirm: PropTypes.func, }; +Composer.contextTypes = { + router: PropTypes.object, +}; + // Connecting and export. export { Composer as WrappedComponent }; export default wrap(Composer, mapStateToProps, mapDispatchToProps, true); diff --git a/app/javascript/flavours/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js index 0b816e85e..b65c51f32 100644 --- a/app/javascript/flavours/glitch/reducers/notifications.js +++ b/app/javascript/flavours/glitch/reducers/notifications.js @@ -96,7 +96,7 @@ const expandNormalizedNotifications = (state, notifications, next) => { } if (!next) { - mutable.set('hasMore', true); + mutable.set('hasMore', false); } mutable.set('isLoading', false); diff --git a/app/javascript/flavours/glitch/reducers/timelines.js b/app/javascript/flavours/glitch/reducers/timelines.js index 844a0580f..a9eaae26e 100644 --- a/app/javascript/flavours/glitch/reducers/timelines.js +++ b/app/javascript/flavours/glitch/reducers/timelines.js @@ -25,10 +25,10 @@ const initialTimeline = ImmutableMap({ items: ImmutableList(), }); -const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial) => { +const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { mMap.set('isLoading', false); - if (!next) mMap.set('hasMore', false); + if (!next && !isLoadingRecent) mMap.set('hasMore', false); if (!statuses.isEmpty()) { mMap.update('items', ImmutableList(), oldIds => { @@ -116,7 +116,7 @@ export default function timelines(state = initialState, action) { case TIMELINE_EXPAND_FAIL: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false)); case TIMELINE_EXPAND_SUCCESS: - return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial); + return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent); case TIMELINE_UPDATE: return updateTimeline(state, action.timeline, fromJS(action.status)); case TIMELINE_DELETE: diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 4f96204f2..6132dd1ae 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -420,6 +420,7 @@ code { border: 1px solid darken($ui-base-color, 14%); border-radius: 4px; padding: 10px; + padding-right: 30px; height: 41px; } diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 86d83122f..1c7f14b5e 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -144,7 +144,11 @@ export function submitCompose(routerHistory) { if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0 && routerHistory) { routerHistory.push('/timelines/direct'); - } else if (response.data.visibility !== 'direct') { + } else if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) { + routerHistory.goBack(); + } + + if (response.data.visibility !== 'direct') { insertIfOnline('home'); } diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index 215adc4ea..6e7bd027c 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -74,12 +74,14 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { params.since_id = timeline.getIn(['items', 0]); } + const isLoadingRecent = !!params.since_id; + dispatch(expandTimelineRequest(timelineId, isLoadingMore)); api(getState).get(path, { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); - dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingMore)); + dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore)); done(); }).catch(error => { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); @@ -112,13 +114,14 @@ export function expandTimelineRequest(timeline, isLoadingMore) { }; }; -export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingMore) { +export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore) { return { type: TIMELINE_EXPAND_SUCCESS, timeline, statuses, next, partial, + isLoadingRecent, skipLoading: !isLoadingMore, }; }; diff --git a/app/javascript/mastodon/components/scrollable_list.js b/app/javascript/mastodon/components/scrollable_list.js index ab4e7d59c..774c8835d 100644 --- a/app/javascript/mastodon/components/scrollable_list.js +++ b/app/javascript/mastodon/components/scrollable_list.js @@ -30,7 +30,6 @@ export default class ScrollableList extends PureComponent { hasMore: PropTypes.bool, prepend: PropTypes.node, alwaysPrepend: PropTypes.bool, - alwaysShowScrollbar: PropTypes.bool, emptyMessage: PropTypes.node, children: PropTypes.node, }; @@ -206,11 +205,11 @@ export default class ScrollableList extends PureComponent { } render () { - const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, prepend, alwaysPrepend, alwaysShowScrollbar, emptyMessage, onLoadMore } = this.props; + const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, prepend, alwaysPrepend, emptyMessage, onLoadMore } = this.props; const { fullscreen } = this.state; const childrenCount = React.Children.count(children); - const loadMore = (hasMore && childrenCount > 0 && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; + const loadMore = (hasMore && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; let scrollableArea = null; if (showLoading) { @@ -225,7 +224,7 @@ export default class ScrollableList extends PureComponent { </div> </div> ); - } else if (isLoading || childrenCount > 0 || !emptyMessage) { + } else if (isLoading || childrenCount > 0 || hasMore || !emptyMessage) { scrollableArea = ( <div className={classNames('scrollable', { fullscreen })} ref={this.setRef} onMouseMove={this.handleMouseMove}> <div role='feed' className='item-list'> @@ -249,10 +248,8 @@ export default class ScrollableList extends PureComponent { </div> ); } else { - const scrollable = alwaysShowScrollbar; - scrollableArea = ( - <div className={classNames({ scrollable, fullscreen })} ref={this.setRef} style={{ flex: '1 1 auto', display: 'flex', flexDirection: 'column' }}> + <div className={classNames('scrollable scrollable--flex', { fullscreen })} ref={this.setRef}> {alwaysPrepend && prepend} <div className='empty-column-indicator'> diff --git a/app/javascript/mastodon/components/status_list.js b/app/javascript/mastodon/components/status_list.js index 01cc05661..e417f9a2b 100644 --- a/app/javascript/mastodon/components/status_list.js +++ b/app/javascript/mastodon/components/status_list.js @@ -55,7 +55,7 @@ export default class StatusList extends ImmutablePureComponent { } handleLoadOlder = debounce(() => { - this.props.onLoadMore(this.props.statusIds.last()); + this.props.onLoadMore(this.props.statusIds.size > 0 ? this.props.statusIds.last() : undefined); }, 300, { leading: true }) _selectChild (index) { diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 8604e7167..2ab25cde4 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -158,7 +158,7 @@ class Header extends ImmutablePureComponent { const badge = account.get('bot') ? (<div className='roles'><div className='account-role bot'><FormattedMessage id='account.badges.bot' defaultMessage='Bot' /></div></div>) : null; return ( - <div className={classNames('account__header', { inactive: !!account.get('moved') })} style={{ backgroundImage: `url(${account.get('header')})` }}> + <div className={classNames('account__header', { inactive: !!account.get('moved') })} style={{ backgroundImage: `url(${autoPlayGif ? account.get('header') : account.get('header_static')})` }}> <div> <Avatar account={account} /> diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js index 32cb5ebdc..0d66868ed 100644 --- a/app/javascript/mastodon/features/account_gallery/index.js +++ b/app/javascript/mastodon/features/account_gallery/index.js @@ -36,7 +36,7 @@ class LoadMoreMedia extends ImmutablePureComponent { return ( <LoadMore disabled={this.props.disabled} - onLoadMore={this.handleLoadMore} + onClick={this.handleLoadMore} /> ); } @@ -68,7 +68,7 @@ class AccountGallery extends ImmutablePureComponent { handleScrollToBottom = () => { if (this.props.hasMore) { - this.handleLoadMore(this.props.medias.last().getIn(['status', 'id'])); + this.handleLoadMore(this.props.medias.size > 0 ? this.props.medias.last().getIn(['status', 'id']) : undefined); } } @@ -103,8 +103,8 @@ class AccountGallery extends ImmutablePureComponent { ); } - if (!isLoading && medias.size > 0 && hasMore) { - loadOlder = <LoadMore onClick={this.handleLoadOlder} />; + if (hasMore) { + loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />; } return ( @@ -112,14 +112,15 @@ class AccountGallery extends ImmutablePureComponent { <ColumnBackButton /> <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> + <div className='scrollable scrollable--flex' onScroll={this.handleScroll}> <HeaderContainer accountId={this.props.params.accountId} /> - <div className='account-gallery__container'> + <div role='feed' className='account-gallery__container'> {medias.map((media, index) => media === null ? ( <LoadMoreMedia key={'more:' + medias.getIn(index + 1, 'id')} maxId={index > 0 ? medias.getIn(index - 1, 'id') : null} + onLoadMore={this.handleLoadMore} /> ) : ( <MediaItem @@ -129,6 +130,12 @@ class AccountGallery extends ImmutablePureComponent { ))} {loadOlder} </div> + + {isLoading && medias.size === 0 && ( + <div className='scrollable__append'> + <LoadingIndicator /> + </div> + )} </div> </ScrollContainer> </Column> diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js index b9ca7f3dd..ce56f270c 100644 --- a/app/javascript/mastodon/features/followers/index.js +++ b/app/javascript/mastodon/features/followers/index.js @@ -73,7 +73,6 @@ class Followers extends ImmutablePureComponent { shouldUpdateScroll={shouldUpdateScroll} prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} alwaysPrepend - alwaysShowScrollbar emptyMessage={emptyMessage} > {accountIds.map(id => diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js index b3e160240..bda0438a0 100644 --- a/app/javascript/mastodon/features/following/index.js +++ b/app/javascript/mastodon/features/following/index.js @@ -73,7 +73,6 @@ class Following extends ImmutablePureComponent { shouldUpdateScroll={shouldUpdateScroll} prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} alwaysPrepend - alwaysShowScrollbar emptyMessage={emptyMessage} > {accountIds.map(id => diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 2d73f84e0..798c7bfd8 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "اضافو أو حذف مِن القوائم", "account.badges.bot": "روبوت", "account.block": "حظر @{name}", "account.block_domain": "إخفاء كل شيئ قادم من إسم النطاق {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "يتابعك", "account.hide_reblogs": "إخفاء ترقيات @{name}", "account.link_verified_on": "تم التحقق مِن مالك هذا الرابط بتاريخ {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "وسائط", "account.mention": "أُذكُر @{name}", "account.moved_to": "{name} إنتقل إلى :", @@ -112,7 +113,7 @@ "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", "emoji_button.travel": "أماكن و أسفار", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "ليس هناك تبويقات!", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", "empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية !", "empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "و {additional}", + "hashtag.column_header.tag_mode.any": "أو {additional}", + "hashtag.column_header.tag_mode.none": "بدون {additional}", + "hashtag.column_settings.tag_mode.all": "كلها", + "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", + "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "أساسية", "home.column_settings.show_reblogs": "عرض الترقيات", @@ -321,7 +322,7 @@ "status.show_less_all": "طي الكل", "status.show_more": "أظهر المزيد", "status.show_more_all": "توسيع الكل", - "status.show_thread": "Show thread", + "status.show_thread": "الكشف عن المحادثة", "status.unmute_conversation": "فك الكتم عن المحادثة", "status.unpin": "فك التدبيس من الملف الشخصي", "suggestions.dismiss": "إلغاء الإقتراح", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index e22c46e9e..bb6d5c167 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -17,6 +17,7 @@ "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.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mentar a @{name}", "account.moved_to": "{name} has moved to:", @@ -208,7 +209,7 @@ "navigation_bar.follow_requests": "Solicitúes de siguimientu", "navigation_bar.info": "Tocante a esta instancia", "navigation_bar.keyboard_shortcuts": "Atayos", - "navigation_bar.lists": "Lists", + "navigation_bar.lists": "Llistes", "navigation_bar.logout": "Zarrar sesión", "navigation_bar.mutes": "Usuarios silenciaos", "navigation_bar.personal": "Personal", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 1a5a70593..c82fd8c81 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -17,6 +17,7 @@ "account.follows_you": "Твой последовател", "account.hide_reblogs": "Hide boosts from @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Споменаване", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index bc1fd8950..e4e9f183d 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Afegir o Treure de les llistes", "account.badges.bot": "Bot", "account.block": "Bloca @{name}", "account.block_domain": "Amaga-ho tot de {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}", + "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.", "account.media": "Media", "account.mention": "Esmentar @{name}", "account.moved_to": "{name} s'ha mogut a:", @@ -112,7 +113,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.account_timeline": "No hi ha toots aquí!", "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í.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "i {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sense {additional}", + "hashtag.column_settings.tag_mode.all": "Tots aquests", + "hashtag.column_settings.tag_mode.any": "Qualsevol d’aquests", + "hashtag.column_settings.tag_mode.none": "Cap d’aquests", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostrar impulsos", @@ -321,11 +322,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.show_thread": "Mostra el fil", "status.unmute_conversation": "Activar conversació", "status.unpin": "Deslliga del perfil", "suggestions.dismiss": "Descartar suggeriment", - "suggestions.header": "És possible que t’interessi…", + "suggestions.header": "És possible que estiguis interessat en…", "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 45bf0dc43..1d8d61a7a 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Aghjustà o toglie da e liste", "account.badges.bot": "Bot", "account.block": "Bluccà @{name}", "account.block_domain": "Piattà tuttu da {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}", + "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.", "account.media": "Media", "account.mention": "Mintuvà @{name}", "account.moved_to": "{name} hè partutu nant'à:", @@ -112,7 +113,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.account_timeline": "Nisun statutu quì!", "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ì.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "è {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "senza {additional}", + "hashtag.column_settings.tag_mode.all": "Tutti quessi", + "hashtag.column_settings.tag_mode.any": "Unu di quessi", + "hashtag.column_settings.tag_mode.none": "Nisunu di quessi", "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", @@ -321,7 +322,7 @@ "status.show_less_all": "Ripiegà tuttu", "status.show_more": "Slibrà", "status.show_more_all": "Slibrà tuttu", - "status.show_thread": "Show thread", + "status.show_thread": "Vede u filu", "status.unmute_conversation": "Ùn piattà più a cunversazione", "status.unpin": "Spuntarulà da u prufile", "suggestions.dismiss": "Righjittà a pruposta", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 80fab00c3..0d7f42656 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů", "account.badges.bot": "Robot", "account.block": "Zablokovat uživatele @{name}", "account.block_domain": "Skrýt vše z {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}", "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}", + "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", "account.media": "Média", "account.mention": "Zmínit uživatele @{name}", "account.moved_to": "{name} se přesunul/a na:", @@ -112,7 +113,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.account_timeline": "Tady nejsou žádné tooty!", "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.", @@ -138,13 +139,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", + "hashtag.column_header.tag_mode.all": "a {additional}", + "hashtag.column_header.tag_mode.any": "nebo {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.tag_mode.all": "Všechny z těchto", + "hashtag.column_settings.tag_mode.any": "Jakékoliv z těchto", + "hashtag.column_settings.tag_mode.none": "Žádné z těchto", + "hashtag.column_settings.tag_toggle": "Zahrnout v tomto sloupci dodatečné hashtagy", "home.column_settings.basic": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", @@ -173,7 +174,7 @@ "keyboard_shortcuts.profile": "k otevření autorova profilu", "keyboard_shortcuts.reply": "k odpovězení", "keyboard_shortcuts.requests": "k otevření seznamu požadavků o sledování", - "keyboard_shortcuts.search": "k zaměření na vyhledávání", + "keyboard_shortcuts.search": "k zaměření na hledání", "keyboard_shortcuts.start": "k otevření sloupce „začínáme“", "keyboard_shortcuts.toggle_hidden": "k zobrazení/skrytí textu za varováním o obsahu", "keyboard_shortcuts.toot": "k napsání úplně nového tootu", @@ -188,7 +189,7 @@ "lists.edit": "Upravit seznam", "lists.new.create": "Přidat seznam", "lists.new.title_placeholder": "Název nového seznamu", - "lists.search": "Hledejte mezi uživateli, které sledujete", + "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", "loading_indicator.label": "Načítám...", "media_gallery.toggle_visible": "Přepínat viditelnost", @@ -276,7 +277,7 @@ "report.submit": "Odeslat", "report.target": "Nahlásit {target}", "search.placeholder": "Hledat", - "search_popout.search_format": "Pokročilé vyhledávání", + "search_popout.search_format": "Pokročilé hledá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, zobrazovaných jmen a hashtagů.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "příspěvek", @@ -321,7 +322,7 @@ "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.show_thread": "Zobrazit vlákno", "status.unmute_conversation": "Přestat ignorovat konverzaci", "status.unpin": "Odepnout z profilu", "suggestions.dismiss": "Odmítnout návrh", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 4047b54d6..b1fb76934 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -17,6 +17,7 @@ "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Cyfryngau", "account.mention": "Crybwyll @{name}", "account.moved_to": "Mae @{name} wedi symud i:", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 133f9e696..8fb002ae8 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Tilføj eller fjern fra lister", "account.badges.bot": "Robot", "account.block": "Bloker @{name}", "account.block_domain": "Skjul alt fra {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}", "account.link_verified_on": "Ejerskabet af dette link blev tjekket den %{date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Medie", "account.mention": "Nævn @{name}", "account.moved_to": "{name} er flyttet til:", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 6bba6114e..5ac95122f 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -1,10 +1,10 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen", "account.badges.bot": "Bot", "account.block": "@{name} blockieren", "account.block_domain": "Alles von {domain} verstecken", "account.blocked": "Blockiert", - "account.direct": "Direct Message @{name}", + "account.direct": "Direktnachricht an @{name}", "account.disclaimer_full": "Das Profil wird möglicherweise unvollständig wiedergegeben.", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", @@ -17,6 +17,7 @@ "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", "account.link_verified_on": "Besitz dieses Links wurde geprüft am {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Medien", "account.mention": "@{name} erwähnen", "account.moved_to": "{name} ist umgezogen auf:", @@ -112,7 +113,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.account_timeline": "Keine Beiträge!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "und {additional}", + "hashtag.column_header.tag_mode.any": "oder {additional}", + "hashtag.column_header.tag_mode.none": "ohne {additional}", + "hashtag.column_settings.tag_mode.all": "All diese", + "hashtag.column_settings.tag_mode.any": "Eine von diesen", + "hashtag.column_settings.tag_mode.none": "Keine von diesen", "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", @@ -321,11 +322,11 @@ "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.show_thread": "Zeige Thread", "status.unmute_conversation": "Stummschaltung von Thread aufheben", "status.unpin": "Vom Profil lösen", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Hinweis ausblenden", + "suggestions.header": "Du bist vielleicht interessiert in…", "tabs_bar.federated_timeline": "Föderation", "tabs_bar.home": "Startseite", "tabs_bar.local_timeline": "Lokal", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index 57988fbd8..1015aba1b 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -644,6 +644,10 @@ "id": "account.link_verified_on" }, { + "defaultMessage": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "id": "account.locked_info" + }, + { "defaultMessage": "Follows you", "id": "account.follows_you" }, diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index ba332be3f..468a4c728 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Προσθήκη ή αφαίρεση από λίστες", "account.badges.bot": "Μποτ", "account.block": "Απόκλεισε τον/την @{name}", "account.block_domain": "Απόκρυψε τα πάντα από το {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", "account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου εκλέχθηκε την {date}", + "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού είναι κλειδωμένη. Ο ιδιοκτήτης επιβεβαιώνει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.", "account.media": "Πολυμέσα", "account.mention": "Ανάφερε @{name}", "account.moved_to": "{name} μεταφέρθηκε στο:", @@ -112,7 +113,7 @@ "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", - "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline": "Δεν έχει τουτ εδώ!", "empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.", "empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσιο παραμύθι ν' αρχινίσει!", "empty_column.direct": "Δεν έχεις προσωπικά μηνύματα ακόμα. Όταν στείλεις ή λάβεις κανένα, θα εμφανιστεί εδώ.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "και {additional}", + "hashtag.column_header.tag_mode.any": "ή {additional}", + "hashtag.column_header.tag_mode.none": "χωρίς {additional}", + "hashtag.column_settings.tag_mode.all": "Όλα αυτα", + "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", + "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Βασικά", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", @@ -233,7 +234,7 @@ "notifications.group": "{count} ειδοποιήσεις", "onboarding.done": "Όλα έτοιμα", "onboarding.next": "Επόμενο", - "onboarding.page_five.public_timelines": "Η τοπική ροή δείχνει τις δημόσιες δημοσιεύσεις από όσους εδρεύουν στον κόμβο {domain}. Η ομοσπονδιακή ροή δείχνει τις δημόσιες δημοσιεύσεις εκείνων που οι χρήστες του {domain} ακολουθούν. Αυτές οι είναι Δημόσιες Ροές, ένας ωραίος τρόπος να ανακαλύψεις καινούριους ανθρώπους.", + "onboarding.page_five.public_timelines": "Η τοπική ροή δείχνει τις δημόσιες δημοσιεύσεις από όσους εδρεύουν στον κόμβο {domain}. Η ομοσπονδιακή ροή δείχνει τις δημόσιες δημοσιεύσεις εκείνων που οι χρήστες του {domain} ακολουθούν. Αυτές είναι οι Δημόσιες Ροές, ένας ωραίος τρόπος να ανακαλύψεις καινούριους ανθρώπους.", "onboarding.page_four.home": "Η αρχική ροή δείχνει καταστάσεις από ανθρώπους που ακολουθείς.", "onboarding.page_four.notifications": "Η στήλη ειδοποιήσεων δείχνει πότε κάποιος αλληλεπιδράει μαζί σου.", "onboarding.page_one.federation": "Το Mastodon είναι ένα δίκτυο ανεξάρτητων εξυπηρετητών (servers) που συνεργάζονται δημιουργώντας ένα μεγαλύτερο κοινωνικό δίκτυο. Τους εξυπηρετητές αυτούς τους λέμε κόμβους.", @@ -321,11 +322,11 @@ "status.show_less_all": "Δείξε λιγότερα για όλα", "status.show_more": "Δείξε περισσότερα", "status.show_more_all": "Δείξε περισσότερα για όλα", - "status.show_thread": "Show thread", + "status.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/eo.json b/app/javascript/mastodon/locales/eo.json index f7a303cdd..37304d8d1 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", "account.badges.bot": "Roboto", "account.block": "Bloki @{name}", "account.block_domain": "Kaŝi ĉion de {domain}", @@ -11,12 +11,13 @@ "account.endorse": "Montri en profilo", "account.follow": "Sekvi", "account.followers": "Sekvantoj", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Neniu ankoraŭ sekvas ĉi tiun uzanton.", "account.follows": "Sekvatoj", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Ĉi tiu uzanto ne ankoraŭ sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.link_verified_on": "Proprieto de ĉi tiu ligilo estis kontrolita je {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Aŭdovidaĵoj", "account.mention": "Mencii @{name}", "account.moved_to": "{name} moviĝis al:", @@ -91,9 +92,9 @@ "confirmations.mute.confirm": "Silentigi", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", - "confirmations.redraft.message": "Ĉu vi certas, ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Vi perdos ĉiujn respondojn, diskonigojn kaj stelumojn ligitajn al ĝi.", - "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.redraft.message": "Ĉu vi certas ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos orfigitaj.", + "confirmations.reply.confirm": "Respondi", + "confirmations.reply.message": "Respondi nun anstataŭigos la mesaĝon ke vi aktuale skribas. Ĉu vi certas ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", "confirmations.unfollow.message": "Ĉu vi certas, ke vi volas ĉesi sekvi {name}?", "embed.instructions": "Enkorpigu ĉi tiun mesaĝon en vian retejon per kopio de la suba kodo.", @@ -112,20 +113,20 @@ "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.account_timeline": "Neniu mesaĝo ĉi tie!", + "empty_column.blocks": "Vi ne ankoraŭ blokis iun uzanton.", "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.", - "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": "Ankoraŭ estas neniu domajno blokita.", + "empty_column.favourited_statuses": "Vi ne ankoraŭ havas iun stelumitan mesaĝon. Kiam vi stelumos iun, tiu aperos ĉi tie.", + "empty_column.favourites": "Neniu ankoraŭ stelumis ĉi tiun mesaĝon. Kiam iu faros ĝin, tiu aperos ĉi tie.", + "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", "empty_column.home": "Via hejma tempolinio estas malplena! Vizitu {public} aŭ uzu la serĉilon por renkonti aliajn uzantojn.", "empty_column.home.public_timeline": "la publikan tempolinion", "empty_column.list": "Ankoraŭ estas nenio en ĉi tiu listo. Kiam membroj de ĉi tiu listo afiŝos novajn mesaĝojn, ili aperos ĉi tie.", "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.mutes": "Vi ne ankoraŭ silentigis iun uzanton.", "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj nodoj por plenigi la publikan tempolinion", "follow_request.authorize": "Rajtigi", @@ -141,40 +142,40 @@ "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_mode.all": "Ĉiuj", + "hashtag.column_settings.tag_mode.any": "Iu ajn", + "hashtag.column_settings.tag_mode.none": "Neniu", "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", "keyboard_shortcuts.back": "por reveni", - "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.blocked": "por malfermi la liston de blokitaj uzantoj", "keyboard_shortcuts.boost": "por diskonigi", "keyboard_shortcuts.column": "por fokusigi mesaĝon en unu el la kolumnoj", "keyboard_shortcuts.compose": "por fokusigi la tekstujon", "keyboard_shortcuts.description": "Priskribo", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "por malfermi la kolumnon de rektaj mesaĝoj", "keyboard_shortcuts.down": "por iri suben en la listo", "keyboard_shortcuts.enter": "por malfermi mesaĝon", "keyboard_shortcuts.favourite": "por stelumi", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.favourites": "por malfermi la liston de stelumoj", + "keyboard_shortcuts.federated": "por malfermi la frataran tempolinion", "keyboard_shortcuts.heading": "Klavaraj mallongigoj", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "por malfermi la hejman tempolinion", "keyboard_shortcuts.hotkey": "Rapidklavo", "keyboard_shortcuts.legend": "por montri ĉi tiun noton", - "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.local": "por malfermi la lokan tempolinion", "keyboard_shortcuts.mention": "por mencii la aŭtoron", - "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.muted": "por malfermi la liston de silentigitaj uzantoj", + "keyboard_shortcuts.my_profile": "por malfermi vian profilon", + "keyboard_shortcuts.notifications": "por malfermi la kolumnon de sciigoj", + "keyboard_shortcuts.pinned": "por malfermi la liston de alpinglitaj mesaĝoj", "keyboard_shortcuts.profile": "por malfermi la profilon de la aŭtoro", "keyboard_shortcuts.reply": "por respondi", - "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.requests": "por malfermi la liston de petoj de sekvado", "keyboard_shortcuts.search": "por fokusigi la serĉilon", - "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.start": "por malfermi la kolumnon «por komenci»", "keyboard_shortcuts.toggle_hidden": "por montri/kaŝi tekston malantaŭ enhava averto", "keyboard_shortcuts.toot": "por komenci tute novan mesaĝon", "keyboard_shortcuts.unfocus": "por malfokusigi la tekstujon aŭ la serĉilon", @@ -195,10 +196,10 @@ "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn el ĉi tiu uzanto?", - "navigation_bar.apps": "Mobile apps", + "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.community_timeline": "Loka tempolinio", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "Redakti novan mesaĝon", "navigation_bar.direct": "Rektaj mesaĝoj", "navigation_bar.discover": "Esplori", "navigation_bar.domain_blocks": "Kaŝitaj domajnoj", @@ -291,7 +292,7 @@ "status.cancel_reblog_private": "Eksdiskonigi", "status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas", "status.delete": "Forigi", - "status.detailed_status": "Detailed conversation view", + "status.detailed_status": "Detala konversacia vido", "status.direct": "Rekte mesaĝi @{name}", "status.embed": "Enkorpigi", "status.favourite": "Stelumi", @@ -305,11 +306,11 @@ "status.open": "Grandigi", "status.pin": "Alpingli profile", "status.pinned": "Alpinglita mesaĝo", - "status.read_more": "Read more", + "status.read_more": "Legi pli", "status.reblog": "Diskonigi", "status.reblog_private": "Diskonigi al la originala atentaro", "status.reblogged_by": "{name} diskonigis", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "Neniu ankoraŭ diskonigis ĉi tiun mesaĝon. Kiam iu faris ĝin, tiu aperos ĉi tie.", "status.redraft": "Forigi kaj reskribi", "status.reply": "Respondi", "status.replyAll": "Respondi al la fadeno", @@ -321,11 +322,11 @@ "status.show_less_all": "Malgrandigi ĉiujn", "status.show_more": "Grandigi", "status.show_more_all": "Grandigi ĉiujn", - "status.show_thread": "Show thread", + "status.show_thread": "Montri fadenon", "status.unmute_conversation": "Malsilentigi konversacion", "status.unpin": "Depingli de profilo", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Forigi la proponon", + "suggestions.header": "Vi povus interesiĝi pri…", "tabs_bar.federated_timeline": "Fratara tempolinio", "tabs_bar.home": "Hejmo", "tabs_bar.local_timeline": "Loka tempolinio", @@ -334,7 +335,7 @@ "trends.count_by_accounts": "{count} {rawCount, pluraj, unu {person} alia(j) {people}} parolas", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", "upload_area.title": "Altreni kaj lasi por alŝuti", - "upload_button.label": "Aldoni aŭdovidaĵon", + "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_form.description": "Priskribi por misvidantaj homoj", "upload_form.focus": "Stuci", "upload_form.undo": "Forigi", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 7b8cfe3f3..e05d7e010 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -17,6 +17,7 @@ "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mencionar a @{name}", "account.moved_to": "{name} se ha mudado a:", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 8ce3b9ba3..de4197604 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik", "account.badges.bot": "Bot", "account.block": "Blokeatu @{name}", "account.block_domain": "Ezkutatu {domain} domeinuko guztia", @@ -17,6 +17,7 @@ "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}", + "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.", "account.media": "Media", "account.mention": "Aipatu @{name}", "account.moved_to": "{name} hona lekualdatu da:", @@ -112,7 +113,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.account_timeline": "Ez dago toot-ik hemen!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "eta {osagarria}", + "hashtag.column_header.tag_mode.any": "edo {osagarria}", + "hashtag.column_header.tag_mode.none": "gabe {osagarria}", + "hashtag.column_settings.tag_mode.all": "Hauetako guztiak", + "hashtag.column_settings.tag_mode.any": "Hautako edozein", + "hashtag.column_settings.tag_mode.none": "Hauetako bat ere ez", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Oinarrizkoa", "home.column_settings.show_reblogs": "Erakutsi bultzadak", @@ -315,13 +316,13 @@ "status.replyAll": "Erantzun harian", "status.report": "Salatu @{name}", "status.sensitive_toggle": "Egin klik ikusteko", - "status.sensitive_warning": "Eduki hunkigarria", + "status.sensitive_warning": "Kontuz: Eduki hunkigarria", "status.share": "Partekatu", "status.show_less": "Erakutsi gutxiago", "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.show_thread": "Erakutsi haria", "status.unmute_conversation": "Desmututu elkarrizketa", "status.unpin": "Desfinkatu profiletik", "suggestions.dismiss": "Errefusatu proposamena", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index befdb3804..4e00b4f2f 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -17,6 +17,7 @@ "account.follows_you": "پیگیر شماست", "account.hide_reblogs": "پنهان کردن بازبوقهای @{name}", "account.link_verified_on": "مالکیت این نشانی در تایخ {date} بررسی شد", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "عکس و ویدیو", "account.mention": "نامبردن از @{name}", "account.moved_to": "{name} منتقل شده است به:", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index bb1725533..a9de659e0 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -17,6 +17,7 @@ "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mainitse @{name}", "account.moved_to": "{name} on muuttanut instanssiin:", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 85cafb18c..38fe07abd 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Ajouter ou retirer des listes", "account.badges.bot": "Bot", "account.block": "Bloquer @{name}", "account.block_domain": "Tout masquer venant de {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", + "account.locked_info": "Ce compte est verrouillé. Son propriétaire approuve manuellement qui peut le ou la suivre.", "account.media": "Média", "account.mention": "Mentionner", "account.moved_to": "{name} a déménagé vers :", @@ -112,7 +113,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.account_timeline": "Aucun pouet ici !", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "et {additional}", + "hashtag.column_header.tag_mode.any": "ou {additional}", + "hashtag.column_header.tag_mode.none": "sans {additional}", + "hashtag.column_settings.tag_mode.all": "Tous ces éléments", + "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", + "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", @@ -321,7 +322,7 @@ "status.show_less_all": "Tout replier", "status.show_more": "Déplier", "status.show_more_all": "Tout déplier", - "status.show_thread": "Show thread", + "status.show_thread": "Afficher le fil", "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", "suggestions.dismiss": "Rejeter la suggestion", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index f2a8aec3a..02c27602f 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Engadir ou Eliminar das listas", "account.badges.bot": "Bot", "account.block": "Bloquear @{name}", "account.block_domain": "Ocultar calquer contido de {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Séguena", "account.hide_reblogs": "Ocultar repeticións de @{name}", "account.link_verified_on": "A propiedade de esta ligazón foi comprobada en {date}", + "account.locked_info": "O estado da intimidade de esta conta estableceuse en pechado. A persoa dona da conta revisa quen pode seguila.", "account.media": "Medios", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} marchou a:", @@ -99,7 +100,7 @@ "embed.instructions": "Copie o código inferior para incrustar no seu sitio web este estado.", "embed.preview": "Así será mostrado:", "emoji_button.activity": "Actividade", - "emoji_button.custom": "Personalizado", + "emoji_button.custom": "Persoalizado", "emoji_button.flags": "Marcas", "emoji_button.food": "Comida e Bebida", "emoji_button.label": "Insertar emoji", @@ -112,7 +113,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.account_timeline": "Sen toots por aquí!", "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í.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "ou {additional}", + "hashtag.column_header.tag_mode.none": "sen {additional}", + "hashtag.column_settings.tag_mode.all": "Todos estos", + "hashtag.column_settings.tag_mode.any": "Calquera de estos", + "hashtag.column_settings.tag_mode.none": "Ningún de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar repeticións", @@ -211,7 +212,7 @@ "navigation_bar.lists": "Listas", "navigation_bar.logout": "Sair", "navigation_bar.mutes": "Usuarias acaladas", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Persoal", "navigation_bar.pins": "Mensaxes fixadas", "navigation_bar.preferences": "Preferencias", "navigation_bar.public_timeline": "Liña temporal federada", @@ -321,7 +322,7 @@ "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.show_thread": "Mostrar fío", "status.unmute_conversation": "Non acalar a conversa", "status.unpin": "Despegar do perfil", "suggestions.dismiss": "Rexeitar suxestión", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 3bcd825ae..9c891e2e8 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -17,6 +17,7 @@ "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "מדיה", "account.mention": "אזכור של @{name}", "account.moved_to": "החשבון {name} הועבר אל:", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 33d2b3e37..ef6d482c1 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -17,6 +17,7 @@ "account.follows_you": "te slijedi", "account.hide_reblogs": "Hide boosts from @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Spomeni @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 51d65f98c..85a513904 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -17,6 +17,7 @@ "account.follows_you": "Követnek téged", "account.hide_reblogs": "Rejtsd el a tülkölést @{name}-tól/től", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Média", "account.mention": "@{name} említése", "account.moved_to": "{name} átköltözött:", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 76c96ff03..63a93b156 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -17,6 +17,7 @@ "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Մեդիա", "account.mention": "Նշել @{name}֊ին", "account.moved_to": "{name}֊ը տեղափոխվել է՝", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 5280d96c2..eed96f869 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -17,6 +17,7 @@ "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Balasan @{name}", "account.moved_to": "{name} telah pindah ke:", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index a8a162d82..a31cc12cb 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -17,6 +17,7 @@ "account.follows_you": "Sequas tu", "account.hide_reblogs": "Hide boosts from @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 7907909c5..2c1b59be9 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Aggiungi o togli dalle liste", "account.badges.bot": "Bot", "account.block": "Blocca @{name}", "account.block_domain": "Nascondi tutto da {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", + "account.locked_info": "Il livello di privacy di questo account è impostato a \"bloccato\". Il proprietario esamina manualmente le richieste di seguirlo.", "account.media": "Media", "account.mention": "Menziona @{name}", "account.moved_to": "{name} si è trasferito su:", @@ -112,7 +113,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.account_timeline": "Non ci sono toot qui!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "senza {additional}", + "hashtag.column_settings.tag_mode.all": "Tutti questi", + "hashtag.column_settings.tag_mode.any": "Uno o più di questi", + "hashtag.column_settings.tag_mode.none": "Nessuno di questi", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Semplice", "home.column_settings.show_reblogs": "Mostra post condivisi", @@ -321,7 +322,7 @@ "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.show_thread": "Mostra thread", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", "suggestions.dismiss": "Elimina suggerimento", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 06fe71e6b..4e8862201 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -17,6 +17,7 @@ "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", "account.link_verified_on": "このリンクの所有権は{date}に確認されました", + "account.locked_info": "このアカウントは承認制に設定されています。フォローするには所有者の確認が必要です。", "account.media": "メディア", "account.mention": "@{name}さんにトゥート", "account.moved_to": "{name}さんは引っ越しました:", @@ -139,7 +140,7 @@ "getting_started.find_friends": "Twitterの友達を探す", "getting_started.heading": "スタート", "getting_started.invite": "招待", - "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub({github})から開発に参加したり、問題を報告したりできます。", + "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub ( {github} ) から開発に参加したり、問題を報告したりできます。", "getting_started.security": "セキュリティ", "getting_started.terms": "プライバシーポリシー", "hashtag.column_header.tag_mode.all": "と {additional}", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index cbb639136..07129594f 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -17,6 +17,7 @@ "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "მედია", "account.mention": "ასახელეთ @{name}", "account.moved_to": "{name} გადავიდა:", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index cd481b9e5..b445823e7 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -17,6 +17,7 @@ "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "미디어", "account.mention": "@{name}에게 글쓰기", "account.moved_to": "{name}는 계정을 이동했습니다:", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 3e243b743..d5176b01d 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -17,6 +17,7 @@ "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.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index d8dea93d6..0af479355 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Toevoegen of verwijderen vanuit lijsten", "account.badges.bot": "Bot", "account.block": "Blokkeer @{name}", "account.block_domain": "Verberg alles van {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Volgt jou", "account.hide_reblogs": "Verberg boosts van @{name}", "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}", + "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie hen kan volgen.", "account.media": "Media", "account.mention": "Vermeld @{name}", "account.moved_to": "{name} is verhuisd naar:", @@ -112,7 +113,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.account_timeline": "Hier zijn geen toots!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "en {additional}", + "hashtag.column_header.tag_mode.any": "of {additional}", + "hashtag.column_header.tag_mode.none": "zonder {additional}", + "hashtag.column_settings.tag_mode.all": "Allemaal", + "hashtag.column_settings.tag_mode.any": "Een van deze", + "hashtag.column_settings.tag_mode.none": "Geen van deze", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", @@ -209,7 +210,7 @@ "navigation_bar.info": "Over deze server", "navigation_bar.keyboard_shortcuts": "Sneltoetsen", "navigation_bar.lists": "Lijsten", - "navigation_bar.logout": "Afmelden", + "navigation_bar.logout": "Uitloggen", "navigation_bar.mutes": "Genegeerde gebruikers", "navigation_bar.personal": "Persoonlijk", "navigation_bar.pins": "Vastgezette toots", @@ -321,7 +322,7 @@ "status.show_less_all": "Alles minder tonen", "status.show_more": "Meer tonen", "status.show_more_all": "Alles meer tonen", - "status.show_thread": "Show thread", + "status.show_thread": "Gesprek tonen", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", "suggestions.dismiss": "Suggestie verwerpen", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index ea4e76de4..39c236564 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -17,6 +17,7 @@ "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Nevn @{name}", "account.moved_to": "{name} har flyttet til:", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index a94e0336d..072781e77 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -150,32 +150,32 @@ "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", "keyboard_shortcuts.back": "anar enrèire", - "keyboard_shortcuts.blocked": "per dobrir la lista d’utilizaires blocats", + "keyboard_shortcuts.blocked": "dobrir la lista d’utilizaires blocats", "keyboard_shortcuts.boost": "partejar", "keyboard_shortcuts.column": "centrar un estatut a una colomna", "keyboard_shortcuts.compose": "anar al camp tèxte", - "keyboard_shortcuts.description": "Descripcion", - "keyboard_shortcuts.direct": "per dobrir la colomna de messatges dirèctes", + "keyboard_shortcuts.description": "descripcion", + "keyboard_shortcuts.direct": "dobrir la colomna de messatges dirèctes", "keyboard_shortcuts.down": "far davalar dins la lista", "keyboard_shortcuts.enter": "dobrir los estatuts", "keyboard_shortcuts.favourite": "apondre als favorits", - "keyboard_shortcuts.favourites": "per dobrir la lista de favorits", - "keyboard_shortcuts.federated": "per dobrir lo flux public global", + "keyboard_shortcuts.favourites": "dobrir la lista de favorits", + "keyboard_shortcuts.federated": "dobrir lo flux public global", "keyboard_shortcuts.heading": "Acorchis clavièr", - "keyboard_shortcuts.home": "per dobrir lo flux public local", + "keyboard_shortcuts.home": "dobrir lo flux public local", "keyboard_shortcuts.hotkey": "Acorchis", "keyboard_shortcuts.legend": "mostrar aquesta legenda", - "keyboard_shortcuts.local": "per dobrir lo flux public local", + "keyboard_shortcuts.local": "dobrir lo flux public local", "keyboard_shortcuts.mention": "mencionar l’autor", - "keyboard_shortcuts.muted": "per dobrir la lista dels utilizaires silenciats", - "keyboard_shortcuts.my_profile": "per dobrir vòstre perfil", - "keyboard_shortcuts.notifications": "per dobrir la colomna de notificacions", - "keyboard_shortcuts.pinned": "per dobrir la lista dels tuts penjats", - "keyboard_shortcuts.profile": "per dobrir lo perfil de l’autor", + "keyboard_shortcuts.muted": "dobrir la lista dels utilizaires silenciats", + "keyboard_shortcuts.my_profile": "dobrir vòstre perfil", + "keyboard_shortcuts.notifications": "dobrir la colomna de notificacions", + "keyboard_shortcuts.pinned": "dobrir la lista dels tuts penjats", + "keyboard_shortcuts.profile": "dobrir lo perfil de l’autor", "keyboard_shortcuts.reply": "respondre", - "keyboard_shortcuts.requests": "per dorbir la lista de demanda d’abonament", + "keyboard_shortcuts.requests": "dorbir la lista de demanda d’abonament", "keyboard_shortcuts.search": "anar a la recèrca", - "keyboard_shortcuts.start": "per dobrir la colomna «Per començar»", + "keyboard_shortcuts.start": "dobrir la colomna « Per començar »", "keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments", "keyboard_shortcuts.toot": "començar un estatut tot novèl", "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 61811c53d..31c581aad 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Adicionar ou remover de listas", "account.badges.bot": "Robô", "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo de {domain}", @@ -17,6 +17,7 @@ "account.follows_you": "Segue você", "account.hide_reblogs": "Esconder compartilhamentos de @{name}", "account.link_verified_on": "A posse desse link foi verificada em {date}", + "account.locked_info": "Essa conta está trancada. Se você a seguir sua solicitação será revisada manualmente.", "account.media": "Mídia", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} se mudou para:", @@ -112,7 +113,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.account_timeline": "Não há toots aqui!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "e {additional}", + "hashtag.column_header.tag_mode.any": "ou {additional}", + "hashtag.column_header.tag_mode.none": "sem {additional}", + "hashtag.column_settings.tag_mode.all": "Todas essas", + "hashtag.column_settings.tag_mode.any": "Qualquer uma dessas", + "hashtag.column_settings.tag_mode.none": "Nenhuma dessas", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar compartilhamentos", @@ -321,11 +322,11 @@ "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.show_thread": "Mostrar sequência", "status.unmute_conversation": "Desativar silêncio desta conversa", "status.unpin": "Desafixar do perfil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Ignorar a sugestão", + "suggestions.header": "Você pode se interessar por…", "tabs_bar.federated_timeline": "Global", "tabs_bar.home": "Página inicial", "tabs_bar.local_timeline": "Local", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt.json index c03001080..cf56df025 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt.json @@ -17,6 +17,7 @@ "account.follows_you": "É teu seguidor", "account.hide_reblogs": "Esconder partilhas de @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} mudou a sua conta para:", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index fc196e820..d262b57b7 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -17,6 +17,7 @@ "account.follows_you": "Te urmărește", "account.hide_reblogs": "Ascunde redistribuirile de la @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Menționează @{name}", "account.moved_to": "{name} a fost mutat la:", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 3e2979c1b..b1eb76afb 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -17,6 +17,7 @@ "account.follows_you": "Подписан(а) на Вас", "account.hide_reblogs": "Скрыть продвижения от @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Медиа", "account.mention": "Упомянуть", "account.moved_to": "Ищите {name} здесь:", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index e03cdef89..7b14118a3 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -1,5 +1,5 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Pridaj, alebo odstráň zo zoznamov", "account.badges.bot": "Bot", "account.block": "Blokuj @{name}", "account.block_domain": "Ukry všetko z {domain}", @@ -13,10 +13,11 @@ "account.followers": "Sledujúci", "account.followers.empty": "Tohto užívateľa ešte nikto nenásleduje.", "account.follows": "Následuje", - "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.", + "account.follows.empty": "Tento užívateľ tu ešte nikoho nenásleduje.", "account.follows_you": "Následuje ťa", "account.hide_reblogs": "Skryť povýšenia od @{name}", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", + "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} sa presunul/a na:", @@ -24,7 +25,7 @@ "account.mute_notifications": "Stĺmiť oboznámenia od @{name}", "account.muted": "Utíšený/á", "account.posts": "Hlášky", - "account.posts_with_replies": "Príspevky s odpoveďami", + "account.posts_with_replies": "Hlášky s odpoveďami", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti", "account.share": "Zdieľať @{name} profil", @@ -55,7 +56,7 @@ "column.lists": "Zoznamy", "column.mutes": "Ignorovaní užívatelia", "column.notifications": "Oboznámenia", - "column.pins": "Pripnuté príspevky", + "column.pins": "Pripnuté hlášky", "column.public": "Federovaná časová os", "column_back_button.label": "Späť", "column_header.hide_settings": "Skryť nastavenia", @@ -112,7 +113,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.account_timeline": "Niesú tu žiadne príspevky!", "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.", @@ -138,12 +139,12 @@ "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_header.tag_mode.all": "a {additional}", + "hashtag.column_header.tag_mode.any": "alebo {additional}", + "hashtag.column_header.tag_mode.none": "bez {additional}", + "hashtag.column_settings.tag_mode.all": "Všetky tieto", + "hashtag.column_settings.tag_mode.any": "Hociktorý z týchto", + "hashtag.column_settings.tag_mode.none": "Žiaden z týchto", "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é", @@ -193,8 +194,8 @@ "loading_indicator.label": "Načítam...", "media_gallery.toggle_visible": "Zapnúť/Vypnúť viditeľnosť", "missing_indicator.label": "Nenájdené", - "missing_indicator.sublabel": "Tento zdroj sa nepodarilo nájsť", - "mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?", + "missing_indicator.sublabel": "Tento zdroj sa ešte nepodarilo nájsť", + "mute_modal.hide_notifications": "Skryť oboznámenia od tohoto užívateľa?", "navigation_bar.apps": "Mobilné aplikácie", "navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.community_timeline": "Lokálna časová os", @@ -233,7 +234,7 @@ "notifications.group": "{count} oznámenia", "onboarding.done": "Koniec", "onboarding.next": "Ďalej", - "onboarding.page_five.public_timelines": "Lokálna časová os zobrazuje verejné správy od všetkých na {domain}. Federovaná časová os zobrazuje verejné správy od všetkých tých, čo následujú užívatrľov {domain} z iných serverov. Tieto sú takzvané Verejné Časové Osi, výborná možnosť ako nájsť a spoznať nových ľudí.", + "onboarding.page_five.public_timelines": "Lokálna časová os zobrazuje verejné správy od všetkých na {domain}. Federovaná časová os zobrazuje verejné správy od všetkých tých, čo následujú užívateľov {domain} z iných serverov. Tieto sú takzvané Verejné Časové Osi, výborná možnosť ako nájsť a spoznať nových ľudí.", "onboarding.page_four.home": "Domovská časová os zobrazí správy od ľudí ktorých sledujete.", "onboarding.page_four.notifications": "Stĺpec s notifikáciami zobrazí keď budete s niekým komunikovať.", "onboarding.page_one.federation": "Mastodon je sieť nezávislých serverov, spojením ktorých vzniká jedna veľká federovaná sociálna sieť.", @@ -284,8 +285,8 @@ "search_popout.tips.user": "používateľ", "search_results.accounts": "Ľudia", "search_results.hashtags": "Haštagy", - "search_results.statuses": "Príspevky", - "search_results.total": "{count, number} {count, plural, jeden {výsledok} ostatné {výsledky}}", + "search_results.statuses": "Hlášky", + "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "standalone.public_title": "Náhľad dovnútra...", "status.block": "Blokovať @{name}", "status.cancel_reblog_private": "Nezdieľaj", @@ -321,9 +322,9 @@ "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", + "status.show_thread": "Ukáž diskusné vlákno", + "status.unmute_conversation": "Prestaň ignorovať konverzáciu", + "status.unpin": "Odopni z profilu", "suggestions.dismiss": "Zavrhni návrh", "suggestions.header": "Mohlo by ťa zaujímať…", "tabs_bar.federated_timeline": "Federovaná", @@ -331,7 +332,7 @@ "tabs_bar.local_timeline": "Lokálna", "tabs_bar.notifications": "Notifikácie", "tabs_bar.search": "Hľadaj", - "trends.count_by_accounts": "{count} {rawCount, viacerí, jeden {person} iní {people}} diskutujú", + "trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", "upload_area.title": "Pretiahni a pusť pre nahratie", "upload_button.label": "Pridať médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 080ab8ffc..b85769f96 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -17,6 +17,7 @@ "account.follows_you": "Ti sledi", "account.hide_reblogs": "Skrij sunke od @{name}", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Mediji", "account.mention": "Omeni @{name}", "account.moved_to": "{name} se je premaknil na:", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index feaeb95c1..6bc84adc3 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -17,6 +17,7 @@ "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Mediji", "account.mention": "Pomeni korisnika @{name}", "account.moved_to": "{name} se pomerio na:", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 7e3c3f213..a6dc1fc06 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -17,6 +17,7 @@ "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Медији", "account.mention": "Помени корисника @{name}", "account.moved_to": "{name} се померио на:", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 6910b181d..940f49c78 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -17,6 +17,7 @@ "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Nämna @{name}", "account.moved_to": "{name} har flyttat till:", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 3e243b743..d5176b01d 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -17,6 +17,7 @@ "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.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index e5cfe4240..86616ff42 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -17,6 +17,7 @@ "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "మీడియా", "account.mention": "@{name}ను ప్రస్తావించు", "account.moved_to": "{name} ఇక్కడికి మారారు:", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index a85cc63dc..92dd29871 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -17,6 +17,7 @@ "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.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Mention @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index e1d0f33c4..64a6204aa 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -17,6 +17,7 @@ "account.follows_you": "Seni takip ediyor", "account.hide_reblogs": "Hide boosts from @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", "account.mention": "Bahset @{name}", "account.moved_to": "{name} has moved to:", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 08c30833b..c75940c25 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -17,6 +17,7 @@ "account.follows_you": "Підписаний(-а) на Вас", "account.hide_reblogs": "Сховати передмухи від @{name}", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Медіа", "account.mention": "Згадати @{name}", "account.moved_to": "{name} переїхав на:", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index e24910153..da5cf4798 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -17,6 +17,7 @@ "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "媒体", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已经迁移到:", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 7e1d4c73b..16e803d92 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -17,6 +17,7 @@ "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已經遷移到:", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 4261c9345..d2256c259 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -17,6 +17,7 @@ "account.follows_you": "關注你", "account.hide_reblogs": "隱藏來自 @{name} 的轉推", "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "媒體", "account.mention": "提到 @{name}", "account.moved_to": "{name} 已經移至:", diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js index 664d65151..beab2ea03 100644 --- a/app/javascript/mastodon/reducers/timelines.js +++ b/app/javascript/mastodon/reducers/timelines.js @@ -26,10 +26,10 @@ const initialTimeline = ImmutableMap({ items: ImmutableList(), }); -const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial) => { +const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { mMap.set('isLoading', false); - if (!next) mMap.set('hasMore', false); + if (!next && !isLoadingRecent) mMap.set('hasMore', false); if (!statuses.isEmpty()) { mMap.update('items', ImmutableList(), oldIds => { @@ -126,7 +126,7 @@ export default function timelines(state = initialState, action) { case TIMELINE_EXPAND_FAIL: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false)); case TIMELINE_EXPAND_SUCCESS: - return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial); + return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent); case TIMELINE_UPDATE: return updateTimeline(state, action.timeline, fromJS(action.status)); case TIMELINE_DELETE: diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 4f96204f2..6132dd1ae 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -420,6 +420,7 @@ code { border: 1px solid darken($ui-base-color, 14%); border-radius: 4px; padding: 10px; + padding-right: 30px; height: 41px; } diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index b99ed01f0..d3cc70504 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -31,6 +31,8 @@ class CustomEmoji < ApplicationRecord has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } } + before_validation :downcase_domain + validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT } validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 } @@ -73,4 +75,8 @@ class CustomEmoji < ApplicationRecord def remove_entity_cache Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain)) end + + def downcase_domain + self.domain = domain.downcase unless domain.nil? + end end diff --git a/app/models/custom_emoji_filter.rb b/app/models/custom_emoji_filter.rb index c4bc310bb..7649055d2 100644 --- a/app/models/custom_emoji_filter.rb +++ b/app/models/custom_emoji_filter.rb @@ -26,7 +26,7 @@ class CustomEmojiFilter when 'remote' CustomEmoji.remote when 'by_domain' - CustomEmoji.where(domain: value) + CustomEmoji.where(domain: value.downcase) when 'shortcode' CustomEmoji.search(value) else diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 8a39e09b7..34c75e3bf 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -46,6 +46,8 @@ class Form::AdminSettings :preview_sensitive_media=, :custom_css, :custom_css=, + :profile_directory, + :profile_directory=, to: Setting ) diff --git a/app/models/user.rb b/app/models/user.rb index 5a21419bf..66896257a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -73,7 +73,7 @@ class User < ApplicationRecord validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale? validates_with BlacklistedEmailValidator, if: :email_changed? - validates_with EmailMxValidator, if: :email_changed? + validates_with EmailMxValidator, if: :validate_email_dns? scope :recent, -> { order(id: :desc) } scope :admins, -> { where(admin: true) } @@ -360,4 +360,8 @@ class User < ApplicationRecord def needs_feed_update? last_sign_in_at < ACTIVE_DURATION.ago end + + def validate_email_dns? + email_changed? && !(Rails.env.test? || Rails.env.development?) + end end diff --git a/app/policies/account_policy.rb b/app/policies/account_policy.rb index efabe80d0..07bae68ef 100644 --- a/app/policies/account_policy.rb +++ b/app/policies/account_policy.rb @@ -33,6 +33,10 @@ class AccountPolicy < ApplicationPolicy staff? end + def remove_header? + staff? + end + def subscribe? admin? end diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index 5054bd683..72c30dc73 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -105,7 +105,7 @@ class ActivityPub::ActorSerializer < ActiveModel::Serializer end def virtual_tags - object.emojis + object.emojis + object.tags end def virtual_attachments @@ -119,6 +119,24 @@ class ActivityPub::ActorSerializer < ActiveModel::Serializer class CustomEmojiSerializer < ActivityPub::EmojiSerializer end + class TagSerializer < ActiveModel::Serializer + include RoutingHelper + + attributes :type, :href, :name + + def type + 'Hashtag' + end + + def href + explore_hashtag_url(object) + end + + def name + "##{object.name}" + end + end + class Account::FieldSerializer < ActiveModel::Serializer attributes :type, :name, :value diff --git a/app/services/pubsubhubbub/subscribe_service.rb b/app/services/pubsubhubbub/subscribe_service.rb index 2dba05b12..550da6328 100644 --- a/app/services/pubsubhubbub/subscribe_service.rb +++ b/app/services/pubsubhubbub/subscribe_service.rb @@ -19,31 +19,18 @@ class Pubsubhubbub::SubscribeService < BaseService private def process_subscribe - case subscribe_status - when :invalid_topic + if account.nil? ['Invalid topic URL', 422] - when :invalid_callback + elsif !valid_callback? ['Invalid callback URL', 422] - when :callback_not_allowed + elsif blocked_domain? ['Callback URL not allowed', 403] - when :valid + else confirm_subscription ['', 202] end end - def subscribe_status - if account.nil? - :invalid_topic - elsif !valid_callback? - :invalid_callback - elsif blocked_domain? - :callback_not_allowed - else - :valid - end - end - def confirm_subscription subscription = locate_subscription Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'subscribe', secret, lease_seconds) @@ -58,12 +45,7 @@ class Pubsubhubbub::SubscribeService < BaseService end def locate_subscription - subscription = Subscription.find_by(account: account, callback_url: callback) - - if subscription.nil? - subscription = Subscription.new(account: account, callback_url: callback) - end - + subscription = Subscription.find_or_initialize_by(account: account, callback_url: callback) subscription.domain = domain subscription.save! subscription diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 36665177d..01756a73d 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -12,6 +12,9 @@ class UpdateAccountService < BaseService check_links(account) process_hashtags(account) end + rescue Mastodon::DimensionsValidationError => de + account.errors.add(:avatar, de.message) + false end private diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb index 8d1e58b38..5b4c684b2 100644 --- a/app/validators/email_mx_validator.rb +++ b/app/validators/email_mx_validator.rb @@ -4,7 +4,6 @@ require 'resolv' class EmailMxValidator < ActiveModel::Validator def validate(user) - return if Rails.env.test? || Rails.env.development? user.errors.add(:email, I18n.t('users.invalid_email')) if invalid_mx?(user.email) end @@ -15,13 +14,23 @@ class EmailMxValidator < ActiveModel::Validator return true if domain.nil? - records = Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s } - records = Resolv::DNS.new.getresources(domain, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s } if records.empty? + hostnames = [] + ips = [] - records.empty? || on_blacklist?(records) + Resolv::DNS.open do |dns| + dns.timeouts = 1 + + hostnames = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s } + + ([domain] + hostnames).uniq.each do |hostname| + ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s }) + end + end + + ips.empty? || on_blacklist?(hostnames + ips) end def on_blacklist?(values) - EmailDomainBlock.where(domain: values).any? + EmailDomainBlock.where(domain: values.uniq).any? end end diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index 9ceae007d..370e7e470 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -1,12 +1,9 @@ .public-account-header{:class => ("inactive" if account.moved?)} .public-account-header__image - = image_tag account.header.url, class: 'parallax' + = image_tag (current_account&.user&.setting_auto_play_gif ? account.header_original_url : account.header_static_url), class: 'parallax' .public-account-header__bar = link_to short_account_url(account), class: 'avatar' do - - if current_account&.user&.setting_auto_play_gif - = image_tag account.avatar_original_url - - else - = image_tag account.avatar_static_url + = image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url) .public-account-header__tabs .public-account-header__tabs__name %h1 diff --git a/app/views/admin/accounts/_account.html.haml b/app/views/admin/accounts/_account.html.haml index 0fadaae1e..1e1bb1812 100644 --- a/app/views/admin/accounts/_account.html.haml +++ b/app/views/admin/accounts/_account.html.haml @@ -13,3 +13,6 @@ %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 \- + %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) diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml index 0d31eee36..91fddadf8 100644 --- a/app/views/admin/accounts/index.html.haml +++ b/app/views/admin/accounts/index.html.haml @@ -41,6 +41,7 @@ %th= t('admin.accounts.role') %th= t('admin.accounts.most_recent_ip') %th= t('admin.accounts.most_recent_activity') + %th %tbody = render @accounts diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index c1a5fc1bd..e9f765107 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -16,11 +16,18 @@ %tr %th= t('admin.accounts.avatar') - %th + %td = link_to @account.avatar.url(:original) do = image_tag @account.avatar.url(:original), alt: '', width: 40, height: 40, class: 'avatar' - if @account.local? && @account.avatar? = table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account) + %tr + %th= t('admin.accounts.header') + %td + = link_to @account.header.url(:original) do + = image_tag @account.header.url(:original), alt: '', width: 128, height: 40, class: 'header' + - if @account.local? && @account.header? + = table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, @account) - if @account.local? %tr diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 1996eef4d..fa3d70e9e 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -58,6 +58,12 @@ - else %span.pull-right.negative-hint= fa_icon 'times fw' %li + = link_to t('admin.dashboard.feature_profile_directory'), edit_admin_settings_path + - if @profile_directory + %span.pull-right.positive-hint= fa_icon 'check fw' + - else + %span.pull-right.negative-hint= fa_icon 'times fw' + %li = link_to t('admin.dashboard.feature_relay'), admin_relays_path - if @relay_enabled %span.pull-right.positive-hint= fa_icon 'check fw' diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index 7c378bf73..bcf57aac0 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -62,6 +62,9 @@ .fields-group = f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html') + .fields-group + = f.input :profile_directory, as: :boolean, wrapper: :with_label, label: t('admin.settings.profile_directory.title'), hint: t('admin.settings.profile_directory.desc_html') + %hr.spacer/ .fields-group diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index ee49ed06c..5545df54c 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -6,7 +6,8 @@ = link_to root_url, class: 'brand' do = image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon' - = link_to t('directories.directory'), explore_path, class: 'nav-link' + - if Setting.profile_directory + = link_to t('directories.directory'), explore_path, class: 'nav-link' = link_to t('about.about_this'), about_more_path, class: 'nav-link' = link_to t('about.apps'), 'https://joinmastodon.org/apps', class: 'nav-link' .nav-center diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 212c6cb44..05cc93d69 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -26,8 +26,9 @@ .fields-group = f.input :bot, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.bot') - .fields-group - = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable_html', min_followers: Account::MIN_FOLLOWERS_DISCOVERY, path: explore_path) + - if Setting.profile_directory + .fields-group + = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable_html', min_followers: Account::MIN_FOLLOWERS_DISCOVERY, path: explore_path) %hr.spacer/ diff --git a/config/boot.rb b/config/boot.rb index beb45a5ee..f3e36203a 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -4,7 +4,7 @@ require 'bundler/setup' # Set up gems listed in the Gemfile. require 'bootsnap' # Speed up boot time by caching expensive operations. Bootsnap.setup( - cache_dir: 'tmp/cache', + cache_dir: File.expand_path('../tmp/cache', __dir__), development_mode: ENV.fetch('RAILS_ENV', 'development') == 'development', load_path_cache: true, autoload_paths_cache: true, diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 1617ad1c1..12b764a5a 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -28,7 +28,6 @@ if Rails.env.production? p.worker_src :self, assets_host p.connect_src :self, :blob, Rails.configuration.x.streaming_api_base_url, *data_hosts p.manifest_src :self, assets_host - p.form_action :self end end diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb index 7b5b47b5e..bc782bc76 100644 --- a/config/initializers/cors.rb +++ b/config/initializers/cors.rb @@ -17,6 +17,10 @@ Rails.application.config.middleware.insert_before 0, Rack::Cors do headers: :any, methods: [:get], credentials: false + resource '/users/:username', + headers: :any, + methods: [:get], + credentials: false resource '/api/*', headers: :any, methods: [:post, :put, :delete, :get, :patch, :options], diff --git a/config/locales/ar.yml b/config/locales/ar.yml index dd0cfd1f2..eda99e24c 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -60,6 +60,7 @@ ar: zero: متابِعون following: مُتابَع joined: انضم·ت في %{date} + last_active: آخر نشاط link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date} media: الوسائط moved_html: "%{name} إنتقلَ إلى %{new_profile_link} :" @@ -130,6 +131,7 @@ ar: media_attachments: الوسائط المرفقة memorialize: تحول إلى صفحة للذاكرة moderation: + active: نشِط all: الكل silenced: تم كتمه suspended: مُجَمَّد @@ -455,6 +457,12 @@ ar: hint_html: 'لتأكيد إجراء تعليق الحساب، يُرجى إدخال %{value} في الحقل التالي:' proceed: مواصلة title: تعليق الحساب %{acct} + tags: + accounts: الحسابات + hidden: المخفية + name: الوسم + title: الوسوم + visible: ظاهر title: الإدارة admin_mailer: new_report: @@ -531,6 +539,9 @@ ar: proceed: حذف حساب success_msg: تم حذف حسابك بنجاح warning_title: توافر المحتوى المنشور و المبعثَر + directories: + explore_mastodon: استكشف %{title} + most_popular: المشهورة errors: '403': ليس لك الصلاحيات الكافية لعرض هذه الصفحة. '404': إنّ الصفحة التي تبحث عنها لا وجود لها أصلا. @@ -645,7 +656,13 @@ ar: body: هذا هو مُلَخَّص الرسائل التي فاتتك وذلك منذ آخر زيارة لك في %{since} mention: "%{name} أشار إليك في :" new_followers_summary: رائع، لقد قام بمتابعتك %{count} مُتابِعون جُدد أثناء فترة غيابك عن ماستدون ! - subject: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" + subject: + few: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" + many: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" + one: "إشعار واحد منذ آخر زيارة لك لـ \U0001F418" + other: "%{count} إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" + two: "إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" + zero: "إشعارات جديدة منذ آخر زيارة لك إلى \U0001F418" title: أثناء فترة غيابك … favourite: body: 'أُعجب %{name} بمنشورك :' @@ -763,8 +780,20 @@ ar: statuses: attached: description: 'مُرفَق : %{attached}' - image: "%{count} صُوَر" - video: "%{count} فيديوهات" + image: + few: "%{count} صور" + many: "%{count} صور" + one: صورة %{count} + other: "%{count} صور" + two: صور + zero: صور + video: + few: "%{count} فيديوهات" + many: "%{count} فيديوهات" + one: فيديو %{count} + other: "%{count} فيديوهات" + two: فيديوهات + zero: فيديوهات boosted_from_html: تم إعادة ترقيته مِن %{acct_link} content_warning: 'تحذير عن المحتوى : %{warning}' disallowed_hashtags: 'يحتوي على أحد الوسوم الممنوعة: %{tags}' diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 795fac5ad..e6c51b10e 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -24,12 +24,14 @@ ast: status_count_after: estaos status_count_before: Que crearon terms: Términos del serviciu - user_count_after: usuarios + user_count_after: + one: usuariu + other: usuarios user_count_before: Ye'l llar de what_is_mastodon: "¿Qué ye Mastodon?" accounts: followers: - one: Siguidor + one: Xente que te sigue other: Siguidores joined: Xunióse en %{date} moved_html: "%{name} mudóse a %{new_profile_link}:" @@ -37,7 +39,11 @@ 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 + posts: + one: Toot + other: Toots + posts_tab_heading: Toots + posts_with_replies: Toots y rempuestes reserved_username: El nome d'usuariu ta acutáu roles: bot: Robó @@ -139,6 +145,7 @@ ast: cas: CAS saml: SAML register: Rexistrase + register_elsewhere: Rexistrase n'otru sirvidor security: Seguranza authorize_follow: already_following: Yá tas siguiendo a esta cuenta @@ -155,6 +162,10 @@ ast: deletes: bad_password_msg: "¡Bon intentu, crackers! Contraseña incorreuta" confirm_password: Introduz la contraseña pa verificar la to identidá + directories: + people: + one: "%{count} persona" + other: "%{count} persones" errors: '403': Nun tienes permisu pa ver esta páxina. '404': La páxina que tabes guetando nun esiste. @@ -167,8 +178,12 @@ ast: archive_takeout: date: Data hint_html: Pues solicitar un archivu colos tos <strong>toots y ficheros xubíos</strong>. Los datos esportaos van tar nel formatu ActivityPub, llexible pa cualesquier software que seya compatible. Pues solicitar un archivu cada 7 díes. + request: Solicitar l'archivu size: Tamañu + blocks: Xente que bloquiesti csv: CSV + follows: Xente que sigues + mutes: Xente que silenciesti filters: contexts: notifications: Avisos @@ -340,6 +355,7 @@ ast: lost_recovery_codes: Los códigos de recuperación permítente recuperar l'accesu a la cuenta si pierdes el teléfonu. Si tamién pierdes esos códigos, pues xeneralos de nueves equí. Los códigos de recuperación vieyos van invalidase. manual_instructions: 'Si nun pues escaniar el códigu QR y precises introducilu a mano, equí ta''l secretu en testu planu:' recovery_codes: Códigos de recuperación + recovery_codes_regenerated: Los códigos de recuperación rexeneráronse con ésitu user_mailer: welcome: full_handle_hint: Esto ye lo que-yos diríes a los collacios pa que puean unviate mensaxes o siguite dende otra instancia. @@ -348,3 +364,5 @@ ast: users: invalid_email: La direición de corréu nun ye válida seamless_external_login: Aniciesti sesión pente un serviciu esternu, polo que los axustes de la contraseña y corréu nun tán disponibles. + verification: + verification: Verificación diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 54ca4a4bf..04e78fe92 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -658,7 +658,7 @@ ca: title: Menció nova reblog: body: "%{name} ha impulsat el teu estat:" - subject: "%{name} ha retootejat el teu estat" + subject: "%{name} ha impulsat el teu estat" title: Nou impuls number: human: diff --git a/config/locales/co.yml b/config/locales/co.yml index b4458f602..d2dcef9a4 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -48,6 +48,7 @@ co: other: Abbunati following: Abbunamenti joined: Quì dapoi %{date} + last_active: ultima attività link_verified_on: A pruprietà d'issu ligame hè stata verificata u %{date} media: Media moved_html: "%{name} hà cambiatu di contu, avà hè nant’à %{new_profile_link}:" @@ -114,6 +115,7 @@ co: media_attachments: Media aghjunti memorialize: Trasfurmà in mimuriale moderation: + active: Attivu all: Tutti silenced: Silenzati suspended: Suspesi @@ -439,6 +441,14 @@ co: proceed: Cuntinuà title: Suspende %{acct} warning_html: 'A suspensione di u contu sguasserà di manera <strong>irreversibile</strong> i so dati, cum''è:' + tags: + accounts: Conti + hidden: Piattatu + hide: Piattà di l'annuariu + name: Hashtag + title: Hashtag + unhide: Mustrà in l'annuariu + visible: Visibile title: Amministrazione admin_mailer: new_report: @@ -517,6 +527,15 @@ co: success_msg: U vostru contu hè statu sguassatu warning_html: Pudete esse sicuru·a solu chì u cuntenutu sarà sguassatu di st’istanza. S’ellu hè statu spartutu in altrò, sarà forse sempre quallà. warning_title: Dispunibilità di i cuntenuti sparsi + directories: + directory: Annuariu di i prufili + explanation: Scopre utilizatori à partesi di i so centri d'interessu + explore_mastodon: Scopre à %{title} + most_popular: I più pupulari + most_recently_active: Attività a più fresca + people: + one: "%{count} persona" + other: "%{count} persone" errors: '403': Ùn site micca auturizatu·a à vede sta pagina. '404': Sta pagina ùn esiste micca. diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 74e1b0e45..a5a3c0184 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -31,7 +31,7 @@ cs: privacy_policy: Zásady soukromí source_code: Zdrojový kód status_count_after: - few: příspěvků + few: příspěvky one: příspěvek other: příspěvků status_count_before: Kteří napsali @@ -48,9 +48,10 @@ cs: followers: few: Sledovatelé one: Sledovatel - other: Sledovatelé + other: Sledovatelů following: Sledovaných joined: Připojil/a se v %{date} + last_active: naposledy aktivní link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date} media: Média moved_html: 'Účet %{name} byl přesunut na %{new_profile_link}:' @@ -63,7 +64,7 @@ cs: posts: few: Tooty one: Toot - other: Tooty + other: Tootů posts_tab_heading: Tooty posts_with_replies: Tooty a odpovědi reserved_username: Toto uživatelské jméno je rezervováno @@ -118,6 +119,7 @@ cs: media_attachments: Mediální přílohy memorialize: Změnit na „in memoriam“ moderation: + active: Aktivní all: Vše silenced: Utišen/a suspended: Suspendován/a @@ -272,7 +274,7 @@ cs: severity: Přísnost show: affected_accounts: - few: "%{count} účtů v databázi bylo ovlivněno" + few: "%{count} účty v databázi byly ovlivněny" one: Jeden účet v databázi byl ovlivněn other: "%{count} účtů v databázi bylo ovlivněno" retroactive: @@ -444,6 +446,14 @@ cs: proceed: Pokračovat title: Suspendovat účet %{acct} warning_html: 'Suspenzace tohoto účtu <strong>nenávratně</strong> smaže z tohoto účtu data, včetně:' + tags: + accounts: Účty + hidden: Skryté + hide: Skrýt z adresáře + name: Hashtag + title: Hashtagy + unhide: Zobrazit v adresáři + visible: Viditelné title: Administrace admin_mailer: new_report: @@ -522,6 +532,16 @@ cs: 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. warning_title: Dostupnost rozšířeného obsahu + directories: + directory: Adresář profilů + explanation: Objevujte uživatele podle jejich zájmů + explore_mastodon: Prozkoumejte %{title} + most_popular: Nejpopulárnější + most_recently_active: Naposledy aktivní + people: + few: "%{count} lidé" + one: "%{count} člověk" + other: "%{count} lidí" errors: '403': Nemáte povolení zobrazit tuto stránku. '404': Stránka, kterou hledáte, neexistuje. @@ -570,9 +590,9 @@ cs: lock_link: Zamkněte svůj účet purge: Odstranit ze sledovatelů success: - few: V průběhu blokování sledovatelů z %{count} domény... + few: V průběhu blokování sledovatelů ze %{count} domén... one: V průběhu blokování sledovatelů z jedné domény... - other: V průběhu blokování sledovatelů z %{count} domény... + other: V průběhu blokování sledovatelů z %{count} domén... 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ý @@ -585,7 +605,7 @@ cs: copy: Kopírovat save_changes: Uložit změny validation_errors: - few: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyb níže + few: Něco ještě není úplně v pořádku! Prosím zkontrolujte %{count} chyby 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: @@ -640,11 +660,11 @@ cs: 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: - few: Navíc jste získal/a %{count} nových sledovatelů, zatímco jste byl/a pryč! Hurá! + few: Navíc jste získal/a %{count} nové sledovatele, 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" + few: "%{count} nová 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... @@ -764,11 +784,11 @@ cs: attached: description: 'Přiloženo: %{attached}' image: - few: "%{count} obrázků" + few: "%{count} obrázky" one: "%{count} obrázek" other: "%{count} obrázků" video: - few: "%{count} videí" + few: "%{count} videa" one: "%{count} video" other: "%{count} videí" boosted_from_html: Boostnuto z %{acct_link} diff --git a/config/locales/de.yml b/config/locales/de.yml index 03358f5a0..52c2f113a 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -48,6 +48,7 @@ de: other: Follower following: Folgt joined: Beigetreten am %{date} + last_active: zuletzt aktiv link_verified_on: Besitz des Links wurde überprüft am %{date} media: Medien moved_html: "%{name} ist auf %{new_profile_link} umgezogen:" @@ -114,6 +115,7 @@ de: media_attachments: Medienanhänge memorialize: In Gedenkmal verwandeln moderation: + active: Aktiv all: Alle silenced: Stummgeschaltet suspended: Gesperrt @@ -439,6 +441,14 @@ de: proceed: Fortfahren title: "%{acct} sperren" warning_html: 'Die Sperrung des Benutzerkontos wird <strong>unwiederrufliche</strong> Schäden hervorrufen und alle Daten löschen, die folgendes beinhalten:' + tags: + accounts: Konten + hidden: Versteckt + hide: Vor Verzeichnis verstecken + name: Hashtag + title: Hashtags + unhide: Zeige in Verzeichnis + visible: Sichtbar title: Administration admin_mailer: new_report: @@ -815,7 +825,7 @@ de: <h3 id="protect">Wie beschützen wir deine Informationen?</h3> - <p>Wir implementieren eine Reihe von Sicherheitsmaßnahmen, um die Sicherheit deiner persönlichen Information sicherzustellen, wenn du persönliche Informationen eingibst, übermittelst oder auf sie zugreifst. Neben anderen Dingen, wird sowohl deine Browsersitzung, als auch der Datenverkehr zischen deinen Anwendungen und der Programmierschnittstelle (API) mit SSL gesichert, dein Passwort wird mit einem starken Einwegalgorithmus gehasht. Du kannst Zwei-Faktor-Authentifizierung aktivieren, um den Zugriff auf dein Konto zusätzlich abzusichern.</p> + <p>Wir implementieren eine Reihe von Sicherheitsmaßnahmen, um die Sicherheit deiner persönlichen Information sicherzustellen, wenn du persönliche Informationen eingibst, übermittelst oder auf sie zugreifst. Neben anderen Dingen, wird sowohl deine Browsersitzung, als auch der Datenverkehr zwischen deinen Anwendungen und der Programmierschnittstelle (API) mit SSL gesichert, dein Passwort wird mit einem starken Einwegalgorithmus gehasht. Du kannst Zwei-Faktor-Authentifizierung aktivieren, um den Zugriff auf dein Konto zusätzlich abzusichern.</p> <hr class="spacer" /> @@ -830,7 +840,7 @@ de: <p>Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.</p> - <p>Du kannst dein Konto unwiderruflich jederzeit löschen.</p> + <p>Du kannst dein Konto jederzeit unwiderruflich löschen.</p> <hr class="spacer"/> @@ -864,9 +874,9 @@ de: <h3 id="changes">Änderung an unserer Datenschutzerklärung</h3> - <p>Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wird diese Änderungen auf dieser Seite bekannt geben.</p> + <p>Wenn wir uns entscheiden, Änderungen an unserer Datenschutzerklärung vorzunehmen, werden wird diese Änderungen auf dieser Seite bekannt gegeben.</p> - <p>Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion</p> + <p>Dies ist eine Übersetzung, Irrtümer und Übersetzungsfehler vorbehalten. Im Zweifelsfall gilt die englische Originalversion.</p> <p>Dieses Dokument ist CC-BY-SA. Es wurde zuletzt aktualisiert am 7. März 2018.</p> diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index de23b5847..f63d4d210 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -78,6 +78,6 @@ cs: not_found: nenalezen not_locked: nebyl uzamčen not_saved: - few: "%{count} chyb zabránilo uložení tohoto %{resource}:" + few: "%{count} chyby zabránily 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 1d597d53d..8400fb2d4 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -47,8 +47,8 @@ nl: unlock_instructions: subject: 'Mastodon: Instructies om opschorten account ongedaan te maken' omniauth_callbacks: - failure: Kon je niet aanmelden met jouw %{kind} account, omdat "%{reason}". - success: Successvol aangemeld met jouw %{kind} account. + failure: Kon je niet inloggen met jouw %{kind} account, omdat "%{reason}". + success: Succesvol met jouw %{kind} account ingelogd. passwords: no_token: Je kunt deze pagina niet benaderen zonder dat je een e-mail om je wachtwoord opnieuw in te stellen hebt ontvangen. send_instructions: Je ontvangt via e-mail instructies hoe je jouw wachtwoord opnieuw moet instellen. Kijk tussen je spam wanneer niks werd ontvangen. diff --git a/config/locales/el.yml b/config/locales/el.yml index 3ed577230..342cad91c 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -4,7 +4,7 @@ el: about_hashtag_html: Αυτά είναι κάποια από τα δημόσια τουτ σημειωμένα με <strong>#%{hashtag}</strong>. Μπορείς να αλληλεπιδράσεις με αυτά αν έχεις λογαριασμό οπουδήποτε στο fediverse. about_mastodon_html: Το Mastodon είναι ένα κοινωνικό δίκτυο που βασίζεται σε ανοιχτά δικτυακά πρωτόκολλα και ελεύθερο λογισμικό ανοιχτού κώδικα. Είναι αποκεντρωμένο όπως το e-mail. about_this: Σχετικά - administered_by: 'Διαχειρίζεται από:' + administered_by: 'Διαχειριστής:' api: API apps: Εφαρμογές κινητών closed_registrations: Αυτή τη στιγμή οι εγγραφές σε αυτό τον κόμβο είναι κλειστές. Αλλά! Μπορείς να βρεις έναν άλλο κόμβο για να ανοίξεις λογαριασμό και να έχεις πρόσβαση από εκεί στο ίδιο ακριβώς δίκτυο. @@ -48,6 +48,7 @@ el: other: Ακόλουθοι following: Ακολουθεί joined: Εγγράφηκε στις %{date} + last_active: τελευταία ενεργός/ή link_verified_on: Η κυριότητα αυτού του συνδέσμου ελέγχθηκε στις %{date} media: Πολυμέσα moved_html: 'Ο/Η %{name} μετακόμισε στο %{new_profile_link}:' @@ -114,6 +115,7 @@ el: media_attachments: Συνημμένα πολυμέσα memorialize: Μετατροπή σε νεκρολογία moderation: + active: Ενεργός/ή all: Όλα silenced: Αποσιωπημένα suspended: Σε αναστολή @@ -124,7 +126,7 @@ el: no_limits_imposed: Χωρίς όρια not_subscribed: Άνευ συνδρομής outbox_url: URL εξερχομένων - perform_full_suspension: Κάνε πλήρη αναστολή + perform_full_suspension: Αναστολή profile_url: URL προφίλ promote: Προβίβασε protocol: Πρωτόκολλο @@ -439,6 +441,14 @@ el: proceed: Συνέχεια title: Αναστολή %{acct} warning_html: 'Αναστέλλοντας αυτό το λογαριασμό θα διαγραφούν <strong>αμετάκλητα</strong> δεδομένα του, μεταξύ των οποίων:' + tags: + accounts: Λογαριασμοί + hidden: Κρυμμένες + hide: Απόκρυψη από κατάλογο + name: Ταμπέλα + title: Ταμπέλες + unhide: Εμφάνιση σε κατάλογο + visible: Εμφανείς title: Διαχείριση admin_mailer: new_report: @@ -461,7 +471,7 @@ el: warning: Μεγάλη προσοχή με αυτά τα στοιχεία. Μην τα μοιραστείς ποτέ με κανέναν! your_token: Το διακριτικό πρόσβασής σου (access token) auth: - agreement_html: Με την εγγραφή σου, συμφωνείς να ακολουθείς <a href="%{rules_path}">τους κανόνες αυτού του κόμβου</a> και <a href="%{terms_path}">τους όρους χρήσης του</a>. + agreement_html: Επιλέγοντας το "Εγγραφή", συμφωνείς πως δέχεσαι <a href="%{rules_path}">τους κανόνες αυτού του κόμβου</a> και <a href="%{terms_path}">τους όρους χρήσης του</a>. change_password: Συνθηματικό confirm_email: Επιβεβαίωση email delete_account: Διαγραφή email @@ -517,6 +527,15 @@ el: success_msg: Ο λογαριασμός σου διαγράφηκε με επιτυχία warning_html: Μόνο η διαγραφή περιεχομένου από αυτό τον συγκεκριμένο κόμβο είναι εγγυημένη. Το περιεχόμενο που έχει διαμοιραστεί ευρέως είναι πιθανό να αφήσει ίχνη. Όσοι διακομιστές είναι εκτός σύνδεσης και όσοι έχουν διακόψει τη λήψη των ενημερώσεων του κόμβου σου, δε θα ενημερώσουν τις βάσεις δεδομένων τους. warning_title: Διαθεσιμότητα ήδη διανεμημένου περιεχομένου + directories: + directory: Κατάλογος λογαριασμών + explanation: Βρες χρήστες βάσει των ενδιαφερόντων τους + explore_mastodon: Εξερεύνησε %{title} + most_popular: Δημοφιλείς + most_recently_active: Πρόσφατα ενεργοί + people: + one: "%{count} άτομο" + other: "%{count} άτομα" errors: '403': Δεν έχεις δικαίωμα πρόσβασης σε αυτή τη σελίδα. '404': Η σελίδα που ψάχνεις δεν υπάρχει. diff --git a/config/locales/en.yml b/config/locales/en.yml index 8e0b5f75a..ca139a35e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -229,6 +229,7 @@ en: config: Configuration feature_deletions: Account deletions feature_invites: Invite links + feature_profile_directory: Profile directory feature_registrations: Registrations feature_relay: Federation relay features: Features @@ -376,6 +377,9 @@ en: preview_sensitive_media: desc_html: Link previews on other websites will display a thumbnail even if the media is marked as sensitive title: Show sensitive media in OpenGraph previews + profile_directory: + desc_html: Allow users to be discoverable + title: Enable profile directory registrations: closed_message: desc_html: Displayed on frontpage when registrations are closed. You can use HTML tags diff --git a/config/locales/eo.yml b/config/locales/eo.yml index eddefab05..f944b2a19 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -30,18 +30,25 @@ eo: other_instances: Listo de nodoj privacy_policy: Privateca politiko source_code: Fontkodo - status_count_after: mesaĝoj + status_count_after: + one: mesaĝo + other: mesaĝoj status_count_before: Kie skribiĝis terms: Uzkondiĉoj - user_count_after: uzantoj + user_count_after: + one: uzanto + other: uzantoj user_count_before: Hejmo de what_is_mastodon: Kio estas Mastodon? accounts: choices_html: 'Proponoj de %{name}:' follow: Sekvi - followers: Sekvantoj + followers: + one: Sekvanto + other: Sekvantoj following: Sekvatoj joined: Aliĝis je %{date} + link_verified_on: Proprieto de ĉi tiu ligilo estis kontrolita je %{date} media: Aŭdovidaĵoj moved_html: "%{name} moviĝis al %{new_profile_link}:" network_hidden: Tiu informo ne estas disponebla @@ -50,7 +57,10 @@ eo: people_who_follow: Sekvantoj de %{name} pin_errors: following: Vi devas sekvi la homon, kiun vi volas proponi - posts: Mesaĝoj + posts: + one: Mesaĝo + other: Mesaĝoj + posts_tab_heading: Mesaĝoj posts_with_replies: Mesaĝoj kaj respondoj reserved_username: La uzantnomo estas rezervita roles: @@ -111,9 +121,10 @@ eo: moderation_notes: Kontrolaj notoj most_recent_activity: Lasta ago most_recent_ip: Lasta IP + no_limits_imposed: Neniu limito trudita not_subscribed: Ne abonita outbox_url: Elira URL - perform_full_suspension: Tute haltigi + perform_full_suspension: Haltigi profile_url: Profila URL promote: Plirangigi protocol: Protokolo @@ -142,8 +153,10 @@ eo: report: signalo targeted_reports: Signaloj kreitaj de ĉi tiu konto silence: Kaŝi + silenced: Silentigita statuses: Mesaĝoj subscribe: Aboni + suspended: Haltigita title: Kontoj unconfirmed_email: Nekonfirmita retadreso undo_silenced: Malfari kaŝon @@ -160,6 +173,7 @@ eo: create_domain_block: "%{name} blokis domajnon %{target}" create_email_domain_block: "%{name} metis en nigran liston domajnon %{target}" demote_user: "%{name} degradis uzanton %{target}" + destroy_custom_emoji: "%{name} neniigis la emoĝion %{target}" destroy_domain_block: "%{name} malblokis domajnon %{target}" destroy_email_domain_block: "%{name} metis en blankan liston domajnon %{target}" destroy_status: "%{name} forigis mesaĝojn de %{target}" @@ -287,9 +301,15 @@ eo: title: Invitoj relays: add_new: Aldoni novan ripetilon + delete: Forigi description_html: "<strong>Fratara ripetilo</strong> estas survoja servilo, kiu interŝanĝas grandan kvanton de publikaj mesaĝoj inter serviloj, kiuj abonas kaj publikigas al ĝi. <strong>Ĝi povas helpi etajn kaj mezgrandajn servilojn malkovri enhavon de la fediverse</strong>, kio normale postulus al lokaj uzantoj mane sekvi homojn de foraj serviloj." + disable: Malebligi + disabled: Malebligita + enable: Ebligi enable_hint: Post ebligo, via servilo abonos ĉiujn publikajn mesaĝojn de tiu ripetilo, kaj komencos sendi publikajn mesaĝojn de la servilo al ĝi. + enabled: Malebligita inbox_url: URL de la ripetilo + save_and_enable: Konservi kaj ebligi setup: Agordi konekton al ripetilo status: Stato title: Ripetiloj @@ -336,6 +356,9 @@ eo: contact_information: email: Publika retadreso username: Kontakta uzantnomo + custom_css: + desc_html: Ŝanĝi la aspekton per CSS ŝargita en ĉiu pago + title: Propra CSS hero: desc_html: Montrata en la ĉefpaĝo. Almenaŭ 600x100px rekomendita. Kiam ne agordita, la bildeto de la nodo estos uzata title: Kapbildo @@ -404,6 +427,11 @@ eo: last_delivery: Lasta livero title: WebSub topic: Temo + suspensions: + hint_html: 'Por konformi la haltigo de la konto, bonvolu enigi %{value} en la kampo sube:' + proceed: Daŭrigita + title: Haltigi %{acct} + warning_html: 'Haltigi ĉi tiu konton forigos <strong>senrevene</strong> datumojn de ĉi tiu konto, inklusive de:' title: Administrado admin_mailer: new_report: @@ -426,7 +454,7 @@ eo: warning: Estu tre atenta kun ĉi tiu datumo. Neniam diskonigu ĝin al iu ajn! your_token: Via alira ĵetono auth: - agreement_html: Per registriĝo, vi konsentas kun <a href="%{rules_path}">la reguloj de nia nodo</a> kaj <a href="%{terms_path}">niaj uzkondiĉoj</a>. + agreement_html: Klakante “Registriĝi” sube, vi konsentas kun <a href="%{rules_path}">la reguloj de la nodo</a> kaj <a href="%{terms_path}">niaj uzkondiĉoj</a>. change_password: Pasvorto confirm_email: Konfirmi retadreson delete_account: Forigi konton @@ -543,6 +571,7 @@ eo: resources: Rimedoj generic: changes_saved_msg: Ŝanĝoj sukcese konservitaj! + copy: Kopii save_changes: Konservi ŝanĝojn validation_errors: one: Io mise okazis! Bonvolu konsulti la suban erar-raporton @@ -762,6 +791,7 @@ eo: time: formats: default: "%Y-%m-%d %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Enmetu la kodon kreitan de via aŭtentiga aplikaĵo por konfirmi description_html: Se vi ebligas <strong>dufaktoran aŭtentigon</strong>, vi bezonos vian poŝtelefonon por ensaluti, ĉar ĝi kreos nombrojn, kiujn vi devos enmeti. @@ -802,8 +832,11 @@ eo: tips: Konsiloj title: Bonvenon, %{name}! users: + follow_limit_reached: Vi ne povas sekvi pli da %{limit} homojn invalid_email: La retadreso estas nevalida invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email} seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retadresaj agordoj ne estas disponeblaj. signed_in_as: 'Ensalutinta kiel:' + verification: + verification: Kontrolo diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 122b074eb..15307c76e 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -48,6 +48,7 @@ eu: other: jarraitzaile following: Jarraitzen joined: "%{date}(e)an elkartua" + last_active: azkenekoz aktiboa link_verified_on: 'Esteka honen jabetzaren egiaztaketa data: %{date}' media: Multimedia moved_html: "%{name} hona lekualdatu da %{new_profile_link}:" @@ -114,6 +115,7 @@ eu: media_attachments: Multimedia eranskinak memorialize: Bihurtu memoriala moderation: + active: Aktiboa all: Denak silenced: Isilarazita suspended: Kanporatua @@ -439,6 +441,14 @@ eu: proceed: Jarraitu title: Kanporatu %{acct} warning_html: 'Kontu hau kanporatzeak <strong>behin betiko</strong> ezabatuko ditu kontu honetako datuak, hauek barne:' + tags: + accounts: Kontuak + hidden: Ezkutatuta + hide: Ezkutatu direktoriotik + name: Traola + title: Traolak + unhide: Erakutsi direktorioan + visible: Ikusgai title: Administrazioa admin_mailer: new_report: @@ -517,6 +527,15 @@ eu: success_msg: Zure kontua ongi ezabatu da warning_html: Instantzia honetako edukiak ezabatzea besterik ezin da bermatu. Asko partekatu den edukiaren arrastoak geratzea izan liteke. Deskonektatuta dauden zerbitzariak edo zure eguneraketetatik harpidetza kendu duten zerbitzariek ez dituzte beraien datu-baseak eguneratuko. warning_title: Sakabanatutako edukiaren eskuragarritasuna + directories: + directory: Profilen direktorioa + explanation: Deskubritu erabiltzaileak interesen arabera + explore_mastodon: Esploratu %{title} + most_popular: Puri-purian + most_recently_active: Azkenaldian aktibo + people: + one: pertsona %{count} + other: "%{count} pertsona" errors: '403': Ez duzu orri hau ikusteko baimenik. '404': Bilatu duzun orria ez da existitzen. @@ -786,7 +805,7 @@ eu: stream_entries: pinned: Finkatutako toot-a reblogged: "(r)en bultzada" - sensitive_content: Eduki hunkigarria + sensitive_content: 'Kontuz: Eduki hunkigarria' terms: body_html: | <h2>Pribatutasun politika</h2> diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 51b4fb1f8..de3070e8a 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -48,6 +48,7 @@ fr: other: Abonné⋅e⋅s following: Abonnements joined: Inscrit·e en %{date} + last_active: actif dernièrement link_verified_on: La propriété de ce lien a été vérifiée le %{date} media: Médias moved_html: "%{name} a changé de compte pour %{new_profile_link} :" @@ -114,6 +115,7 @@ fr: media_attachments: Fichiers médias memorialize: Convertir en mémorial moderation: + active: Actif all: Tous silenced: Masqués suspended: Suspendus @@ -187,7 +189,7 @@ fr: remove_avatar_user: "%{name} a supprimé l’avatar de %{target}" reopen_report: "%{name} a rouvert le signalement %{target}" reset_password_user: "%{name} a réinitialisé le mot de passe de %{target}" - resolve_report: "%{name} a résolu la dénonciation de %{target}" + resolve_report: "%{name} a résolu le signalement %{target}" silence_account: "%{name} a mis le compte %{target} en mode silence" suspend_account: "%{name} a suspendu le compte %{target}" unassigned_report: "%{name} a désassigné le signalement %{target}" @@ -436,9 +438,17 @@ fr: suspensions: bad_acct_msg: La valeur de confirmation n'a pas correspondu. Êtes-vous certain de suspendre le bon compte ? hint_html: 'Pour confirmer la suspension du compte, veuillez entrer %{value} dans le champ ci-dessous :' - proceed: Traité + proceed: Confirmer title: Suspension de %{acct} warning_html: 'Suspendre ce compte effacera <strong>irréversiblement</strong> les données de ce compte, ce qui inclut :' + tags: + accounts: Comptes + hidden: Masqué + hide: Masquer dans l'annuaire + name: Hashtag + title: Hashtags + unhide: Afficher dans l'annuaire + visible: Visible title: Administration admin_mailer: new_report: @@ -517,6 +527,15 @@ fr: success_msg: Votre compte a été supprimé avec succès warning_html: Seule la suppression du contenu depuis cette instance est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-ligne ainsi que ceux n’étant plus abonnés à vos publications ne mettront pas leur base de données à jour. warning_title: Disponibilité du contenu disséminé + directories: + directory: Annuaire des profils + explanation: Découvrir des utilisateurs en se basant sur leurs centres d'intérêt + explore_mastodon: Explorer %{title} + most_popular: Les plus populaires + most_recently_active: Les actifs les plus récents + people: + one: "%{count} personne" + other: "%{count} personne" errors: '403': Vous n’avez pas accès à cette page. '404': La page que vous recherchez n’existe pas. diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 86c07ad89..29d03859d 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -48,6 +48,7 @@ gl: other: Seguidoras following: Seguindo joined: Uneuse %{date} + last_active: última actividade link_verified_on: A propiedade de esta ligazón foi comprobada en %{date} media: Medios moved_html: "%{name} mudouse a %{new_profile_link}:" @@ -114,6 +115,7 @@ gl: media_attachments: Anexos de medios memorialize: Convertir a lembranza moderation: + active: Activa all: Todo silenced: Acalado suspended: Suspendido @@ -213,11 +215,11 @@ gl: image_hint: PNG ate 50KB listed: Listado new: - title: Engadir novo emoji personalizado + title: Engadir novo emoji persoalizado overwrite: Sobrescribir shortcode: Código corto shortcode_hint: Cando menos 2 caracteres, só caracteres alfanuméricos e subliñados - title: Emojis personalizados + title: Emojis persoalizados unlisted: Non listado update_failed_msg: Non se puido actualizar ese emoji updated_msg: Actualizouse correctamente o emoji! @@ -361,7 +363,7 @@ gl: username: Nome de usuaria de contacto custom_css: desc_html: Modificar o aspecto con CSS cargado en cada páxina - title: CSS personalizado + title: CSS persoalizado hero: desc_html: Mostrado na portada. Recoméndase 600x100px como mínimo. Si non se establece, mostrará a imaxe por omisión da instancia title: Imáxe Heróe @@ -398,13 +400,13 @@ gl: title: Descrición da instancia site_description_extended: desc_html: Un bo lugar para o seu código de conducta, regras, guías e outras cousas que distingan a súa instancia. Pode utilizar etiquetas HTML - title: Información extendida da personalización + title: Información extendida da persoalización site_short_description: desc_html: Mostrado na barra lateral e nas etiquetas meta. Describe o que é Mastodon e que fai especial a este servidor nun só parágrafo. Si está baldeiro, mostrará a descrición da instancia. title: Descrición curta da instancia site_terms: desc_html: Pode escribir a súa propia política de intimidade, termos de servizo ou aclaracións legais. Pode utilizar etiquetas HTML - title: Termos de servizo personalizados + title: Termos de servizo persoalizados site_title: Nome da instancia thumbnail: desc_html: Utilizado para vistas previsas vía OpenGraph e API. Recoméndase 1200x630px @@ -439,6 +441,14 @@ gl: proceed: Proceder title: Suspender %{acct} warning_html: 'Ao suspender esta conta eliminará <strong>de xeito irreversible</strong> os datos de esta conta, que inclúe:' + tags: + accounts: Contas + hidden: Ocultas + hide: Ocultar do directorio + name: Etiqueta + title: Etiquetas + unhide: Mostrar en directorio + visible: Visible title: Administración admin_mailer: new_report: @@ -517,6 +527,15 @@ gl: success_msg: A súa conta eliminouse correctamente warning_html: Só se garantiza a eliminación de contido de esta instancia. O contido que foi compartido con outras instancias é probable que deixe rastros. O servidores fora de liña e servidores que se desuscribiron das súas actualizacións non actualizarán as súas bases de datos. warning_title: Dispoñibilidade do contido espallado + directories: + directory: Directorio de perfil + explanation: Descubra usuarias según o seu interese + explore_mastodon: Explorar %{title} + most_popular: Máis popular + most_recently_active: Máis activa recentemente + people: + one: "%{count} persoa" + other: "%{count} persoas" errors: '403': Non ten permiso para ver esta páxina. '404': A páxina que está a buscar non existe. @@ -806,7 +825,7 @@ gl: <p>Toda a información que recollemos podería ser utilizada dos seguintes xeitos:</p> <ul> - <li>Para proporcionar a funcionabiliade básica de Mastodon. Só pode interactuar co contido de outra xente e publicar o seu propio contido si está conectada. Por exemplo, podería seguir outra xente e ver as súas publicacións combinadas nunha liña temporal inicial personalizada.</li> + <li>Para proporcionar a funcionabiliade básica de Mastodon. Só pode interactuar co contido de outra xente e publicar o seu propio contido si está conectada. Por exemplo, podería seguir outra xente e ver as súas publicacións combinadas nunha liña temporal inicial persoalizada.</li> <li>Para axudar a moderar a comunidade, por exemplo comparando o seu enderezo IP con outros coñecidos para evitar esquivar os rexeitamentos ou outras infraccións.</li> <li>O endero de correo electrónico que nos proporciona podería ser utilizado para enviarlle información, notificacións sobre outra xente que interactúa cos seus contidos ou lle envía mensaxes, e para respostar a consultas, e/ou outras cuestións ou peticións.</li> </ul> @@ -815,7 +834,7 @@ gl: <h3 id="protect">Cómo proxetemos os seus datos?</h3> - <p>Implementamos varias medidas de seguridade para protexer os seus datos personais cando introduce, envía ou accede a súa información personal. Entre outras medidas, a súa sesión de navegación, así como o tráfico entre os seus aplicativos e o API están aseguradas mediante SSL, e o seu contrasinal está camuflado utilizando un algoritmo potente de unha sóa vía. Pode habilitar a autenticación de doble factor para protexer o acceso a súa conta aínda máis.</p> + <p>Implementamos varias medidas de seguridade para protexer os seus datos personais cando introduce, envía ou accede a súa información persoal. Entre outras medidas, a súa sesión de navegación, así como o tráfico entre os seus aplicativos e o API están aseguradas mediante SSL, e o seu contrasinal está camuflado utilizando un algoritmo potente de unha sóa vía. Pode habilitar a autenticación de doble factor para protexer o acceso a súa conta aínda máis.</p> <hr class="spacer" /> @@ -900,7 +919,7 @@ gl: title: Leve o ficheiro welcome: edit_profile_action: Configurar perfil - edit_profile_step: Vostede pode personalizar o seu perfil subindo un avatar, cabeceira, cambiar o seu nome público e aínda máis. Si restrinxe a súa conta pode revisar a conta das personas que solicitan seguilas antes de permitirlles o acceso aos seus toots. + edit_profile_step: Vostede pode persoalizar o seu perfil subindo un avatar, cabeceira, cambiar o seu nome público e aínda máis. Si restrinxe a súa conta pode revisar a conta das personas que solicitan seguilas antes de permitirlles o acceso aos seus toots. explanation: Aquí ten alunhas endereitas para ir aprendendo final_action: Comece a publicar final_step: 'Publique! Incluso sin seguidoras as súas mensaxes serán vistas por outras, por exemplo na liña temporal local e nas etiquetas. Podería presentarse no #fediverso utilizando a etiqueta #introductions.' diff --git a/config/locales/ja.yml b/config/locales/ja.yml index dc2e015b5..06c8d28d7 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -48,6 +48,7 @@ ja: other: フォロワー following: フォロー中 joined: "%{date} に登録" + last_active: 最後の活動 link_verified_on: このリンクの所有権は %{date} に確認されました media: メディア moved_html: "%{name} さんは引っ越しました %{new_profile_link}:" @@ -114,6 +115,7 @@ ja: media_attachments: 添付されたメディア memorialize: 追悼アカウント化 moderation: + active: 有効 all: すべて silenced: サイレンス中 suspended: 停止中 @@ -439,6 +441,14 @@ ja: proceed: 完全に活動停止させる title: "%{acct} を停止" warning_html: 'このアカウントを停止すると、このアカウントから次のようなデータが<strong>不可逆的に</strong>削除されます:' + tags: + accounts: アカウント + hidden: 非表示 + hide: ディレクトリから隠す + name: ハッシュタグ + title: ハッシュタグ + unhide: ディレクトリに表示する + visible: 表示 title: 管理 admin_mailer: new_report: @@ -517,6 +527,14 @@ ja: success_msg: アカウントは正常に削除されました warning_html: 削除が保証されるのはこのインスタンス上のコンテンツのみです。他のインスタンス等、外部に広く共有されたコンテンツについては痕跡が残ることがあります。また、現在接続できないサーバーや、あなたの更新を受け取らなくなったサーバーに対しては、削除は反映されません。 warning_title: 共有されたコンテンツについて + directories: + directory: ディレクトリ + explore_mastodon: "%{title}を探索" + most_popular: 人気順 + most_recently_active: 直近の活動順 + people: + one: "%{count} 人" + other: "%{count} 人" errors: '403': このページを表示する権限がありません。 '404': お探しのページは見つかりませんでした。 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index a396a41da..b1a34efbd 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -48,6 +48,7 @@ nl: other: Volgers following: Volgend joined: Geregistreerd in %{date} + last_active: laatst actief link_verified_on: Eigendom van deze link is gecontroleerd op %{date} media: Media moved_html: "%{name} is verhuisd naar %{new_profile_link}:" @@ -114,6 +115,7 @@ nl: media_attachments: Mediabijlagen memorialize: In gedenkpagina veranderen moderation: + active: Actief all: Alles silenced: Genegeerd suspended: Opgeschort @@ -179,7 +181,7 @@ nl: destroy_status: Toot van %{target} is door %{name} verwijderd disable_2fa_user: Vereisten tweestapsverificatie van %{target} zijn door %{name} uitgeschakeld disable_custom_emoji: Emoji %{target} is door %{name} uitgeschakeld - disable_user: Aanmelden voor %{target} is door %{name} uitgeschakeld + disable_user: Inloggen voor %{target} is door %{name} uitgeschakeld enable_custom_emoji: Emoji %{target} is door %{name} ingeschakeld enable_user: Inloggen voor %{target} is door %{name} ingeschakeld memorialize_account: Account %{target} is door %{name} in een gedenkpagina veranderd @@ -439,6 +441,14 @@ nl: proceed: Ga verder title: "%{acct} opschorten" warning_html: 'Door het opschorten van dit account worden gegevens van dit account <strong>permanent</strong> verwijderd, waaronder:' + tags: + accounts: Accounts + hidden: Verborgen + hide: Niet in gebruikersgids tonen + name: Hashtag + title: Hashtags + unhide: In gebruikersgids tonen + visible: Zichtbaar title: Beheer admin_mailer: new_report: @@ -469,12 +479,12 @@ nl: didnt_get_confirmation: Geen bevestigingsinstructies ontvangen? forgot_password: Wachtwoord vergeten? invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan. - login: Aanmelden - logout: Afmelden - migrate_account: Naar een andere account verhuizen + login: Inloggen + logout: Uitloggen + migrate_account: Naar een ander account verhuizen migrate_account_html: Wanneer je dit account naar een ander account wilt doorverwijzen, kun je <a href="%{path}">dit hier instellen</a>. or: of - or_log_in_with: Of aanmelden met + or_log_in_with: Of inloggen met providers: cas: CAS saml: SAML @@ -517,6 +527,15 @@ nl: success_msg: Jouw account is succesvol verwijderd warning_html: We kunnen alleen garanderen dat jouw gegevens op deze server worden verwijderd. Berichten (toots), incl. media, die veel zijn gedeeld laten mogelijk sporen achter. Offline servers en servers die niet meer op jouw updates zijn geabonneerd zullen niet hun databases updaten. warning_title: Verwijdering gegevens op andere servers + directories: + directory: Gebruikersgids + explanation: Ontdek gebruikers aan de hand van hun interesses + explore_mastodon: "%{title} verkennen" + most_popular: Meest populair + most_recently_active: Recentelijk actief + people: + one: "%{count} gebruikers" + other: "%{count} gebruikers" errors: '403': Jij hebt geen toestemming om deze pagina te bekijken. '404': De pagina waarnaar jij op zoek bent bestaat niet. @@ -876,13 +895,13 @@ nl: month: "%b %Y" two_factor_authentication: code_hint: Voer de code in die door de authenticatie-app gegenereerd is - description_html: Na het instellen van <strong>tweestapsverificatie</strong>, kun jij je alleen aanmelden als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode. + description_html: Na het instellen van <strong>tweestapsverificatie</strong>, kun je alleen inloggen als je jouw mobiele telefoon bij je hebt. Hiermee genereer je namelijk de in te voeren aanmeldcode. disable: Uitschakelen enable: Inschakelen enabled: Tweestapsverificatie is ingeschakeld enabled_success: Inschakelen tweestapsverificatie geslaagd generate_recovery_codes: Herstelcodes genereren - instructions_html: "<strong>Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon</strong>. Van nu af aan genereert deze app aanmeldcodes die je bij het aanmelden moet invoeren." + instructions_html: "<strong>Scan deze QR-code in Google Authenticator of een soortgelijke app op jouw mobiele telefoon</strong>. Van nu af aan genereert deze app aanmeldcodes die je bij het inloggen moet invoeren." lost_recovery_codes: Met herstelcodes kun je toegang tot jouw account krijgen wanneer je jouw telefoon bent kwijtgeraakt. Wanneer je jouw herstelcodes bent kwijtgeraakt, kan je ze hier opnieuw genereren. Jouw oude herstelcodes zijn daarna ongeldig. manual_instructions: Voor het geval je de QR-code niet kunt scannen en het handmatig moet invoeren, vind je hieronder geheime code in gewone tekst. recovery_codes: Herstelcodes back-uppen diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 1d5325876..9e798067f 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -48,6 +48,7 @@ oc: other: Seguidors following: Abonaments joined: Arribèt en %{date} + last_active: darrièra activitat link_verified_on: La proprietat d’aqueste ligam foguèt verificada lo %{date} media: Mèdias moved_html: "%{name} a mudat a %{new_profile_link} :" @@ -114,9 +115,10 @@ oc: media_attachments: Mèdias enviats memorialize: Passar en memorial moderation: - all: Tot - silenced: Rescondut - suspended: Suspendut + active: Actius + all: Totes + silenced: Resconduts + suspended: Suspenduts title: Moderacion moderation_notes: Nòtas de moderacion most_recent_activity: Activitat mai recenta @@ -439,6 +441,14 @@ oc: proceed: Tractat title: Suspension de %{acct} warning_html: 'Suspendre aqueste compte suprimirà <strong>irreversiblament</strong> las donadas del compte, aquò compren :' + tags: + accounts: Comptes + hidden: Amagat + hide: Amagar dins l’annuari + name: Etiqueta + title: Etiquetas + unhide: Aparéisser dins l’annuari + visible: Visible title: Administracion admin_mailer: new_report: @@ -573,6 +583,15 @@ oc: success_msg: Compte ben suprimit warning_html: La supression del contengut d’aquesta instància es sola assegurada. Lo contengut fòrça partejat daissarà probablament de traças. Los servidors fòra-linha e los que vos sègon pas mai auràn pas la mesa a jorn de lor basa de donada. warning_title: Disponibilitat del contengut difusat + directories: + directory: Annuari de perfils + explanation: Trobar d’utilizaires segon lor interèsses + explore_mastodon: Explorar %{title} + most_popular: Mai populars + most_recently_active: Mai actius recentament + people: + one: "%{count} persona" + other: "%{count} personas" errors: '403': Avètz pas l’autorizacion de veire aquesta pagina. '404': La pagina que recercatz existís pas. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 14b1d8087..e0bf082b2 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -237,6 +237,7 @@ pl: config: Konfiguracja feature_deletions: Usuwanie kont feature_invites: Zaproszenia + feature_profile_directory: Katalog profilów feature_registrations: Rejestracja feature_relay: Przekazywanie federacji features: Możliwości @@ -382,6 +383,9 @@ pl: preview_sensitive_media: desc_html: Podgląd odnośników na innych instancjach będzie wyświetlał miniaturę nawet jeśli zawartość multimedialna zostanie oznaczona jako wrażliwa title: Wyświetlaj zawartość wrażliwą w podglądzie OpenGraph + profile_directory: + desc_html: Pozwalaj na poznawanie użytkowników + title: Włącz katalog profilów registrations: closed_message: desc_html: Wyświetlana na stronie głównej, gdy możliwość otwarej rejestracji nie jest dostępna. Możesz korzystać z tagów HTML diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 546a5bd14..a895d38d0 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -64,7 +64,7 @@ ca: password: Contrasenya phrase: Paraula clau o frase setting_auto_play_gif: Reproducció automàtica de GIFs animats - setting_boost_modal: Mostra la finestra de confirmació abans d'un retoot + setting_boost_modal: Mostra la finestra de confirmació abans d'impulsar setting_default_language: Llengua de les publicacions setting_default_privacy: Privacitat de les publicacions setting_default_sensitive: Marca sempre els elements multimèdia com a sensibles diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index b200dfb48..b8ad23b32 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -8,6 +8,7 @@ co: bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu context: Cuntestu·i induve u filtru deve esse applicatu digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti + discoverable_html: L'<a href="%{path}" target="_blank">annuariu</a> permette à a ghjente di truvà conti à partesi d'interessi è d'attività. Ci vole à avè almenu %{min_followers} abbunati email: Avete da riceve un'e-mail di cunfirmazione fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile header: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px @@ -18,6 +19,7 @@ co: password: Ci volenu almenu 8 caratteri phrase: Sarà trovu senza primura di e maiuscule o di l'avertimenti scopes: L'API à quelle l'applicazione averà accessu. S'è voi selezziunate un parametru d'altu livellu, un c'hè micca bisognu di selezziunà quell'individuali. + setting_aggregate_reblogs: Ùn mustrà micca e nove spartere per i statuti chì sò stati spartuti da pocu (tocca solu e spartere più ricente) setting_default_language: A lingua di i vostri statuti pò esse induvinata autumaticamente, mà ùn marchja micca sempre bè setting_display_media_default: Piattà i media marcati cum'è sensibili setting_display_media_hide_all: Sempre piattà tutti i media @@ -48,6 +50,7 @@ co: context: Cuntesti di u filtru current_password: Chjave d’accessu attuale data: Dati + discoverable: Arregistrà stu contu indè l'annuariu display_name: Nome pubblicu email: Indirizzu e-mail expires_in: Spira dopu à @@ -63,6 +66,7 @@ co: otp_attempt: Codice d’identificazione à dui fattori password: Chjave d’accessu phrase: Parolla-chjave o frasa + setting_aggregate_reblogs: Gruppà e spartere indè e linee setting_auto_play_gif: Lettura autumatica di i GIF animati setting_boost_modal: Mustrà una cunfirmazione per sparte un statutu setting_default_language: Lingua di pubblicazione diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index b4f2e04c0..1e58f4253 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -8,6 +8,7 @@ cs: 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 + discoverable_html: <a href="%{path}" target="_blank">Adresář</a> dovoluje lidem najít účty podle zájmů a aktivity. Vyžaduje alespoň %{min_followers} sledovatelů 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šen na %{dimensions} px @@ -18,6 +19,7 @@ cs: password: Použijte alespoň 8 znaků phrase: Shoda bude nalezena bez ohledu na velikost písmen v těle tootu či varování o obsahu scopes: Které API bude aplikace povolena používat. Pokud vyberete rozsah nejvyššího stupně, nebudete je muset vybírat po jednom. + setting_aggregate_reblogs: Nezobrazovat nové boosty pro tooty, které byly nedávno boostnuty (ovlivňuje pouze nově přijaté boosty) setting_default_language: Jazyk vašich tootů může být detekován automaticky, není to však vždy přesné setting_display_media_default: Skrývat média označená jako citlivá setting_display_media_hide_all: Vždy skrývat všechna média @@ -48,6 +50,7 @@ cs: context: Kontexty filtrů current_password: Současné heslo data: Data + discoverable: Zveřejnit tento účet v adresáři display_name: Zobrazované jméno email: E-mailová adresa expires_in: Expirovat po @@ -63,6 +66,7 @@ cs: otp_attempt: Dvoufaktorový kód password: Heslo phrase: Klíčové slovo či fráze + setting_aggregate_reblogs: Seskupovat boosty v časových osách setting_auto_play_gif: Automaticky přehrávat animace GIF setting_boost_modal: Zobrazovat před boostnutím potvrzovací okno setting_default_language: Jazyk příspěvků diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 8dfb1ddec..29a4b7651 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -19,6 +19,8 @@ da: phrase: Vil blive parret uanset om der er store eller små bogstaver i teksten eller om der er en advarsel om et trut scopes: Hvilke APIs applikationen vil få adgang til. Hvis du vælger et højtlevel omfang, behøver du ikke vælge enkeltstående. setting_default_language: Sproget for dine trut kan blive fundet automatisk, men det er ikke altid præcist + setting_display_media_default: Skjul medier markeret som følsomt + setting_display_media_hide_all: Skjul altid alle medier setting_hide_network: Hvem du følger og hvem der følger dig vil ikke blive vist på din profil setting_noindex: Påvirker din offentlige profil og status sider setting_theme: Påvirker hvordan Mastodon ser ud når du er logget ind via en hvilken som helst enhed. diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index a13b44237..599b2b5c7 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -8,6 +8,7 @@ el: bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου + discoverable_html: "Ο <a href=\"%{path}\" target=\"_blank\">κατάλογος</a> \nσου επιτρέπει να βρεις λογαριασμούς βάσει ενδιαφερόντων και δραστηριότητας. Απαιτεί τουλάχιστον %{min_followers} ακόλουθους" email: Θα σου σταλεί email επιβεβαίωσης fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px @@ -18,6 +19,7 @@ el: password: Χρησιμοποίησε τουλάχιστον 8 χαρακτήρες phrase: Θα ταιριάζει ανεξαρτήτως πεζών/κεφαλαίων ή προειδοποίησης περιεχομένου του τουτ scopes: Ποια API θα επιτρέπεται στην εφαρμογή να χρησιμοποιήσεις. Αν επιλέξεις κάποιο υψηλό εύρος εφαρμογής, δε χρειάζεται να επιλέξεις και εξειδικευμένα. + setting_aggregate_reblogs: Απόκρυψη των νέων προωθήσεωνγια τα τουτ που έχουν προωθηθεί πρόσφατα (επηρεάζει μόνο τις νέες προωθήσεις) setting_default_language: Η γλώσσα των τουτ σου μπορεί να ανιχνευτεί αυτόματα αλλά δεν είναι πάντα ακριβές setting_display_media_default: Απόκρυψη ευαίσθητων πολυμέσων setting_display_media_hide_all: Μόνιμη απόκρυψη όλων των πολυμέσων @@ -48,6 +50,7 @@ el: context: Πλαίσια φιλτραρίσματος current_password: Τρέχον συνθηματικό data: Δεδομένα + discoverable: Εμφάνιση αυτού του λογαριασμού στον κατάλογο display_name: Όνομα εμφάνισης email: Διεύθυνση email expires_in: Λήξη μετά από @@ -63,6 +66,7 @@ el: otp_attempt: Κωδικός δυο παραγόντων password: Συνθηματικό phrase: Λέξη ή φράση κλειδί + setting_aggregate_reblogs: Ομαδοποίηση προωθήσεων στις ροές setting_auto_play_gif: Αυτόματη αναπαραγωγή των GIF setting_boost_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν την προώθηση setting_default_language: Γλώσσα δημοσιεύσεων diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index e8ddc075e..b78d2dd81 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -8,17 +8,23 @@ eo: bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto + email: Vi ricevos konfirman retmesaĝon fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi irreversible: Elfiltritaj mesaĝoj malaperos por ĉiam, eĉ se la filtrilo estas poste forigita locale: La lingvo de la uzant-interfaco, retmesaĝoj kaj puŝ-sciigoj locked: Vi devos aprobi ĉiun peton de sekvado mane + password: Uzu almenaŭ 8 signojn phrase: Estos provita senzorge pri la uskleco de teksto aŭ averto pri enhavo de mesaĝo setting_default_language: La lingvo de viaj mesaĝoj povas esti aŭtomate detektitaj, sed tio ne ĉiam ĝustas + setting_display_media_default: Kaŝi aŭdovidaĵojn markitajn kiel tiklaj + setting_display_media_hide_all: Ĉiam kaŝi ĉiujn aŭdovidaĵojn + setting_display_media_show_all: Ĉiam montri aŭdovidaĵojn markitajn kiel tiklaj setting_hide_network: Tiuj, kiujn vi sekvas, kaj tiuj, kiuj sekvas vin ne estos videblaj en via profilo setting_noindex: Influas vian publikan profilon kaj mesaĝajn paĝojn setting_theme: Influas kiel Mastodon aspektas post ensaluto de ajna aparato. + username: Via uzantnomo estos unika ĉe %{domain} whole_word: Kiam la vorto aŭ frazo estas nur litera aŭ cifera, ĝi estos uzata nur se ĝi kongruas kun la tuta vorto imports: data: CSV-dosiero el alia nodo de Mastodon @@ -62,6 +68,11 @@ eo: setting_default_privacy: Mesaĝa videbleco setting_default_sensitive: Ĉiam marki aŭdovidaĵojn tiklaj setting_delete_modal: Montri fenestron por konfirmi antaŭ ol forigi mesaĝon + setting_display_media: Aŭdovidaĵa montrado + setting_display_media_default: Dekomenca + setting_display_media_hide_all: Kaŝi ĉiujn + setting_display_media_show_all: Montri ĉiujn + setting_expand_spoilers: Ĉiam grandigi mesaĝojn markitajn per avertoj pri enhavo setting_hide_network: Kaŝi viajn sekvantojn kaj sekvatojn setting_noindex: Ellistiĝi de retserĉila indeksado setting_reduce_motion: Malrapidigi animaciojn @@ -84,6 +95,7 @@ eo: follow_request: Sendi retmesaĝon kiam iu petas sekvi vin mention: Sendi retmesaĝon kiam iu mencias vin reblog: Sendi retmesaĝon kiam iu diskonigas vian mesaĝon + report: Sendi retmesaĝon kiam nova signalo estas sendita 'no': Ne required: mark: "*" diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index e9ab97c87..9537df88d 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -8,6 +8,7 @@ eu: bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen context: Iragazkia aplikatzeko testuinguru bat edo batzuk digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu + discoverable_html: <a href="%{path}" target="_blank">Direktorioa</a>k Jendea interesen eta jardueraren arabera aurkitzea ahalbidetzen du. Gutxienez %{min_followers} jarraitzaile behar dira bertan agertzeko email: Baieztapen e-mail bat bidaliko zaizu fields: 4 elementu bistaratu ditzakezu taula batean zure profilean header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da @@ -18,6 +19,7 @@ eu: 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_aggregate_reblogs: Ez erakutsi buktzada berriak berriki bultzada jaso duten tootentzat (berriki jasotako bultzadei eragiten die besterik ez) 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 @@ -48,6 +50,7 @@ eu: context: Iragazkiaren testuinguruak current_password: Oraingo pasahitza data: Datuak + discoverable: Zerrendatu kontu hau direktorioan display_name: Pantaila-izena email: E-mail helbidea expires_in: Iraungitzea @@ -63,6 +66,7 @@ eu: otp_attempt: Bi faktoreetako kodea password: Pasahitza phrase: Hitz edo esaldi gakoa + setting_aggregate_reblogs: Taldekatu bultzadak denbora-lerroetan setting_auto_play_gif: Erreproduzitu GIF animatuak automatikoki setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik setting_default_language: Argitalpenen hizkuntza diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 68f5dfede..d68bee6c8 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -8,6 +8,7 @@ fr: bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé context: Un ou plusieurs contextes où le filtre devrait s’appliquer digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence + discoverable_html: Le <a href="%{path}" target="_blank">répertoire</a> permet aux gens de trouver des comptes en se basant sur les intérêts et les activités. Nécessite au moins %{min_followers} 2 abonnés email: Vous recevrez un courriel de confirmation fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px @@ -18,6 +19,7 @@ fr: password: Utilisez au moins 8 caractères phrase: Sera trouvé sans que la case ou l’avertissement de contenu du pouet soit pris en compte scopes: À quelles APIs l’application sera autorisée à accéder. Si vous sélectionnez un périmètre de haut-niveau, vous n’avez pas besoin de sélectionner les individuels. + setting_aggregate_reblogs: Ne pas afficher de nouveaux repartagés pour les pouets qui ont été récemment repartagés (n'affecte que les repartagés nouvellement reçus) setting_default_language: La langue de vos pouets peut être détectée automatiquement, mais ça n’est pas toujours pertinent setting_display_media_default: Masquer les supports marqués comme sensibles setting_display_media_hide_all: Toujours masquer tous les médias @@ -48,6 +50,7 @@ fr: context: Contextes du filtre current_password: Mot de passe actuel data: Données + discoverable: Inscrire ce compte dans l'annuaire display_name: Nom public email: Adresse courriel expires_in: Expire après @@ -63,6 +66,7 @@ fr: otp_attempt: Code d’identification à deux facteurs password: Mot de passe phrase: Mot-clé ou phrase + setting_aggregate_reblogs: Repartagés en groupe dans la ligne de temps setting_auto_play_gif: Lire automatiquement les GIFs animés setting_boost_modal: Afficher une fenêtre de confirmation avant de partager setting_default_language: Langue de publication diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 04a0fffa3..35bf5e017 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -7,7 +7,8 @@ gl: avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada context: Un ou varios contextos onde se debería aplicar o filtro - digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe personal na súa ausencia + digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe persoal na súa ausencia + discoverable_html: O <a href="%{path}" target="_blank">directorio</a> permite atopar contas en función de intereses e actividade. Require ter ao menos %{min_followers} seguidoras email: Enviaráselle un correo-e de confirmación fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px @@ -18,6 +19,7 @@ gl: password: Utilice 8 caracteres ao menos phrase: Concordará independentemente das maiúsculas ou avisos de contido no toot scopes: A que APIs terá acceso a aplicación. Si selecciona un ámbito de alto nivel, non precisa seleccionar elementos individuais. + setting_aggregate_reblogs: Non mostrar novas promocións de toots que foron promocionados recentemente (só afecta a promocións recén recibidas) setting_default_language: Pódese detectar automáticamente o idioma dos seus toots, mais non sempre é preciso setting_display_media_default: Ocultar medios marcados como sensibles setting_display_media_hide_all: Ocultar sempre os medios @@ -26,7 +28,7 @@ gl: setting_noindex: Afecta ao seu perfil público e páxinas de estado setting_theme: Afecta ao aspecto de Mastodon en calquer dispositivo cando está conectada. username: O seu nome de usuaria será único en %{domain} - whole_word: Si a chave ou frase de paso é só alfanumérica, só se aplicará si concorda a palabra completa + whole_word: Se a chave ou frase de paso é só alfanumérica, só se aplicará se concorda a palabra completa imports: data: Ficheiro CSV exportado desde outra instancia Mastodon sessions: @@ -48,6 +50,7 @@ gl: context: Contextos do filtro current_password: Contrasinal actual data: Datos + discoverable: Incluír esta conta no directorio display_name: Nome mostrado email: enderezo correo electrónico expires_in: Caducidade despois de @@ -63,6 +66,7 @@ gl: otp_attempt: Código de Doble-Factor password: Contrasinal phrase: Palabra chave ou frase + setting_aggregate_reblogs: Agrupar promocións nas liñas temporais setting_auto_play_gif: Reprodución automática de GIFs animados setting_boost_modal: Pedir confirmación antes de promocionar setting_default_language: Idioma de publicación diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 01d12b14b..0fc1b5ba6 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -8,6 +8,7 @@ it: bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona context: Uno o più contesti nei quali il filtro dovrebbe essere applicato digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza + discoverable_html: La <a href="%{path}" target="_blank">directory</a> permette alle persone di trovare account in base a determinati interessi o attività. Richiede almeno %{min_followers} seguaci email: Ti manderemo una email di conferma fields: Puoi avere fino a 4 voci visualizzate come una tabella sul tuo profilo header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px @@ -48,6 +49,7 @@ it: context: Contesti del filtro current_password: Password corrente data: Data + discoverable: Inserisci questo account nella directory display_name: Nome visualizzato email: Indirizzo email expires_in: Scade dopo diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index a3ddef29b..07ae66c79 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -8,6 +8,7 @@ ja: bot: このアカウントは主に自動で動作し、人が見ていない可能性があります context: フィルターを適用する対象 (複数選択可) digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます + discoverable_html: <a href="%{path}" target="_blank">ディレクトリ</a> は興味や活動をもとにアカウントを見つけることを可能にします。 掲載には %{min_followers} 人以上のフォロワーが必要です email: 確認のメールが送信されます fields: プロフィールに表として4つまでの項目を表示することができます header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます" @@ -48,6 +49,7 @@ ja: context: 除外対象 current_password: 現在のパスワード data: データ + discoverable: ディレクトリに掲載する display_name: 表示名 email: メールアドレス expires_in: 有効期限 @@ -63,6 +65,7 @@ ja: otp_attempt: 二段階認証コード password: パスワード phrase: キーワードまたはフレーズ + setting_aggregate_reblogs: ブーストをまとめる setting_auto_play_gif: アニメーションGIFを自動再生する setting_boost_modal: ブーストする前に確認ダイアログを表示する setting_default_language: 投稿する言語 diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 487f6320b..972b98339 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -8,6 +8,7 @@ nl: bot: Dit is een geautomatiseerd account en wordt mogelijk niet gemonitord context: Een of meerdere locaties waar de filter actief moet zijn digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen + discoverable_html: In de <a href="%{path}" target="_blank">gebruikersgids</a> kunnen mensen andere accounts vinden aan de hand van interesses en activiteit. Dit vereist tenminste %{min_followers} volgers email: Je krijgt een bevestigingsmail fields: Je kan maximaal 4 items als een tabel op je profiel weergeven header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px @@ -18,6 +19,7 @@ nl: password: Gebruik tenminste 8 tekens phrase: Komt overeen ongeacht hoofd-/kleine letters of tekstwaarschuwingen scopes: Tot welke API's heeft de toepassing toegang. Wanneer je een toestemming van het bovenste niveau kiest, hoef je geen individuele toestemmingen meer te kiezen. + setting_aggregate_reblogs: Geen nieuwe boosts tonen voor toots die recentelijk nog zijn geboost (heeft alleen effect op nieuw ontvangen boosts) setting_default_language: De taal van jouw toots kan automatisch worden gedetecteerd, maar het is niet altijd accuraat setting_display_media_default: Als gevoelig gemarkeerde media verbergen setting_display_media_hide_all: Media altijd verbergen @@ -48,6 +50,7 @@ nl: context: Filterlocaties current_password: Huidig wachtwoord data: Gegevens + discoverable: Dit account in de gebruikersgids tonen display_name: Weergavenaam email: E-mailadres expires_in: Vervalt na @@ -63,6 +66,7 @@ nl: otp_attempt: Tweestaps-aanmeldcode password: Wachtwoord phrase: Trefwoord of zinsdeel + setting_aggregate_reblogs: Boosts in tijdlijnen groeperen setting_auto_play_gif: Speel geanimeerde GIF's automatisch af setting_boost_modal: Vraag voor het boosten van een toot een bevestiging setting_default_language: Taal van jouw toots diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index bb9e3529c..8694952e5 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -8,6 +8,7 @@ oc: bot: Avisar lo monde qu’aqueste compte es pas d’una persona context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia + discoverable_html: L’<a href="%{path}" target="_blank">annuari</a> permet al monde de trobar de comptes segon lor interèsses e activitats. Requerís almens %{min_followers} seguidors email: Vos mandarem un corrièl de confirmacion fields: Podètz far veire cap a 4 elements sus vòstre perfil header: PNG, GIF o JPG. Maximum %{size}. Serà retalhada en %{dimensions}px diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 9916ce13e..bbc95abb7 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -8,16 +8,18 @@ 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č + discoverable_html: Táto <a href="%{path}" target="_blank">databáza</a> umožňuje ľudom nájsť profily podľa záujmu a aktívnosti. Vyžaduje aby mali aspoň %{min_followers} sledovateľov 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šíš + irreversible: Vytriedené hlášky 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_aggregate_reblogs: Neukazuj nové povýšenia pre hlášky, ktoré už boli len nedávno povýšené (týka sa iba nanovo získaných povýšení) 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á @@ -48,6 +50,7 @@ sk: context: Triedenie kontextov current_password: Súčasné heslo data: Dáta + discoverable: Zaraď tento účet do databázy display_name: Meno email: Emailová adresa expires_in: Expirovať po @@ -63,8 +66,9 @@ sk: otp_attempt: Dvoj-faktorový overovací (2FA) kód password: Heslo phrase: Kľúčové slovo, alebo fráza - setting_auto_play_gif: Automaticky prehrávať animované GIFy - setting_boost_modal: Zobrazovať potvrdzovacie okno pred re-toot + setting_aggregate_reblogs: Zoskupuj povýšenia v časovej osi + setting_auto_play_gif: Automaticky prehrávaj animované GIFy + setting_boost_modal: Zobrazuj potvrdzovacie okno pred povýšením setting_default_language: Píšeš v jazyku setting_default_privacy: Súkromie príspevkov setting_default_sensitive: Označ všetky mediálne súbory ako chúlostivé diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 32bfcb8e1..135fee51f 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1,8 +1,8 @@ --- sk: about: - about_hashtag_html: Toto sú verejné toot príspevky otagované <strong>#%{hashtag}</strong>. Ak máš účet niekde vo fediverse, môžeš ich používať. - about_mastodon_html: Mastodon je sociálna sieť založená na otvorených webových protokoloch. Jej zrojový kód je otvorený a je decentralizovaná podobne ako email. + about_hashtag_html: Toto sú verejné hlášky otagované <strong>#%{hashtag}</strong>. Ak máš účet niekde vo fediverse, môžeš ich využívať. + about_mastodon_html: Mastodon je sociálna sieť založená na otvorených webových protokoloch a na slobodnom, otvorenom softvéri. Je decentralizovaná podobne ako email. about_this: O tejto instancii administered_by: 'Správcom je:' api: API @@ -16,12 +16,12 @@ sk: <h3>Pravidlá</h3> <p>Žiadne zatiaľ nie sú</p> features: - humane_approach_body: Poučený z chýb iných sociálnych sietí, Mastodon sa snaží bojovať s nekalým používaním siete vytváraním etických možností. + humane_approach_body: Poučený z chýb iných sociálnych sietí, Mastodon sa snaží bojovať so zneužívaním siete voľbou etických návrhov. humane_approach_title: Ľudskejší prístup - not_a_product_body: Mastodon nie je komerčná sieť. Žiadne reklamy, žiadne dolovanie dát, žiadne múry. Žiadna centrálna autorita. - not_a_product_title: Si človek, nie produkt - real_conversation_body: S 500 znakmi a podporou pre varovania pri obrázkoch a videách sa môžeš vyjadriť tak ako budeš chcieť. - real_conversation_title: Vytvorený pre reálnu konverzáciu + not_a_product_body: Mastodon nie je komerčná sieť. Žiadne reklamy, žiadne dolovanie dát, žiadne múry. Nieje tu žiadna centrálna autorita. + not_a_product_title: Si človekom, nie produktom + real_conversation_body: K dispozícii s 500 znakmi a podporou pre varovania o obsahu a médiách sa môžeš vyjadriť tak ako budeš chcieť. + real_conversation_title: Vytvorený pre naozajstnú konverzáciu within_reach_body: Viacero aplikácií pre iOS, Android a iné platformy, ktoré ti vďaka jednoduchému API ekosystému dovoľujú byť online so svojimi priateľmi kdekoľvek. within_reach_title: Stále v dosahu generic_description: "%{domain} je jeden server v sieti" @@ -49,8 +49,9 @@ sk: few: Sledovatelia one: Sledujúci other: Sledovatelia - following: Sledovaných + following: Sledovaní joined: Pridal/a sa %{date} + last_active: poslednýkrát aktívny link_verified_on: Vlastníctvo tohto odkazu bolo skontrolované %{date} media: Médiá moved_html: "%{name} účet bol presunutý na %{new_profile_link}:" @@ -118,6 +119,7 @@ sk: media_attachments: Prílohy memorialize: Zmeniť na "Navždy budeme spomínať" moderation: + active: Aktívny/a all: Všetko silenced: Umlčané suspended: Suspendované @@ -393,10 +395,10 @@ 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úť 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 + 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 hlášky z miestnej osi. + title: Ukázať celé známe fediversum na náhľade osi show_staff_badge: - desc_html: Zobraziť moderátorsku značku na užívateľovej stránke + desc_html: Zobraz moderátorsku značku na užívateľovej stránke title: Zobraziť značku moderátora site_description: desc_html: Oboznamujúci paragraf na hlavnej stránke a pri meta tagoch. Môžete použiť HTML kód, presnejšie <code>< a></code> a <code>< em> </code>. @@ -422,8 +424,8 @@ sk: back_to_account: Späť na účet batch: delete: Vymazať - nsfw_off: Obsah nieje chúlostivý - nsfw_on: Označ obeah aka chúlostivý + nsfw_off: Označ ako nechúlostivé + nsfw_on: Označ ako chúlostivé failed_to_execute: Nepodarilo sa vykonať media: title: Médiá @@ -444,6 +446,14 @@ sk: proceed: Pokračuj title: Zamraziť %{acct} warning_html: 'Zamrazením tohto účtu budú dáta na tomto účte <strong>nenávratne</strong> zmazané, zahŕňajúc:' + tags: + accounts: Účty + hidden: Skryté + hide: Ukri od databázy + name: Haštag + title: Haštagy + unhide: Ukáž v databázi + visible: Viditeľné title: Spravovanie admin_mailer: new_report: @@ -518,10 +528,20 @@ sk: bad_password_msg: Dobrý pokus, hakeri! Nesprávne heslo confirm_password: Napíšte svoje terajšie heslo pre overenie vašej identity description_html: Týmto <strong> natrvalo, nenavrátiteľne </strong> vymažeš obsah tvojho účtu, a deaktivuješ ho. Tvoja prezývka ale ostane rezervovaná ako prevencia pred budúcimi impersonáciami. - proceed: Vymazať účet - success_msg: Váš účet bol úspešne vymazaný - 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 + proceed: Vymaž účet + success_msg: Tvoj účet bol úspešne vymazaný + warning_html: Iba vymazanie obsahu z tejto konkrétnej instancie je zaručené. 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: Dostupnosť rozšírovaného obsahu + directories: + directory: Databáza profilov + explanation: Pátraj po užívateľoch podľa ich záujmov + explore_mastodon: Prebádaj %{title} + most_popular: Najpopulárnejšie + most_recently_active: Naposledy aktívni + people: + few: "%{count} ľudia" + one: "%{count} človek" + other: "%{count} ľudia" errors: '403': Nemáš povolenie na zobrazenie tejto stránky. '404': Stránka ktorú si hľadal/a sa tu nenachádza. @@ -716,21 +736,32 @@ sk: firefox: Mozilla Firefox generic: Neznámy prehliadač ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia Ovi Browser + opera: Opera otter: Prehliadač Otter + phantom_js: PhantomJS qq: QQ Prehliadač safari: Apple Safari + uc_browser: UCBrowser weibo: Sina/Tencent Weibo current_session: Aktuálna sezóna description: "%{browser} na %{platform}" explanation: Tieto sú prehliadače ktoré sú teraz prihlásené na tvoj Mastodon účet. ip: IP adresa platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry chrome_os: Google ChromeOS + firefox_os: Firefox OS ios: Apple iOS linux: GNU/Linux mac: MacOSX other: neznáma platforma windows: Microsoft Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Zamietni revoke_success: Sezóna úspešne zamietnutá title: Sezóny @@ -776,6 +807,7 @@ sk: reblog: Pozdvihnutie sa nedá pripnúť show_more: Ukáž viac sign_in_to_participate: Prihlás sa pre zapojenie do diskusie + title: '%{name}: „%{quote}"' visibilities: private: Iba pre sledovateľov private_long: Ukáž iba následovateľom @@ -788,13 +820,21 @@ sk: reblogged: vyzdvihnutý sensitive_content: Senzitívny obsah terms: - title: Podmienky užívania, a pravidlá o súkromí pre %{instance} + body_html: | + <h2>Podmienky súkromia</h2> + + <h3 id="collect">Aké informácie zbierame?</h3> + + <ul> + <li><em>Základné informácie o účte</em>: Ak sa na tomto serveri zaregistruješ, budeš môcť byť požiadaný/á zadať prezývku, emailovú adresu a heslo. Budeš tiež môcť zadať aj ďalšie profilové údaje, ako napríklad meno a životopis, a nahrať profilovú fotku aj obrázok v záhlaví. Tvoja prezývka, meno, životopis, profilová fotka a obrázok v záhlaví sú vždy zobrazené verejne.</li><li><em>Príspevky, sledovania a iné verejné informácie</em>: + title: Podmienky užívania, a pravidlá súkromia pre %{instance} themes: default: Mastodon mastodon-light: Mastodon (svetlý) time: formats: default: "%b %d, %R, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Pre potvrdenie teraz zadaj kód vygenerovaný pomocou tvojej overovacej aplikácie description_html: Ak povolíš <strong> dvoj-faktorové overovanie</strong>, na prihlásenie potom budeš potrebovať svoj telefón, ktorý vygeneruje prístupové kódy, čo musíš zadať. diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 14354f8a6..da621a910 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -30,18 +30,31 @@ sr: other_instances: Листа инстанци privacy_policy: Полиса приватности source_code: Изворни код - status_count_after: статуси + status_count_after: + few: статуси + many: статуси + one: статус + other: статуси status_count_before: Који су написали terms: Услови коришћења - user_count_after: корисници + user_count_after: + few: корисници + many: корисници + one: корисник + other: корисници user_count_before: Дом за what_is_mastodon: Шта је Мастодон? accounts: choices_html: "%{name}'s избори:" follow: Запрати - followers: Пратиоци + followers: + few: Пратиоци + many: Пратиоци + one: Пратиоц + other: Пратиоци following: Пратим joined: Придружио/ла се %{date} + link_verified_on: Власништво над овом везом је проверено %{date} media: Медији moved_html: "%{name} је прешао на %{new_profile_link}:" network_hidden: Ова информација није доступна @@ -50,7 +63,11 @@ sr: people_who_follow: Људи који прате %{name} pin_errors: following: Морате пратити ову особу ако хоћете да потврдите - posts: Трубе + posts: + few: Трубе + many: Трубе + one: Труба + other: Трубе posts_tab_heading: Трубе posts_with_replies: Трубе и одговори reserved_username: Корисничко име је резервисано @@ -112,9 +129,10 @@ sr: moderation_notes: Модераторске белешке most_recent_activity: Најскорија активност most_recent_ip: Најскорија IP адреса + no_limits_imposed: Нема ограничења not_subscribed: Није претплаћен outbox_url: Одлазно сандуче - perform_full_suspension: Изврши комплетно искључење + perform_full_suspension: Искључи profile_url: Адреса профила promote: Унапреди protocol: Протокол @@ -143,8 +161,10 @@ sr: report: пријава targeted_reports: Пријаве направљене о овом налогу silence: Ућуткај + silenced: Ућуткан statuses: Статуси subscribe: Претплати се + suspended: Суспендовани title: Налози unconfirmed_email: Непотврђена Е-пошта undo_silenced: Укини ћутање @@ -161,6 +181,7 @@ sr: create_domain_block: "%{name} је блокирао домен %{target}" create_email_domain_block: "%{name} је ставио на црну листу домен е-поште %{target}" demote_user: "%{name} је ражаловао корисника %{target}" + destroy_custom_emoji: "%{name} је уништио емоџи %{target}" destroy_domain_block: "%{name} је одблокирао домен %{target}" destroy_email_domain_block: "%{name} је ставио на белу листу домен е-поште %{target}" destroy_status: "%{name} је уклонио статус корисника %{target}" @@ -246,6 +267,8 @@ sr: title: Ново блокирање домена reject_media: Одбаци мултимедију reject_media_hint: Уклања локално ускладиштене мултимедијске фајлове и одбија да их скида убудуће. Небитно је за суспензију + reject_reports: Одбаци извештај + reject_reports_hint: Игнориши све извештаје који долазе са овог домена. Небитно је за суспензије severities: noop: Ништа silence: Ућуткавање @@ -290,8 +313,13 @@ sr: title: Позивнице relays: add_new: Додај нови релеј + delete: Обриши description_html: "<strong>Федерални релеј</strong> је посреднички сервер који размењује велике количине јавних труба између сервера на који је претплаћен и на који објављује.<strong>Може помоћи малим и средњим серверима да открију садржај из федиверса</strong>, који иначе захтева од локалних корисника да ручно пратити остале људе на удаљеним серверима." + disable: Искључи + disabled: Искључен + enable: Укључи enable_hint: Када се омогући, Ваш сервер ће бити претплаћен на све јавне трубе са овог релеја, и почеће да шаље своје јавне трубу на њега. + enabled: Укључен inbox_url: URL Релеја pending: Чека се одобрење релеја save_and_enable: Сачувај и омогући @@ -347,6 +375,9 @@ sr: hero: desc_html: Приказано на почетној страни. Препоручено је бар 600х100рх. Када се не одреди, враћа се на иконицу инстанце title: Лого слика + mascot: + desc_html: Приказано на више страна. Препоручено је бар 293×205px. Када није постављена, користи се подразумевана маскота + title: Слика маскоте peers_api_enabled: desc_html: Имена домена које је ова инстанца срела у федиверсу title: Објављуј списак откривених инстанци @@ -557,6 +588,7 @@ sr: resources: Ресурси generic: changes_saved_msg: Измене успешно сачуване! + copy: Копирај save_changes: Сними измене validation_errors: few: Нешто није баш како треба! Прегледајте %{count} грешке испод @@ -742,11 +774,23 @@ sr: statuses: attached: description: 'У прилогу: %{attached}' - image: "%{count} слике" - video: "%{count} видеа" + image: + few: "%{count} слика" + many: "%{count} слика" + one: "%{count} слику" + other: "%{count} слика" + video: + few: "%{count} видео записа" + many: "%{count} видео записа" + one: "%{count} видео запис" + other: "%{count} видео записа" boosted_from_html: Подржано од %{acct_link} content_warning: 'Упозорење на садржај: %{warning}' - disallowed_hashtags: 'садржи забрањене тарабе: %{tags}' + disallowed_hashtags: + few: 'садржи забрањене хештегове: %{tags}' + many: 'садржи забрањене хештегове: %{tags}' + one: 'садржи забрањени хештег: %{tags}' + other: 'садржи забрањене хештегове: %{tags}' language_detection: Аутоматскo откривање језика open_in_web: Отвори у вебу over_character_limit: ограничење од %{max} карактера прекорачено @@ -799,6 +843,7 @@ sr: backup_ready: explanation: Тражили сте потпуну резервну копију вашег Мастодон рачуна. Спремна за преузимање! subject: Ваша архива је спремна за преузимање + title: Извоз архиве welcome: edit_profile_action: Подеси профил edit_profile_step: Профил можете прилагодити постављањем аватара, заглавља, променом имена и још много тога. Ако желите да прегледате нове пратиоце пре него што буду дозвољени да вас прате, можете закључати свој налог. @@ -811,15 +856,19 @@ sr: review_preferences_step: Обавезно поставите своја подешавања, као што су какву Е-пошту желите да примите или на који ниво приватности желите да ваше поруке буду постављене. Ако немате морску болест или епилепсију, можете изабрати аутоматско покретање ГИФ-а. subject: Добродошли на Мастодон tip_bridge_html: Ако долазите са Твитера, можете пронаћи пријатеље користећи <a href="%{bridge_url}">апликацију за премошћавање</a>. Ово ради само ако и они користе исту апликацију! - tip_federated_timeline: Здружена временска линија је компетан увид у Мастодонову мрежу. Али она само укључује људе на којој су ваше комшије претплаћене, тако да није комплетна. + tip_federated_timeline: Здружена временска линија пружа комплетан увид у Мастодонову мрежу. Али она само укључује људе на које су ваше комшије претплаћене, тако да није комплетна. tip_following: Аутоматски пратите админа/не вашег сервера. Да пронађете занимљиве људе, проверите локалне и здружене временске линије. tip_local_timeline: Локална временска линија је комплетан увид људи у %{instance}. Ово су вам прве комшије! tip_mobile_webapp: Ако вам мобилни претраживач предложи да додате Мастодон на Ваш почетни екран, добијаћете мобилна обавештења. Делује као изворна апликација на много начина! tips: Савети title: Добродошли, %{name}! users: + follow_limit_reached: Не можете пратити више од %{limit} људи invalid_email: Адреса Е-поште није исправна invalid_otp_token: Неисправни двофакторски код otp_lost_help_html: Ако изгубите приступ за оба, можете ступити у контакт са %{email} seamless_external_login: Пријављени сте путем спољашње услуге, тако да лозинка и подешавања Е-поште нису доступни. signed_in_as: 'Пријављен/а као:' + verification: + explanation_html: 'Можете <strong>извршити проверу да сте Ви власник веза у Вашем профилу</strong>. Да би то радило, повезани веб сајт мора да садржи везу назад ка Вашем Мастодон профилу. Веза назад <strong>мора</strong> да има <code>rel="me"</code> атрибут. Текстуелни садржај везе није битан. Ево примера:' + verification: Провера diff --git a/config/routes.rb b/config/routes.rb index 6b33d8baf..c0cfbf465 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -179,6 +179,7 @@ Rails.application.routes.draw do post :disable post :redownload post :remove_avatar + post :remove_header post :memorialize end diff --git a/config/settings.yml b/config/settings.yml index bfccd2cc7..2cac28b63 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -15,6 +15,7 @@ defaults: &defaults site_contact_username: '' site_contact_email: '' open_registrations: true + profile_directory: true closed_registrations_message: '' open_deletion: true timeline_preview: false diff --git a/db/migrate/20181207011115_downcase_custom_emoji_domains.rb b/db/migrate/20181207011115_downcase_custom_emoji_domains.rb new file mode 100644 index 000000000..c9db3800d --- /dev/null +++ b/db/migrate/20181207011115_downcase_custom_emoji_domains.rb @@ -0,0 +1,7 @@ +class DowncaseCustomEmojiDomains < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + CustomEmoji.in_batches.update_all('domain = lower(domain)') + end +end diff --git a/db/schema.rb b/db/schema.rb index 6e30ed120..4d02aad0e 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_12_04_215309) do +ActiveRecord::Schema.define(version: 2018_12_07_011115) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb new file mode 100644 index 000000000..34114cc85 --- /dev/null +++ b/spec/controllers/activitypub/collections_controller_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::CollectionsController, type: :controller do + describe 'POST #show' do + let(:account) { Fabricate(:account) } + + context 'id is "featured"' do + it 'returns 200 with "application/activity+json"' do + post :show, params: { id: 'featured', account_username: account.username } + + expect(response).to have_http_status(200) + expect(response.content_type).to eq 'application/activity+json' + end + end + + context 'id is not "featured"' do + it 'returns 404' do + post :show, params: { id: 'hoge', account_username: account.username } + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/controllers/admin/action_logs_controller_spec.rb b/spec/controllers/admin/action_logs_controller_spec.rb new file mode 100644 index 000000000..4720ed2e2 --- /dev/null +++ b/spec/controllers/admin/action_logs_controller_spec.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Admin::ActionLogsController, type: :controller do + describe 'GET #index' do + it 'returns 200' do + sign_in Fabricate(:user, admin: true) + get :index, params: { page: 1 } + + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/controllers/admin/dashboard_controller_spec.rb b/spec/controllers/admin/dashboard_controller_spec.rb new file mode 100644 index 000000000..73b50e721 --- /dev/null +++ b/spec/controllers/admin/dashboard_controller_spec.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Admin::DashboardController, type: :controller do + describe 'GET #index' do + it 'returns 200' do + sign_in Fabricate(:user, admin: true) + get :index + + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb index 34b51a6aa..449a699e4 100644 --- a/spec/controllers/admin/invites_controller_spec.rb +++ b/spec/controllers/admin/invites_controller_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rails_helper' describe Admin::InvitesController do @@ -40,4 +42,18 @@ describe Admin::InvitesController do expect(invite.reload).to be_expired end end + + describe 'POST #deactivate_all' do + it 'expires all invites, then redirects to admin_invites_path' do + invites = Fabricate.times(2, :invite, expires_at: nil) + + post :deactivate_all + + invites.each do |invite| + expect(invite.reload).to be_expired + end + + expect(response).to redirect_to admin_invites_path + end + end end diff --git a/spec/controllers/admin/suspensions_controller_spec.rb b/spec/controllers/admin/suspensions_controller_spec.rb index babb1ed96..1bc33e490 100644 --- a/spec/controllers/admin/suspensions_controller_spec.rb +++ b/spec/controllers/admin/suspensions_controller_spec.rb @@ -7,6 +7,13 @@ describe Admin::SuspensionsController do sign_in Fabricate(:user, admin: true), scope: :user end + describe 'GET #new' do + it 'returns 200' do + get :new, params: { account_id: Fabricate(:account).id, report_id: Fabricate(:report).id } + expect(response).to have_http_status(200) + end + end + describe 'POST #create' do it 'redirects to admin accounts page' do account = Fabricate(:account, suspended: false) diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb new file mode 100644 index 000000000..3af994071 --- /dev/null +++ b/spec/controllers/admin/tags_controller_spec.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Admin::TagsController, type: :controller do + render_views + + before do + sign_in Fabricate(:user, admin: true) + end + + describe 'GET #index' do + before do + account_tag_stat = Fabricate(:tag).account_tag_stat + account_tag_stat.update(hidden: hidden, accounts_count: 1) + get :index, params: { hidden: hidden } + end + + context 'with hidden tags' do + let(:hidden) { true } + + it 'returns status 200' do + expect(response).to have_http_status(200) + end + end + + context 'without hidden tags' do + let(:hidden) { false } + + it 'returns status 200' do + expect(response).to have_http_status(200) + end + end + end + + describe 'POST #hide' do + let(:tag) { Fabricate(:tag) } + + before do + tag.account_tag_stat.update(hidden: false) + post :hide, params: { id: tag.id } + end + + it 'hides tag' do + tag.reload + expect(tag).to be_hidden + end + + it 'redirects to admin_tags_path' do + expect(response).to redirect_to(admin_tags_path(controller.instance_variable_get(:@filter_params))) + end + end + + describe 'POST #unhide' do + let(:tag) { Fabricate(:tag) } + + before do + tag.account_tag_stat.update(hidden: true) + post :unhide, params: { id: tag.id } + end + + it 'unhides tag' do + tag.reload + expect(tag).not_to be_hidden + end + + it 'redirects to admin_tags_path' do + expect(response).to redirect_to(admin_tags_path(controller.instance_variable_get(:@filter_params))) + end + end +end diff --git a/spec/controllers/remote_interaction_controller_spec.rb b/spec/controllers/remote_interaction_controller_spec.rb new file mode 100644 index 000000000..bb0074b11 --- /dev/null +++ b/spec/controllers/remote_interaction_controller_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe RemoteInteractionController, type: :controller do + render_views + + let(:status) { Fabricate(:status) } + + describe 'GET #new' do + it 'returns 200' do + get :new, params: { id: status.id } + expect(response).to have_http_status(200) + end + end + + describe 'POST #create' do + context '@remote_follow is valid' do + it 'returns 302' do + allow_any_instance_of(RemoteFollow).to receive(:valid?) { true } + allow_any_instance_of(RemoteFollow).to receive(:addressable_template) do + Addressable::Template.new('https://hoge.com') + end + + post :create, params: { id: status.id, remote_follow: { acct: '@hoge' } } + expect(response).to have_http_status(302) + end + end + + context '@remote_follow is invalid' do + it 'returns 200' do + allow_any_instance_of(RemoteFollow).to receive(:valid?) { false } + post :create, params: { id: status.id, remote_follow: { acct: '@hoge' } } + + expect(response).to have_http_status(200) + end + end + end +end diff --git a/spec/controllers/settings/exports_controller_spec.rb b/spec/controllers/settings/exports_controller_spec.rb index b7cab4d8f..a46fe095d 100644 --- a/spec/controllers/settings/exports_controller_spec.rb +++ b/spec/controllers/settings/exports_controller_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rails_helper' describe Settings::ExportsController do @@ -28,4 +30,23 @@ describe Settings::ExportsController do end end end + + describe 'POST #create' do + before do + sign_in Fabricate(:user), scope: :user + end + + it 'redirects to settings_export_path' do + post :create + expect(response).to redirect_to(settings_export_path) + end + + it 'queues BackupWorker job by 1' do + Sidekiq::Testing.fake! do + expect do + post :create + end.to change(BackupWorker.jobs, :size).by(1) + end + end + end end diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb index a453200af..5b1fe3aca 100644 --- a/spec/controllers/settings/profiles_controller_spec.rb +++ b/spec/controllers/settings/profiles_controller_spec.rb @@ -26,4 +26,26 @@ RSpec.describe Settings::ProfilesController, type: :controller do expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) end end + + describe 'PUT #update with new profile image' do + it 'updates profile image' do + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + account = Fabricate(:account, user: @user, display_name: 'AvatarTest') + expect(account.avatar.instance.avatar_file_name).to be_nil + + put :update, params: { account: { avatar: fixture_file_upload('files/avatar.gif', 'image/gif') } } + expect(response).to redirect_to(settings_profile_path) + expect(account.reload.avatar.instance.avatar_file_name).not_to be_nil + expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + end + end + + describe 'PUT #update with oversized image' do + it 'gives the user an error message' do + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + account = Fabricate(:account, user: @user, display_name: 'AvatarTest') + put :update, params: { account: { avatar: fixture_file_upload('files/4096x4097.png', 'image/png') } } + expect(response.body).to include('images are not supported') + end + end end diff --git a/spec/fixtures/files/4096x4097.png b/spec/fixtures/files/4096x4097.png new file mode 100644 index 000000000..d1110cc2d --- /dev/null +++ b/spec/fixtures/files/4096x4097.png Binary files differdiff --git a/spec/models/custom_emoji_spec.rb b/spec/models/custom_emoji_spec.rb index 320a258d3..9de218b4f 100644 --- a/spec/models/custom_emoji_spec.rb +++ b/spec/models/custom_emoji_spec.rb @@ -75,4 +75,13 @@ RSpec.describe CustomEmoji, type: :model do end end end + + describe 'pre_validation' do + let(:custom_emoji) { Fabricate(:custom_emoji, domain: 'wWw.MaStOdOn.CoM') } + + it 'should downcase' do + custom_emoji.valid? + expect(custom_emoji.domain).to eq('www.mastodon.com') + end + end end diff --git a/spec/validators/email_mx_validator_spec.rb b/spec/validators/email_mx_validator_spec.rb new file mode 100644 index 000000000..bc68f63cf --- /dev/null +++ b/spec/validators/email_mx_validator_spec.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe EmailMxValidator do + describe '#validate' do + let(:user) { double(email: 'foo@example.com', errors: double(add: nil)) } + + it 'adds an error if there are no DNS records for the e-mail domain' do + resolver = double + + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + + subject.validate(user) + expect(user.errors).to have_received(:add) + end + + it 'adds an error if a MX record exists but does not lead to an IP' do + resolver = double + + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + + subject.validate(user) + expect(user.errors).to have_received(:add) + end + + it 'adds an error if the A record is blacklisted' do + EmailDomainBlock.create!(domain: '1.2.3.4') + resolver = double + + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '1.2.3.4')]) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + + subject.validate(user) + expect(user.errors).to have_received(:add) + end + + it 'adds an error if the MX record is blacklisted' do + EmailDomainBlock.create!(domain: '2.3.4.5') + resolver = double + + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '2.3.4.5')]) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + + subject.validate(user) + expect(user.errors).to have_received(:add) + end + + it 'adds an error if the MX hostname is blacklisted' do + EmailDomainBlock.create!(domain: 'mail.example.com') + resolver = double + + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::MX).and_return([double(exchange: 'mail.example.com')]) + allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) + allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([double(address: '2.3.4.5')]) + allow(resolver).to receive(:timeouts=).and_return(nil) + allow(Resolv::DNS).to receive(:open).and_yield(resolver) + + subject.validate(user) + expect(user.errors).to have_received(:add) + end + end +end |