Merge remote-tracking branch 'parent/main' into upstream-20231221
This commit is contained in:
commit
a6b57e3890
154 changed files with 7762 additions and 1748 deletions
10
.github/renovate.json5
vendored
10
.github/renovate.json5
vendored
|
@ -99,6 +99,16 @@
|
|||
matchUpdateTypes: ['patch', 'minor'],
|
||||
groupName: 'eslint (non-major)',
|
||||
},
|
||||
{
|
||||
// Group actions/*-artifact in the same PR
|
||||
matchManagers: ['github-actions'],
|
||||
matchPackageNames: [
|
||||
'actions/download-artifact',
|
||||
'actions/upload-artifact',
|
||||
],
|
||||
matchUpdateTypes: ['major'],
|
||||
groupName: 'artifact actions (major)',
|
||||
},
|
||||
{
|
||||
// Update @types/* packages every week, with one grouped PR
|
||||
matchPackagePrefixes: '@types/',
|
||||
|
|
|
@ -1,23 +1,18 @@
|
|||
# This configuration was generated by
|
||||
# `haml-lint --auto-gen-config`
|
||||
# on 2023-10-26 09:32:34 -0400 using Haml-Lint version 0.51.0.
|
||||
# on 2023-12-15 11:02:19 -0500 using Haml-Lint version 0.52.0.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the lints are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
# versions of Haml-Lint, may require this file to be generated again.
|
||||
|
||||
linters:
|
||||
# Offense count: 16
|
||||
# Offense count: 11
|
||||
LineLength:
|
||||
exclude:
|
||||
- 'app/views/admin/account_actions/new.html.haml'
|
||||
- 'app/views/admin/accounts/index.html.haml'
|
||||
- 'app/views/admin/ip_blocks/new.html.haml'
|
||||
- 'app/views/admin/roles/_form.html.haml'
|
||||
- 'app/views/admin/settings/discovery/show.html.haml'
|
||||
- 'app/views/auth/registrations/edit.html.haml'
|
||||
- 'app/views/auth/registrations/new.html.haml'
|
||||
- 'app/views/filters/_filter_fields.html.haml'
|
||||
- 'app/views/media/player.html.haml'
|
||||
- 'app/views/settings/applications/_fields.html.haml'
|
||||
- 'app/views/settings/imports/index.html.haml'
|
||||
|
@ -25,15 +20,12 @@ linters:
|
|||
- 'app/views/settings/preferences/notifications/show.html.haml'
|
||||
- 'app/views/settings/preferences/other/show.html.haml'
|
||||
- 'app/views/settings/preferences/reaching/show.html.haml'
|
||||
- 'app/views/settings/profiles/show.html.haml'
|
||||
- 'app/views/settings/privacy_extra/show.html.haml'
|
||||
- 'app/views/settings/profiles/show.html.haml'
|
||||
|
||||
# Offense count: 9
|
||||
RuboCop:
|
||||
exclude:
|
||||
- 'app/views/admin/accounts/_buttons.html.haml'
|
||||
- 'app/views/admin/accounts/_local_account.html.haml'
|
||||
- 'app/views/admin/roles/_form.html.haml'
|
||||
- 'app/views/home/index.html.haml'
|
||||
|
||||
ViewLength:
|
||||
|
|
2
.nvmrc
2
.nvmrc
|
@ -1 +1 @@
|
|||
20.9
|
||||
20.10
|
||||
|
|
15
.rubocop.yml
15
.rubocop.yml
|
@ -117,6 +117,21 @@ Rails/Exit:
|
|||
- 'config/boot.rb'
|
||||
- 'lib/mastodon/cli/*.rb'
|
||||
|
||||
Rails/SkipsModelValidations:
|
||||
Exclude:
|
||||
- 'db/*migrate/**/*'
|
||||
|
||||
# Reason: We want to preserve the ability to migrate from arbitrary old versions,
|
||||
# and cannot guarantee that every installation has run every migration as they upgrade.
|
||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunusedignoredcolumns
|
||||
Rails/UnusedIgnoredColumns:
|
||||
Enabled: false
|
||||
|
||||
# Reason: Prevailing style choice
|
||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsnegateinclude
|
||||
Rails/NegateInclude:
|
||||
Enabled: false
|
||||
|
||||
# Reason: Some single letter camel case files shouldn't be split
|
||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
||||
RSpec/FilePath:
|
||||
|
|
|
@ -26,7 +26,7 @@ Lint/NonLocalExitFromIterator:
|
|||
|
||||
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
||||
Metrics/AbcSize:
|
||||
Max: 125
|
||||
Max: 100
|
||||
|
||||
# Configuration parameters: CountBlocks, Max.
|
||||
Metrics/BlockNesting:
|
||||
|
@ -121,23 +121,6 @@ Rails/LexicallyScopedActionFilter:
|
|||
- 'app/controllers/auth/passwords_controller.rb'
|
||||
- 'app/controllers/auth/registrations_controller.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
Rails/NegateInclude:
|
||||
Exclude:
|
||||
- 'app/controllers/concerns/signature_verification.rb'
|
||||
- 'app/helpers/jsonld_helper.rb'
|
||||
- 'app/lib/activitypub/activity/create.rb'
|
||||
- 'app/lib/activitypub/activity/move.rb'
|
||||
- 'app/lib/feed_manager.rb'
|
||||
- 'app/lib/link_details_extractor.rb'
|
||||
- 'app/models/concerns/attachmentable.rb'
|
||||
- 'app/models/concerns/remotable.rb'
|
||||
- 'app/models/custom_filter.rb'
|
||||
- 'app/services/activitypub/process_status_update_service.rb'
|
||||
- 'app/services/fetch_link_card_service.rb'
|
||||
- 'app/workers/web/push_notification_worker.rb'
|
||||
- 'lib/paperclip/color_extractor.rb'
|
||||
|
||||
Rails/OutputSafety:
|
||||
Exclude:
|
||||
- 'config/initializers/simple_form.rb'
|
||||
|
@ -183,22 +166,6 @@ Rails/SkipsModelValidations:
|
|||
- 'app/workers/move_worker.rb'
|
||||
- 'app/workers/scheduler/ip_cleanup_scheduler.rb'
|
||||
- 'app/workers/scheduler/scheduled_statuses_scheduler.rb'
|
||||
- 'db/migrate/20161203164520_add_from_account_id_to_notifications.rb'
|
||||
- 'db/migrate/20170105224407_add_shortcode_to_media_attachments.rb'
|
||||
- 'db/migrate/20170209184350_add_reply_to_statuses.rb'
|
||||
- 'db/migrate/20170304202101_add_type_to_media_attachments.rb'
|
||||
- 'db/migrate/20180528141303_fix_accounts_unique_index.rb'
|
||||
- 'db/migrate/20180609104432_migrate_web_push_subscriptions2.rb'
|
||||
- 'db/migrate/20181207011115_downcase_custom_emoji_domains.rb'
|
||||
- 'db/migrate/20190511134027_add_silenced_at_suspended_at_to_accounts.rb'
|
||||
- 'db/migrate/20191007013357_update_pt_locales.rb'
|
||||
- 'db/migrate/20220316233212_update_kurdish_locales.rb'
|
||||
- 'db/post_migrate/20190511152737_remove_suspended_silenced_account_fields.rb'
|
||||
- 'db/post_migrate/20200917193528_migrate_notifications_type.rb'
|
||||
- 'db/post_migrate/20201017234926_fill_account_suspension_origin.rb'
|
||||
- 'db/post_migrate/20220617202502_migrate_roles.rb'
|
||||
- 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
|
||||
- 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
|
||||
- 'lib/mastodon/cli/accounts.rb'
|
||||
- 'lib/mastodon/cli/maintenance.rb'
|
||||
- 'spec/lib/activitypub/activity/follow_spec.rb'
|
||||
|
@ -214,19 +181,6 @@ Rails/UniqueValidationWithoutIndex:
|
|||
- 'app/models/identity.rb'
|
||||
- 'app/models/webauthn_credential.rb'
|
||||
|
||||
# Configuration parameters: Include.
|
||||
# Include: app/models/**/*.rb
|
||||
Rails/UnusedIgnoredColumns:
|
||||
Exclude:
|
||||
- 'app/models/account.rb'
|
||||
- 'app/models/account_stat.rb'
|
||||
- 'app/models/admin/action_log.rb'
|
||||
- 'app/models/custom_filter.rb'
|
||||
- 'app/models/email_domain_block.rb'
|
||||
- 'app/models/report.rb'
|
||||
- 'app/models/status_edit.rb'
|
||||
- 'app/models/user.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: exists, where
|
||||
|
@ -380,22 +334,6 @@ Style/IfUnlessModifier:
|
|||
- 'config/initializers/devise.rb'
|
||||
- 'config/initializers/ffmpeg.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: InverseMethods, InverseBlocks.
|
||||
Style/InverseMethods:
|
||||
Exclude:
|
||||
- 'app/models/custom_filter.rb'
|
||||
- 'app/services/update_account_service.rb'
|
||||
- 'spec/controllers/activitypub/replies_controller_spec.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: line_count_dependent, lambda, literal
|
||||
Style/Lambda:
|
||||
Exclude:
|
||||
- 'config/initializers/simple_form.rb'
|
||||
- 'config/routes.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
Style/MapToHash:
|
||||
Exclude:
|
||||
|
@ -460,15 +398,6 @@ Style/RedundantFetchBlock:
|
|||
- 'config/initializers/paperclip.rb'
|
||||
- 'config/puma.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
# Configuration parameters: AllowMultipleReturnValues.
|
||||
Style/RedundantReturn:
|
||||
Exclude:
|
||||
- 'app/controllers/api/v1/directories_controller.rb'
|
||||
- 'app/controllers/auth/confirmations_controller.rb'
|
||||
- 'app/lib/ostatus/tag_manager.rb'
|
||||
- 'app/models/form/import.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
|
||||
# AllowedMethods: present?, blank?, presence, try, try!
|
||||
|
@ -489,11 +418,6 @@ Style/SingleArgumentDig:
|
|||
Exclude:
|
||||
- 'lib/webpacker/manifest_extensions.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
Style/StderrPuts:
|
||||
Exclude:
|
||||
- 'config/boot.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: Mode.
|
||||
Style/StringConcatenation:
|
||||
|
@ -513,13 +437,6 @@ Style/StringLiterals:
|
|||
- 'config/routes.rb'
|
||||
- 'db/schema.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments.
|
||||
# AllowedMethods: define_method, mail, respond_to
|
||||
Style/SymbolProc:
|
||||
Exclude:
|
||||
- 'config/initializers/3_omniauth.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
|
||||
# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
|
||||
|
|
32
Gemfile.lock
32
Gemfile.lock
|
@ -131,20 +131,20 @@ GEM
|
|||
attr_required (1.0.1)
|
||||
awrence (1.2.1)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.857.0)
|
||||
aws-sdk-core (3.188.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (1.860.0)
|
||||
aws-sdk-core (3.189.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (~> 1.8)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.73.0)
|
||||
aws-sdk-kms (1.74.0)
|
||||
aws-sdk-core (~> 3, >= 3.188.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.140.0)
|
||||
aws-sdk-core (~> 3, >= 3.188.0)
|
||||
aws-sdk-s3 (1.141.0)
|
||||
aws-sdk-core (~> 3, >= 3.189.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.6)
|
||||
aws-sigv4 (1.7.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
aws-sigv4 (1.8.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
azure-storage-blob (2.0.3)
|
||||
azure-storage-common (~> 2.0)
|
||||
|
@ -168,7 +168,7 @@ GEM
|
|||
erubi (~> 1.4)
|
||||
parser (>= 2.4)
|
||||
smart_properties
|
||||
bigdecimal (3.1.4)
|
||||
bigdecimal (3.1.5)
|
||||
bindata (2.4.15)
|
||||
binding_of_caller (1.0.0)
|
||||
debug_inspector (>= 0.0.1)
|
||||
|
@ -197,7 +197,7 @@ GEM
|
|||
activesupport
|
||||
cbor (0.5.9.6)
|
||||
charlock_holmes (0.7.7)
|
||||
chewy (7.3.5)
|
||||
chewy (7.4.0)
|
||||
activesupport (>= 5.2)
|
||||
elasticsearch (>= 7.12.0, < 7.14.0)
|
||||
elasticsearch-dsl
|
||||
|
@ -515,7 +515,7 @@ GEM
|
|||
openssl (> 2.0)
|
||||
orm_adapter (0.5.0)
|
||||
ox (2.14.17)
|
||||
parallel (1.23.0)
|
||||
parallel (1.24.0)
|
||||
parser (3.2.2.4)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
|
@ -681,10 +681,10 @@ GEM
|
|||
rubocop (~> 1.41)
|
||||
rubocop-factory_bot (2.24.0)
|
||||
rubocop (~> 1.33)
|
||||
rubocop-performance (1.19.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
rubocop-ast (>= 0.4.0)
|
||||
rubocop-rails (2.22.2)
|
||||
rubocop-performance (1.20.0)
|
||||
rubocop (>= 1.48.1, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-rails (2.23.0)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
|
|
|
@ -8,7 +8,7 @@ module Admin
|
|||
authorize :follow_recommendation, :show?
|
||||
|
||||
@form = Form::AccountBatch.new
|
||||
@accounts = filtered_follow_recommendations
|
||||
@accounts = filtered_follow_recommendations.page(params[:page])
|
||||
end
|
||||
|
||||
def update
|
||||
|
|
|
@ -108,6 +108,10 @@ class Api::BaseController < ApplicationController
|
|||
render json: { error: 'Your login is currently disabled' }, status: 403 if current_user&.account&.unavailable?
|
||||
end
|
||||
|
||||
def require_valid_pagination_options!
|
||||
render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid?
|
||||
end
|
||||
|
||||
def require_user!
|
||||
if !current_user
|
||||
render json: { error: 'This method requires an authenticated user' }, status: 422
|
||||
|
@ -136,6 +140,10 @@ class Api::BaseController < ApplicationController
|
|||
|
||||
private
|
||||
|
||||
def pagination_options_invalid?
|
||||
params.slice(:limit, :offset).values.map(&:to_i).any?(&:negative?)
|
||||
end
|
||||
|
||||
def respond_with_error(code)
|
||||
render json: { error: Rack::Utils::HTTP_STATUS_CODES[code] }, status: code
|
||||
end
|
||||
|
|
|
@ -25,6 +25,6 @@ class Api::V1::Accounts::NotesController < Api::BaseController
|
|||
end
|
||||
|
||||
def relationships_presenter
|
||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id)
|
||||
AccountRelationshipsPresenter.new([@account], current_user.account_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,6 +25,6 @@ class Api::V1::Accounts::PinsController < Api::BaseController
|
|||
end
|
||||
|
||||
def relationships_presenter
|
||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id)
|
||||
AccountRelationshipsPresenter.new([@account], current_user.account_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ class Api::V1::Accounts::RelationshipsController < Api::BaseController
|
|||
before_action :require_user!
|
||||
|
||||
def index
|
||||
@accounts = Account.where(id: account_ids).select('id')
|
||||
@accounts = Account.where(id: account_ids).select(:id, :domain)
|
||||
@accounts.merge!(Account.without_suspended) unless truthy_param?(:with_suspended)
|
||||
render json: @accounts, each_serializer: REST::RelationshipSerializer, relationships: relationships
|
||||
end
|
||||
|
|
|
@ -88,7 +88,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||
end
|
||||
|
||||
def relationships(**options)
|
||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options)
|
||||
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
|
||||
end
|
||||
|
||||
def account_params
|
||||
|
|
|
@ -12,7 +12,7 @@ class Api::V1::DirectoriesController < Api::BaseController
|
|||
private
|
||||
|
||||
def require_enabled!
|
||||
return not_found unless Setting.profile_directory
|
||||
not_found unless Setting.profile_directory
|
||||
end
|
||||
|
||||
def set_accounts
|
||||
|
|
|
@ -25,11 +25,11 @@ class Api::V1::FollowRequestsController < Api::BaseController
|
|||
private
|
||||
|
||||
def account
|
||||
Account.find(params[:id])
|
||||
@account ||= Account.find(params[:id])
|
||||
end
|
||||
|
||||
def relationships(**options)
|
||||
AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options)
|
||||
AccountRelationshipsPresenter.new([account], current_user.account_id, **options)
|
||||
end
|
||||
|
||||
def load_accounts
|
||||
|
|
|
@ -3,22 +3,23 @@
|
|||
class Api::V1::SuggestionsController < Api::BaseController
|
||||
include Authorization
|
||||
|
||||
before_action -> { doorkeeper_authorize! :read }
|
||||
before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index
|
||||
before_action :require_user!
|
||||
before_action :set_suggestions
|
||||
|
||||
def index
|
||||
suggestions = suggestions_source.get(current_account, limit: limit_param(DEFAULT_ACCOUNTS_LIMIT))
|
||||
render json: suggestions.map(&:account), each_serializer: REST::AccountSerializer
|
||||
render json: @suggestions.get(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:offset].to_i).map(&:account), each_serializer: REST::AccountSerializer
|
||||
end
|
||||
|
||||
def destroy
|
||||
suggestions_source.remove(current_account, params[:id])
|
||||
@suggestions.remove(params[:id])
|
||||
render_empty
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def suggestions_source
|
||||
AccountSuggestions::PastInteractionsSource.new
|
||||
def set_suggestions
|
||||
@suggestions = AccountSuggestions.new(current_account)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,6 +12,7 @@ class Api::V2::SearchController < Api::BaseController
|
|||
before_action :query_pagination_error, if: :pagination_requested?
|
||||
before_action :remote_resolve_error, if: :remote_resolve_requested?
|
||||
end
|
||||
before_action :require_valid_pagination_options!
|
||||
|
||||
def index
|
||||
@search = Search.new(search_results)
|
||||
|
|
|
@ -3,17 +3,23 @@
|
|||
class Api::V2::SuggestionsController < Api::BaseController
|
||||
include Authorization
|
||||
|
||||
before_action -> { doorkeeper_authorize! :read }
|
||||
before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index
|
||||
before_action :require_user!
|
||||
before_action :set_suggestions
|
||||
|
||||
def index
|
||||
render json: @suggestions, each_serializer: REST::SuggestionSerializer
|
||||
render json: @suggestions.get(limit_param(DEFAULT_ACCOUNTS_LIMIT), params[:offset].to_i), each_serializer: REST::SuggestionSerializer
|
||||
end
|
||||
|
||||
def destroy
|
||||
@suggestions.remove(params[:id])
|
||||
render_empty
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_suggestions
|
||||
@suggestions = AccountSuggestions.get(current_account, limit_param(DEFAULT_ACCOUNTS_LIMIT))
|
||||
@suggestions = AccountSuggestions.new(current_account)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -62,7 +62,7 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController
|
|||
end
|
||||
|
||||
def captcha_user_bypass?
|
||||
return true if @confirmation_user.nil? || @confirmation_user.confirmed?
|
||||
@confirmation_user.nil? || @confirmation_user.confirmed?
|
||||
end
|
||||
|
||||
def require_unconfirmed!
|
||||
|
|
|
@ -33,7 +33,7 @@ class RelationshipsController < ApplicationController
|
|||
end
|
||||
|
||||
def set_relationships
|
||||
@relationships = AccountRelationshipsPresenter.new(@accounts.pluck(:id), current_user.account_id)
|
||||
@relationships = AccountRelationshipsPresenter.new(@accounts, current_user.account_id)
|
||||
end
|
||||
|
||||
def form_account_batch_params
|
||||
|
|
|
@ -110,7 +110,7 @@ module ApplicationHelper
|
|||
def can?(action, record)
|
||||
return false if record.nil?
|
||||
|
||||
policy(record).public_send("#{action}?")
|
||||
policy(record).public_send(:"#{action}?")
|
||||
end
|
||||
|
||||
def fa_icon(icon, attributes = {})
|
||||
|
|
|
@ -21,7 +21,7 @@ function actionWithSkipLoadingTrue<Args extends object>(args: Args) {
|
|||
}
|
||||
|
||||
export const followAccountSuccess = createAction(
|
||||
'accounts/followAccountSuccess',
|
||||
'accounts/followAccount/SUCCESS',
|
||||
actionWithSkipLoadingTrue<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
alreadyFollowing: boolean;
|
||||
|
@ -29,7 +29,7 @@ export const followAccountSuccess = createAction(
|
|||
);
|
||||
|
||||
export const unfollowAccountSuccess = createAction(
|
||||
'accounts/unfollowAccountSuccess',
|
||||
'accounts/unfollowAccount/SUCCESS',
|
||||
actionWithSkipLoadingTrue<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
statuses: unknown;
|
||||
|
@ -38,60 +38,60 @@ export const unfollowAccountSuccess = createAction(
|
|||
);
|
||||
|
||||
export const authorizeFollowRequestSuccess = createAction<{ id: string }>(
|
||||
'accounts/followRequestAuthorizeSuccess',
|
||||
'accounts/followRequestAuthorize/SUCCESS',
|
||||
);
|
||||
|
||||
export const rejectFollowRequestSuccess = createAction<{ id: string }>(
|
||||
'accounts/followRequestRejectSuccess',
|
||||
'accounts/followRequestReject/SUCCESS',
|
||||
);
|
||||
|
||||
export const followAccountRequest = createAction(
|
||||
'accounts/followRequest',
|
||||
'accounts/follow/REQUEST',
|
||||
actionWithSkipLoadingTrue<{ id: string; locked: boolean }>,
|
||||
);
|
||||
|
||||
export const followAccountFail = createAction(
|
||||
'accounts/followFail',
|
||||
'accounts/follow/FAIL',
|
||||
actionWithSkipLoadingTrue<{ id: string; error: string; locked: boolean }>,
|
||||
);
|
||||
|
||||
export const unfollowAccountRequest = createAction(
|
||||
'accounts/unfollowRequest',
|
||||
'accounts/unfollow/REQUEST',
|
||||
actionWithSkipLoadingTrue<{ id: string }>,
|
||||
);
|
||||
|
||||
export const unfollowAccountFail = createAction(
|
||||
'accounts/unfollowFail',
|
||||
'accounts/unfollow/FAIL',
|
||||
actionWithSkipLoadingTrue<{ id: string; error: string }>,
|
||||
);
|
||||
|
||||
export const blockAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
statuses: unknown;
|
||||
}>('accounts/blockSuccess');
|
||||
}>('accounts/block/SUCCESS');
|
||||
|
||||
export const unblockAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
}>('accounts/unblockSuccess');
|
||||
}>('accounts/unblock/SUCCESS');
|
||||
|
||||
export const muteAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
statuses: unknown;
|
||||
}>('accounts/muteSuccess');
|
||||
}>('accounts/mute/SUCCESS');
|
||||
|
||||
export const unmuteAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
}>('accounts/unmuteSuccess');
|
||||
}>('accounts/unmute/SUCCESS');
|
||||
|
||||
export const pinAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
}>('accounts/pinSuccess');
|
||||
}>('accounts/pin/SUCCESS');
|
||||
|
||||
export const unpinAccountSuccess = createAction<{
|
||||
relationship: ApiRelationshipJSON;
|
||||
}>('accounts/unpinSuccess');
|
||||
}>('accounts/unpin/SUCCESS');
|
||||
|
||||
export const fetchRelationshipsSuccess = createAction(
|
||||
'relationships/fetchSuccess',
|
||||
'relationships/fetch/SUCCESS',
|
||||
actionWithSkipLoadingTrue<{ relationships: ApiRelationshipJSON[] }>,
|
||||
);
|
||||
|
|
|
@ -5,9 +5,9 @@ import type { Account } from 'mastodon/models/account';
|
|||
export const blockDomainSuccess = createAction<{
|
||||
domain: string;
|
||||
accounts: Account[];
|
||||
}>('domain_blocks/blockSuccess');
|
||||
}>('domain_blocks/block/SUCCESS');
|
||||
|
||||
export const unblockDomainSuccess = createAction<{
|
||||
domain: string;
|
||||
accounts: Account[];
|
||||
}>('domain_blocks/unblockSuccess');
|
||||
}>('domain_blocks/unblock/SUCCESS');
|
||||
|
|
|
@ -257,7 +257,7 @@ class Dropdown extends PureComponent {
|
|||
};
|
||||
|
||||
findTarget = () => {
|
||||
return this.target?.buttonRef?.current || this.target; // kmyblue fixed
|
||||
return this.target?.buttonRef?.current ?? this.target;
|
||||
};
|
||||
|
||||
componentWillUnmount = () => {
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { render, fireEvent } from '@testing-library/react';
|
||||
|
||||
class Media extends Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
paused: props.paused || false,
|
||||
};
|
||||
}
|
||||
|
||||
handleMediaClick = () => {
|
||||
const { onClick } = this.props;
|
||||
|
||||
this.setState(prevState => ({
|
||||
paused: !prevState.paused,
|
||||
}));
|
||||
|
||||
if (typeof onClick === 'function') {
|
||||
onClick();
|
||||
}
|
||||
|
||||
const { title } = this.props;
|
||||
const mediaElements = document.querySelectorAll(`div[title="${title}"]`);
|
||||
|
||||
setTimeout(() => {
|
||||
mediaElements.forEach(element => {
|
||||
if (element !== this && !element.classList.contains('paused')) {
|
||||
element.click();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
};
|
||||
|
||||
render() {
|
||||
const { title } = this.props;
|
||||
const { paused } = this.state;
|
||||
|
||||
return (
|
||||
<button title={title} onClick={this.handleMediaClick}>
|
||||
Media Component - {paused ? 'Paused' : 'Playing'}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Media.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
onClick: PropTypes.func,
|
||||
paused: PropTypes.bool,
|
||||
};
|
||||
|
||||
describe('Media attachments test', () => {
|
||||
let currentMedia = null;
|
||||
const togglePlayMock = jest.fn();
|
||||
|
||||
it('plays a new media file and pauses others that were playing', () => {
|
||||
const container = render(
|
||||
<div>
|
||||
<Media title='firstMedia' paused onClick={togglePlayMock} />
|
||||
<Media title='secondMedia' paused onClick={togglePlayMock} />
|
||||
</div>,
|
||||
);
|
||||
|
||||
fireEvent.click(container.getByTitle('firstMedia'));
|
||||
expect(togglePlayMock).toHaveBeenCalledTimes(1);
|
||||
currentMedia = container.getByTitle('firstMedia');
|
||||
expect(currentMedia.textContent).toMatch(/Playing/);
|
||||
|
||||
fireEvent.click(container.getByTitle('secondMedia'));
|
||||
expect(togglePlayMock).toHaveBeenCalledTimes(2);
|
||||
currentMedia = container.getByTitle('secondMedia');
|
||||
expect(currentMedia.textContent).toMatch(/Playing/);
|
||||
});
|
||||
});
|
|
@ -20,7 +20,6 @@ import { formatTime, getPointerPosition, fileNameFromURL } from 'mastodon/featur
|
|||
|
||||
import { Blurhash } from '../../components/blurhash';
|
||||
import { displayMedia, useBlurhash } from '../../initial_state';
|
||||
import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments';
|
||||
|
||||
import Visualizer from './visualizer';
|
||||
|
||||
|
@ -166,32 +165,15 @@ class Audio extends PureComponent {
|
|||
}
|
||||
|
||||
togglePlay = () => {
|
||||
const audios = document.querySelectorAll('audio');
|
||||
|
||||
audios.forEach((audio) => {
|
||||
const button = audio.previousElementSibling;
|
||||
button.addEventListener('click', () => {
|
||||
if(audio.paused) {
|
||||
audios.forEach((e) => {
|
||||
if (e !== audio) {
|
||||
e.pause();
|
||||
}
|
||||
});
|
||||
audio.play();
|
||||
this.setState({ paused: false });
|
||||
} else {
|
||||
audio.pause();
|
||||
this.setState({ paused: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (currentMedia !== null) {
|
||||
currentMedia.pause();
|
||||
if (!this.audioContext) {
|
||||
this._initAudioContext();
|
||||
}
|
||||
|
||||
this.audio.play();
|
||||
setCurrentMedia(this.audio);
|
||||
if (this.state.paused) {
|
||||
this.setState({ paused: false }, () => this.audio.play());
|
||||
} else {
|
||||
this.setState({ paused: true }, () => this.audio.pause());
|
||||
}
|
||||
};
|
||||
|
||||
handleResize = debounce(() => {
|
||||
|
@ -213,7 +195,6 @@ class Audio extends PureComponent {
|
|||
};
|
||||
|
||||
handlePause = () => {
|
||||
this.audio.pause();
|
||||
this.setState({ paused: true });
|
||||
|
||||
if (this.audioContext) {
|
||||
|
|
|
@ -22,7 +22,6 @@ import { Icon } from 'mastodon/components/icon';
|
|||
import { playerSettings } from 'mastodon/settings';
|
||||
|
||||
import { displayMedia, useBlurhash } from '../../initial_state';
|
||||
import { currentMedia, setCurrentMedia } from '../../reducers/media_attachments';
|
||||
import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen';
|
||||
|
||||
const messages = defineMessages({
|
||||
|
@ -182,7 +181,6 @@ class Video extends PureComponent {
|
|||
};
|
||||
|
||||
handlePause = () => {
|
||||
this.video.pause();
|
||||
this.setState({ paused: true });
|
||||
};
|
||||
|
||||
|
@ -346,32 +344,11 @@ class Video extends PureComponent {
|
|||
};
|
||||
|
||||
togglePlay = () => {
|
||||
const videos = document.querySelectorAll('video');
|
||||
|
||||
videos.forEach((video) => {
|
||||
const button = video.nextElementSibling;
|
||||
button.addEventListener('click', () => {
|
||||
if (video.paused) {
|
||||
videos.forEach((e) => {
|
||||
if (e !== video) {
|
||||
e.pause();
|
||||
}
|
||||
});
|
||||
video.play();
|
||||
this.setState({ paused: false });
|
||||
} else {
|
||||
video.pause();
|
||||
this.setState({ paused: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (currentMedia !== null) {
|
||||
currentMedia.pause();
|
||||
if (this.state.paused) {
|
||||
this.setState({ paused: false }, () => this.video.play());
|
||||
} else {
|
||||
this.setState({ paused: true }, () => this.video.pause());
|
||||
}
|
||||
|
||||
this.video.play();
|
||||
setCurrentMedia(this.video);
|
||||
};
|
||||
|
||||
toggleFullscreen = () => {
|
||||
|
|
|
@ -1 +1,145 @@
|
|||
{}
|
||||
{
|
||||
"about.blocks": "Mga pinatimping server",
|
||||
"about.contact": "Kontak:",
|
||||
"about.disclaimer": "Ang Mastodon ay software na malaya at bukas-na-pinagmulan, at isang tatak-pangkalakal ng Mastodon gGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Hindi makuha ang dahilan",
|
||||
"about.domain_blocks.silenced.title": "Limitado",
|
||||
"about.domain_blocks.suspended.title": "Suspendido",
|
||||
"about.rules": "Mga alituntunin ng server",
|
||||
"account.account_note_header": "Tala",
|
||||
"account.add_or_remove_from_list": "I-dagdag o tanggalin mula sa mga listahan",
|
||||
"account.badges.bot": "Pakusa",
|
||||
"account.badges.group": "Pangkat",
|
||||
"account.block": "Hadlangan si @{name}",
|
||||
"account.block_domain": "Hadlangan ang domain na {domain}",
|
||||
"account.block_short": "Hadlangan",
|
||||
"account.blocked": "Hinadlangan",
|
||||
"account.browse_more_on_origin_server": "Tingnan pa sa pangunahing profile",
|
||||
"account.cancel_follow_request": "I-kansela ang pagsunod",
|
||||
"account.copy": "I-sipi ang kawing sa profile",
|
||||
"account.direct": "Palihim banggitin si @{name}",
|
||||
"account.disable_notifications": "I-tigil ang pagpapaalam sa akin tuwing nagpopost si @{name}",
|
||||
"account.domain_blocked": "Hinadlangan ang domain",
|
||||
"account.edit_profile": "Baguhin ang profile",
|
||||
"account.enable_notifications": "Ipaalam sa akin kapag nag-post si @{name}",
|
||||
"account.endorse": "I-tampok sa profile",
|
||||
"account.featured_tags.last_status_at": "Huling post noong {date}",
|
||||
"account.featured_tags.last_status_never": "Walang mga post",
|
||||
"account.featured_tags.title": "Nakatampok na hashtag ni {name}",
|
||||
"account.follow": "Sundan",
|
||||
"account.followers": "Mga tagasunod",
|
||||
"account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.",
|
||||
"account.following": "Sinusundan",
|
||||
"account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.",
|
||||
"account.follows_you": "Sinusunod ka",
|
||||
"account.go_to_profile": "Pumunta sa profile",
|
||||
"account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}",
|
||||
"account.in_memoriam": "Sa Alaala Ni.",
|
||||
"account.joined_short": "Sumali",
|
||||
"account.languages": "Palitan ang mga nakasumuscribing wika",
|
||||
"account.link_verified_on": "Sinuri ang pagmamay-ari ng kawing ito sa {date}",
|
||||
"account.locked_info": "Nakakandado ang pagsasariling kalagayan ng account na ito. Manomano sinusuri ng may-ari kung sino ang maaaring sumunod sa kanya.",
|
||||
"account.media": "Medya",
|
||||
"account.mention": "Banggitin si @{name}",
|
||||
"account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:",
|
||||
"bundle_column_error.error.title": "Naku!",
|
||||
"bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.",
|
||||
"bundle_column_error.network.title": "Kamaliang network",
|
||||
"bundle_column_error.retry": "Subukang muli",
|
||||
"bundle_column_error.return": "Bumalik sa tahanan",
|
||||
"bundle_column_error.routing.body": "Hindi mahanap ang hiniling na pahina. Sigurado ka ba na ang URL sa address bar ay tama?",
|
||||
"bundle_column_error.routing.title": "404",
|
||||
"bundle_modal_error.close": "I-sara",
|
||||
"bundle_modal_error.message": "May nangyaring mali habang kinakarga ang bahaging ito.",
|
||||
"bundle_modal_error.retry": "Subukang muli",
|
||||
"closed_registrations.other_server_instructions": "Dahil desentralisado ang Mastodon, pwede kang gumawa ng account sa iba pang server at makipag-ugnayan pa rin dito.",
|
||||
"closed_registrations_modal.description": "Hindi pa pwedeng gumawa ng account sa {domain}, pero tandaan na hindi mo kailangan ng account partikular sa {domain} para gamitin ang Mastodon.",
|
||||
"closed_registrations_modal.find_another_server": "Maghanap ng iba pang server",
|
||||
"closed_registrations_modal.preamble": "Dahil desentralisado ang Mastodon, kahit saan ka pa gumawa ng account, maaari ka pa ring sumunod at makipag-ugnayan sa kahit-sino rito sa server na ito. Pwede mo pang i-host nang pasarili!",
|
||||
"closed_registrations_modal.title": "Pagrerehistro sa Mastodon",
|
||||
"column.about": "Tungkol dito",
|
||||
"column.blocks": "Nakahadlang na mga tagagamit",
|
||||
"column.bookmarks": "Mga bookmark",
|
||||
"column.community": "Lokal na timeline",
|
||||
"column.direct": "Mga palihim na banggit",
|
||||
"column.directory": "Tingnan ang mga profile",
|
||||
"column.domain_blocks": "Nakahadlang na mga domain",
|
||||
"column.favourites": "Mga paborito",
|
||||
"column.firehose": "Mga live feed",
|
||||
"column.follow_requests": "Mga hiling para sundan",
|
||||
"column.home": "Tahanan",
|
||||
"column.lists": "Mga listahan",
|
||||
"column.mutes": "Mga pinatahimik na tagagamit",
|
||||
"column.notifications": "Mga abiso",
|
||||
"column.pins": "Mga nakapaskil na post",
|
||||
"column.public": "Pinagsamang timeline",
|
||||
"column_back_button.label": "Bumalik",
|
||||
"column_header.hide_settings": "I-tago ang mga setting",
|
||||
"column_header.moveLeft_settings": "I-lipat ang hanay pakaliwa",
|
||||
"column_header.moveRight_settings": "I-lipat ang hanay pakanan",
|
||||
"column_header.pin": "I-paskil",
|
||||
"column_header.show_settings": "Ipakita ang mga setting",
|
||||
"column_header.unpin": "Tanggalin sa pagkapaskil",
|
||||
"column_subheading.settings": "Mga setting",
|
||||
"community.column_settings.local_only": "Lokal lamang",
|
||||
"community.column_settings.media_only": "Medya Lamang",
|
||||
"community.column_settings.remote_only": "Liblib lamang",
|
||||
"compose.language.change": "Magpalit ng wika",
|
||||
"compose.language.search": "Maghanap ng mga wika...",
|
||||
"compose.published.body": "Nailathala ang post.",
|
||||
"compose.published.open": "Buksan",
|
||||
"compose.saved.body": "Nai-save ang post.",
|
||||
"compose_form.direct_message_warning_learn_more": "Matuto pa",
|
||||
"compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.",
|
||||
"compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.",
|
||||
"copy_icon_button.copied": "Sinipi sa clipboard",
|
||||
"copypaste.copied": "Sinipi",
|
||||
"copypaste.copy_to_clipboard": "I-sipi sa clipboard",
|
||||
"directory.federated": "Mula sa kilalang fediverse",
|
||||
"directory.local": "Mula sa {domain} lamang",
|
||||
"directory.new_arrivals": "Mga bagong dating",
|
||||
"directory.recently_active": "Kamakailang aktibo",
|
||||
"disabled_account_banner.account_settings": "Mga setting ng account",
|
||||
"disabled_account_banner.text": "Ang iyong account na {disabledAccount} ay hindi pinapagana ngayon.",
|
||||
"dismissable_banner.community_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong ang mga account hinohost ng {domain}.",
|
||||
"dismissable_banner.dismiss": "Alisin",
|
||||
"dismissable_banner.explore_links": "Ito ang mga balitang kwento na pinaka-binabahagi sa social web ngayon. Ang mga mas bagong balitang kwento na pinost ng mas marami pang mga iba't ibang tao ay tinataasan ng antas.",
|
||||
"dismissable_banner.explore_statuses": "Ito ang mga sumisikat na mga post sa iba't ibang bahagi ng social web ngayon. Ang mga mas bagong post na mas marami ang mga pagpapalakas at paborito ay tinataasan ng antas.",
|
||||
"dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.",
|
||||
"dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.",
|
||||
"embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.",
|
||||
"embed.preview": "Ito ang magiging itsura:",
|
||||
"emoji_button.activity": "Aktibidad",
|
||||
"emoji_button.clear": "Linisin",
|
||||
"emoji_button.custom": "Pasadya",
|
||||
"emoji_button.flags": "Mga watawat",
|
||||
"emoji_button.food": "Pagkain at Inumin",
|
||||
"emoji_button.label": "Maglagay ng emoji",
|
||||
"emoji_button.nature": "Kalikasan",
|
||||
"emoji_button.not_found": "Walang mahanap na mga tugmang emoji",
|
||||
"emoji_button.objects": "Mga bagay",
|
||||
"emoji_button.people": "Mga tao",
|
||||
"emoji_button.recent": "Madalas na ginagamit",
|
||||
"emoji_button.search": "Maghanap...",
|
||||
"emoji_button.search_results": "Resulta ng paghahanap",
|
||||
"emoji_button.symbols": "Mga tanda",
|
||||
"emoji_button.travel": "Paglakbay at Mga Lugar",
|
||||
"empty_column.account_hides_collections": "Pinili ng tagagamit na ito na hindi makuha ang impormasyong ito",
|
||||
"empty_column.account_suspended": "Sinuspinde ang account",
|
||||
"empty_column.account_timeline": "Walang mga post dito!",
|
||||
"empty_column.account_unavailable": "Hindi makuha ang profile",
|
||||
"empty_column.blocks": "Hindi ka pa naghahadlang ng sinumang tagagamit.",
|
||||
"empty_column.bookmarked_statuses": "Wala ka pang naka-bookmark na post. Kapag nag-bookmark ka ng isa, makikita yun dito.",
|
||||
"empty_column.community": "Walang laman ang lokal na timeline. Magsulat ng anuman papubliko para makaandar tayo!",
|
||||
"empty_column.direct": "Wala ka pang mga palihim na banggit. Kapag nagpadala o tumanggap ka ng isa, makikita yun dito.",
|
||||
"empty_column.domain_blocks": "Wala pang nakahadlang na domain.",
|
||||
"empty_column.explore_statuses": "Wala pang sumisikat sa ngayon. Balik na lang sa muli!",
|
||||
"empty_column.favourited_statuses": "Wala ka pang mga paboritong post. Kapag nag-paborito ka ng isa, makikita yun dito.",
|
||||
"empty_column.favourites": "Wala pang may paborito ng post na ito. Kung may sinumang nagpaborito, makikita sila rito.",
|
||||
"empty_column.follow_requests": "Wala ka pang mga hiling para sundan ka. Kapag nakatanggap ka ng isa, makikita yun dito.",
|
||||
"empty_column.followed_tags": "Wala ka pang sinusunod na hashtag. Kapag may sinundan ka na, makikita sila rito.",
|
||||
"empty_column.hashtag": "Wala pang laman ang hashtag na ito.",
|
||||
"empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.",
|
||||
"empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.",
|
||||
"empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito."
|
||||
}
|
||||
|
|
23
app/javascript/mastodon/locales/ia.json
Normal file
23
app/javascript/mastodon/locales/ia.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"account.add_or_remove_from_list": "Adder o remover ab listas",
|
||||
"account.copy": "Copiar ligamine a profilo",
|
||||
"bundle_column_error.network.title": "Error de rete",
|
||||
"bundle_modal_error.close": "Clauder",
|
||||
"column.home": "Initio",
|
||||
"column_subheading.settings": "Parametros",
|
||||
"compose.language.search": "Cercar linguas...",
|
||||
"compose.published.open": "Aperir",
|
||||
"confirmation_modal.cancel": "Cancellar",
|
||||
"confirmations.logout.confirm": "Clauder le session",
|
||||
"copypaste.copy_to_clipboard": "Copiar al area de transferentia",
|
||||
"dismissable_banner.dismiss": "Dimitter",
|
||||
"firehose.local": "Iste servitor",
|
||||
"footer.about": "A proposito de",
|
||||
"home.pending_critical_update.link": "Vider actualisationes",
|
||||
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
|
||||
"lightbox.close": "Clauder",
|
||||
"lightbox.next": "Sequente",
|
||||
"link_preview.author": "Per {name}",
|
||||
"lists.account.add": "Adder al lista",
|
||||
"navigation_bar.about": "A proposito de"
|
||||
}
|
737
app/javascript/mastodon/locales/ie.json
Normal file
737
app/javascript/mastodon/locales/ie.json
Normal file
|
@ -0,0 +1,737 @@
|
|||
{
|
||||
"about.blocks": "Moderat servitores",
|
||||
"about.contact": "Contacter:",
|
||||
"about.disclaimer": "Mastodon es programmatura líber e con fonte apert, e un marca de fabrica de Mastodon dGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Rason ne disponibil",
|
||||
"about.domain_blocks.preamble": "Mastodon generalmen possibilisa regardar li contenete de, e li interaction con usatores de quelcunc altri servitor in li fediverse. Ci trova se li exceptiones fat de ti-ci particulari servitor.",
|
||||
"about.domain_blocks.silenced.explanation": "Generalmen, li profiles e contenete de ti-ci servitor ne va aparir, except si on sercha les explicitmen o optionalisa it per sequer.",
|
||||
"about.domain_blocks.silenced.title": "Limitat",
|
||||
"about.domain_blocks.suspended.explanation": "Necun data de ti-ci servitor va esser tractat, inmagasinat o exchangeat, quel inpossibilisa li interaction o comunication de usatores de ti-ci servitor.",
|
||||
"about.domain_blocks.suspended.title": "Suspendet",
|
||||
"about.not_available": "On ne ha disponibilisat ti-ci information sur ti-ci servitor.",
|
||||
"about.powered_by": "Decentralisat social medie disponibilisat de {mastodon}",
|
||||
"about.rules": "Regules del servitor",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Adjunter o remover de listes",
|
||||
"account.badges.bot": "Automatisat",
|
||||
"account.badges.group": "Gruppe",
|
||||
"account.block": "Bloccar @{name}",
|
||||
"account.block_domain": "Bloccar dominia {domain}",
|
||||
"account.block_short": "Bloccar",
|
||||
"account.blocked": "Bloccat",
|
||||
"account.browse_more_on_origin_server": "Navigar plu sur li profil original",
|
||||
"account.cancel_follow_request": "Anullar sequer",
|
||||
"account.copy": "Copiar ligament al profil",
|
||||
"account.direct": "Privatmen mentionar @{name}",
|
||||
"account.disable_notifications": "Cessa notificar me quande @{name} posta",
|
||||
"account.domain_blocked": "Dominia bloccat",
|
||||
"account.edit_profile": "Redacter profil",
|
||||
"account.enable_notifications": "Notificar me quande @{name} posta",
|
||||
"account.endorse": "Recomandar sur profil",
|
||||
"account.featured_tags.last_status_at": "Ultim posta ye {date}",
|
||||
"account.featured_tags.last_status_never": "Null postas",
|
||||
"account.featured_tags.title": "Recomandat hashtags de {name}",
|
||||
"account.follow": "Sequer",
|
||||
"account.followers": "Sequitores",
|
||||
"account.followers.empty": "Ancor nequi seque ti-ci usator.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Sequitor} other {{counter} Sequitor}}",
|
||||
"account.following": "Sequent",
|
||||
"account.following_counter": "{count, plural, one {{counter} Sequent} other {{counter} Sequent}}",
|
||||
"account.follows.empty": "Ti-ci usator ancor ne seque quemcunc.",
|
||||
"account.follows_you": "Seque te",
|
||||
"account.go_to_profile": "Ear a profil",
|
||||
"account.hide_reblogs": "Celar boosts de @{name}",
|
||||
"account.in_memoriam": "In Memoriam.",
|
||||
"account.joined_short": "Adheret",
|
||||
"account.languages": "Changear lingues de subscrition",
|
||||
"account.link_verified_on": "Proprietá de ti-ci ligament esset verificat ye {date}",
|
||||
"account.locked_info": "Li statu de confidentialitá de ti-ci conto es configurat quam cludet. Li proprietario decide manualmen qui posse sequer.",
|
||||
"account.media": "Medie",
|
||||
"account.mention": "Mentionar @{name}",
|
||||
"account.moved_to": "{name} ha indicat que su nov conto es ja:",
|
||||
"account.mute": "Silentiar @{name}",
|
||||
"account.mute_notifications_short": "Silentiar notificationes",
|
||||
"account.mute_short": "Silentiar",
|
||||
"account.muted": "Silentiat",
|
||||
"account.no_bio": "Null descrition providet.",
|
||||
"account.open_original_page": "Aperter li págine original",
|
||||
"account.posts": "Postas",
|
||||
"account.posts_with_replies": "Postas e replicas",
|
||||
"account.report": "Raportar @{name}",
|
||||
"account.requested": "Atendent aprobation. Cliccar por anullar li petition de sequer",
|
||||
"account.requested_follow": "{name} ha petit sequer te",
|
||||
"account.share": "Distribuer li profil de @{name}",
|
||||
"account.show_reblogs": "Monstrar boosts de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Posta} other {{counter} Postas}}",
|
||||
"account.unblock": "Desbloccar @{name}",
|
||||
"account.unblock_domain": "Desbloccar dominia {domain}",
|
||||
"account.unblock_short": "Desbloccar",
|
||||
"account.unendorse": "Ne recomandar sur profil",
|
||||
"account.unfollow": "Dessequer",
|
||||
"account.unmute": "Dessilentiar @{name}",
|
||||
"account.unmute_notifications_short": "Dessilentiar notificationes",
|
||||
"account.unmute_short": "Dessilentiar",
|
||||
"account_note.placeholder": "Clicca por adjunter un nota",
|
||||
"admin.dashboard.daily_retention": "Usator-retention per die pos registration",
|
||||
"admin.dashboard.monthly_retention": "Usator-retention per mensu pos registration",
|
||||
"admin.dashboard.retention.average": "Medial",
|
||||
"admin.dashboard.retention.cohort": "Mensu de registration",
|
||||
"admin.dashboard.retention.cohort_size": "Nov usatores",
|
||||
"admin.impact_report.instance_accounts": "Conto-profiles to-ci vell deleter",
|
||||
"admin.impact_report.instance_followers": "Sequitores queles nor usatores vell perdir",
|
||||
"admin.impact_report.instance_follows": "Sequitores queles lor usatores vell perdir",
|
||||
"admin.impact_report.title": "Resumate de impact",
|
||||
"alert.rate_limited.message": "Ples reprovar pos {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Frequentie limitat",
|
||||
"alert.unexpected.message": "Un ínexpectat erra ha evenit.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"announcement.announcement": "Proclamation",
|
||||
"attachments_list.unprocessed": "(íntractat)",
|
||||
"audio.hide": "Celar audio",
|
||||
"autosuggest_hashtag.per_week": "{count} per semane",
|
||||
"boost_modal.combo": "Li proxim vez tu posse pressar {combo} por passar to-ci",
|
||||
"bundle_column_error.copy_stacktrace": "Copiar erra-raporte",
|
||||
"bundle_column_error.error.body": "Li demandat págine ne posset esser rendit. Fórsan it es un problema in nor code, o un problema de compatibilitá con li navigator.",
|
||||
"bundle_column_error.error.title": "O ve!",
|
||||
"bundle_column_error.network.body": "Un erra evenit durant li cargation de ti-ci págine, possibilmen pro un temporari problema de tui conexion del internet o de ti-ci servitor.",
|
||||
"bundle_column_error.network.title": "Erra de retage",
|
||||
"bundle_column_error.retry": "Provar denov",
|
||||
"bundle_column_error.return": "Retornar al comense",
|
||||
"bundle_column_error.routing.body": "Li demandat págine ne trovat se. Esque tu es cert que li URL in li adresse-barre es corect?",
|
||||
"bundle_column_error.routing.title": "404",
|
||||
"bundle_modal_error.close": "Cluder",
|
||||
"bundle_modal_error.message": "Alquo errat durant li cargation de ti-ci componente.",
|
||||
"bundle_modal_error.retry": "Provar denov",
|
||||
"closed_registrations.other_server_instructions": "Pro que Mastodon es decentralisat, on posse crear un conto che un altri servitor e ancor interacter con ti-ci.",
|
||||
"closed_registrations_modal.description": "Crear un conto che {domain} ne es possibil actualmen, ma ples memorar que on ne besona un conto specificmen che {domain} por usar Mastodon.",
|
||||
"closed_registrations_modal.find_another_server": "Serchar altri servitor",
|
||||
"closed_registrations_modal.preamble": "Mastodon es descentralisat, do on posse ser e interacter con quicunc che ti-ci servitor, sin egarda de u on crea su conto. On mem posse self-albergar it!",
|
||||
"closed_registrations_modal.title": "Registrar sur Mastodon",
|
||||
"column.about": "Information",
|
||||
"column.blocks": "Bloccat usatores",
|
||||
"column.bookmarks": "Marcatores",
|
||||
"column.community": "Local témpor-linea",
|
||||
"column.direct": "Privat mentiones",
|
||||
"column.directory": "Navigar profiles",
|
||||
"column.domain_blocks": "Bloccat dominia",
|
||||
"column.favourites": "Favorites",
|
||||
"column.firehose": "Témpor-lineas",
|
||||
"column.follow_requests": "Petitiones de sequer",
|
||||
"column.home": "Comense",
|
||||
"column.lists": "Listes",
|
||||
"column.mutes": "Silentiat usatores",
|
||||
"column.notifications": "Notificationes",
|
||||
"column.pins": "Pinglat postas",
|
||||
"column.public": "Federat témpor-linea",
|
||||
"column_back_button.label": "Retornar",
|
||||
"column_header.hide_settings": "Celar parametres",
|
||||
"column_header.moveLeft_settings": "Mover columne al levul",
|
||||
"column_header.moveRight_settings": "Mover columne al dextri",
|
||||
"column_header.pin": "Pinglar",
|
||||
"column_header.show_settings": "Monstrar parametres",
|
||||
"column_header.unpin": "Despinglar",
|
||||
"column_subheading.settings": "Parametres",
|
||||
"community.column_settings.local_only": "Solmen local",
|
||||
"community.column_settings.media_only": "Solmen medie",
|
||||
"community.column_settings.remote_only": "Solmen external",
|
||||
"compose.language.change": "Changear lingue",
|
||||
"compose.language.search": "Serchar lingues...",
|
||||
"compose.published.body": "Posta publicat.",
|
||||
"compose.published.open": "Aperter",
|
||||
"compose.saved.body": "Posta conservat.",
|
||||
"compose_form.direct_message_warning_learn_more": "Aprender plu",
|
||||
"compose_form.encryption_warning": "Postas in Mastodon ne es inciffrat de comense a fine. Ne posta quelcunc information sensitiv per Mastodon.",
|
||||
"compose_form.hashtag_warning": "Ti-ci posta ne va esser listat sur quelcunc hashtag pro que it ne es public. Solmen public postas posse esser serchat per hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tui conto ne es {locked}. Quicunc posse sequer te por vider tui postas solmen por sequitores.",
|
||||
"compose_form.lock_disclaimer.lock": "cludet",
|
||||
"compose_form.placeholder": "Quo es in tui spiritu?",
|
||||
"compose_form.poll.add_option": "Adjunter un option",
|
||||
"compose_form.poll.duration": "Duration del balotation",
|
||||
"compose_form.poll.option_placeholder": "Option {number}",
|
||||
"compose_form.poll.remove_option": "Remover ti-ci option",
|
||||
"compose_form.poll.switch_to_multiple": "Changea li balotation por permisser multiplic selectiones",
|
||||
"compose_form.poll.switch_to_single": "Changea li balotation por permisser un singul selection",
|
||||
"compose_form.publish": "Publicar",
|
||||
"compose_form.publish_form": "Nov posta",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "Conservar changes",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Marcar medie quam sensitiv} other {Marcar medie quam sensitiv}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Medie es marcat quam sensitiv} other {Medie es marcat quam sensitiv}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Medie ne es marcat quam sensitiv} other {Medie ne es marcat quam sensitiv}}",
|
||||
"compose_form.spoiler.marked": "Remover avise pri li contenete",
|
||||
"compose_form.spoiler.unmarked": "Adjunter avise pri li contenete",
|
||||
"compose_form.spoiler_placeholder": "Scri tui avise ci",
|
||||
"confirmation_modal.cancel": "Anullar",
|
||||
"confirmations.block.block_and_report": "Bloccar & Raportar",
|
||||
"confirmations.block.confirm": "Bloccar",
|
||||
"confirmations.block.message": "Esque tu vermen vole bloccar {name}?",
|
||||
"confirmations.cancel_follow_request.confirm": "Retraer petition",
|
||||
"confirmations.cancel_follow_request.message": "Esque tu vermen vole retraer tui petition sequer {name}?",
|
||||
"confirmations.delete.confirm": "Deleter",
|
||||
"confirmations.delete.message": "Esque tu vermen vole deleter ti-ci posta?",
|
||||
"confirmations.delete_list.confirm": "Deleter",
|
||||
"confirmations.delete_list.message": "Esque tu vermen vole permanentmen deleter ti-ci liste?",
|
||||
"confirmations.discard_edit_media.confirm": "Forjettar",
|
||||
"confirmations.discard_edit_media.message": "Tu have ínconservat changes al descrition de medie o al previse, forjettar les sin egarda?",
|
||||
"confirmations.domain_block.confirm": "Bloccar li tot dominia",
|
||||
"confirmations.domain_block.message": "Esque tu es certissim que tu vole bloccar li tot {domain}? In mult casus, bloccar o silentiar quelc specific contos es suficent e preferibil. Tu ne va vider contenete de ti dominia in quelcunc public témpor-linea o in tui notificationes. Tui sequitores de ti dominia va esser removet.",
|
||||
"confirmations.edit.confirm": "Redacter",
|
||||
"confirmations.edit.message": "Redacter nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?",
|
||||
"confirmations.logout.confirm": "Exear",
|
||||
"confirmations.logout.message": "Esque tu vermen vole exear?",
|
||||
"confirmations.mute.confirm": "Silentiar",
|
||||
"confirmations.mute.explanation": "To-ci va celar postas de ilu e postas mentionant ilu, ma it ancor va permisser ilu vider tui postas e sequer te.",
|
||||
"confirmations.mute.message": "Esque tu vermen vole silentiar {name}?",
|
||||
"confirmations.redraft.confirm": "Deleter & redacter",
|
||||
"confirmations.redraft.message": "Esque tu vermen vole deleter ti-ci posta e redacter it? Favorites e boosts va esser perdit, e responses al posta original va esser orfanat.",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Responder nu va remplazzar li missage quel tu actualmen composi. Esque tu vermen vole proceder?",
|
||||
"confirmations.unfollow.confirm": "Dessequer",
|
||||
"confirmations.unfollow.message": "Esque tu vermen vole dessequer {name}?",
|
||||
"conversation.delete": "Deleter conversation",
|
||||
"conversation.mark_as_read": "Marcar quam leet",
|
||||
"conversation.open": "Vider conversation",
|
||||
"conversation.with": "Con {names}",
|
||||
"copypaste.copied": "Copiat",
|
||||
"directory.federated": "Del conosset fediverse",
|
||||
"directory.local": "De solmen {domain}",
|
||||
"directory.new_arrivals": "Nov arivantes",
|
||||
"directory.recently_active": "Recentmen activ",
|
||||
"disabled_account_banner.account_settings": "Parametres del conto",
|
||||
"disabled_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat.",
|
||||
"dismissable_banner.community_timeline": "Tis-ci es li postas max recent de gente con contos che {domain}.",
|
||||
"dismissable_banner.dismiss": "Demisser",
|
||||
"dismissable_banner.explore_links": "Tis-ci es li novas max distribuet che li social retage hodie. Novas plu nov, postat de plu diferent persones, es monstrat plu alt.",
|
||||
"dismissable_banner.explore_statuses": "Tis-ci es postas del social retage queles es popular hodie. Nov postas con plu mult boosts e favorites es monstrat plu alt.",
|
||||
"dismissable_banner.explore_tags": "Tis-ci es hashtags queles es popular che li social retage hodie. Hashtags usat de plu mult persones diferent es monstrat plu alt.",
|
||||
"dismissable_banner.public_timeline": "Tis-ci es li max recent public postas de persones che li social retage quem gente che {domain} seque.",
|
||||
"embed.instructions": "Inbedar ti-ci posta per copiar li code in infra.",
|
||||
"embed.preview": "Vi qualmen it va aspecter:",
|
||||
"emoji_button.activity": "Activitá",
|
||||
"emoji_button.clear": "Efaciar",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.flags": "Flaggas",
|
||||
"emoji_button.food": "Manjage & Trincage",
|
||||
"emoji_button.label": "Inserter emoji",
|
||||
"emoji_button.nature": "Natura",
|
||||
"emoji_button.not_found": "Null acordant emoji trovat",
|
||||
"emoji_button.objects": "Objectes",
|
||||
"emoji_button.people": "Gente",
|
||||
"emoji_button.recent": "Frequentmen usat",
|
||||
"emoji_button.search": "Sercha...",
|
||||
"emoji_button.search_results": "Resultates de sercha",
|
||||
"emoji_button.symbols": "Simboles",
|
||||
"emoji_button.travel": "Viageation & Locos",
|
||||
"empty_column.account_hides_collections": "Ti-ci usator ha selectet ne publicar ti-ci information",
|
||||
"empty_column.account_suspended": "Conto suspendet",
|
||||
"empty_column.account_timeline": "Null postas ci!",
|
||||
"empty_column.account_unavailable": "Profil índisponibil",
|
||||
"empty_column.blocks": "Tu ancor ha bloccat null usatores.",
|
||||
"empty_column.bookmarked_statuses": "Tu ancor have null marcat postas. Quande tu marca un, it va aparir ci.",
|
||||
"empty_column.community": "Li local témpor-linea es vacui. Scri alquo publicmen por initiar la festa!",
|
||||
"empty_column.direct": "Tu ancor have null privat mentiones. Quande tu misse o recive un, it va aparir ci.",
|
||||
"empty_column.domain_blocks": "Ancor hay null bloccat dominias.",
|
||||
"empty_column.explore_statuses": "Nequo es popular actualmen. Retorna plu tarde!",
|
||||
"empty_column.favourited_statuses": "Tu ancor have null favorit postas. Quande tu favoritisa un, it va aparir ci.",
|
||||
"empty_column.favourites": "Ancor nequi ha favoritisat ti-ci posta. Quande alqui fa it, ilu va aparir ci.",
|
||||
"empty_column.follow_requests": "Tu ancor have null petitiones de sequer. Quande tu recive un, it va aparir ci.",
|
||||
"empty_column.followed_tags": "Tu ancor ha sequet null hashtags. Quande tu seque un, it va aparir ci.",
|
||||
"empty_column.hashtag": "Hay nullcos en ti-ci hashtag ancor.",
|
||||
"empty_column.home": "Tui hemal témpor-linea es vacui! Sequer plu gente por plenar it.",
|
||||
"empty_column.list": "Ancor ne hay quocunc in ti-ci liste. Quande membres de ti-ci liste publica nov postas, ili va aparir ci.",
|
||||
"empty_column.lists": "Tu ancor have null listes. Quande tu crea un, it va aparir ci.",
|
||||
"empty_column.mutes": "Tu ancor ha silentiat null usatores.",
|
||||
"empty_column.notifications": "Tu have null notificationes. Quande altri persones interacte con te, tu va vider it ci.",
|
||||
"empty_column.public": "Hay nullcos ci! Scri alquo publicmen, o manualmen seque usatores de altri servitores por plenar to-ci",
|
||||
"error.unexpected_crash.explanation": "Pro un error in nor code o un problema de compatibilitá in li navigator, ti-ci págine ne posset esser monstrat correctmen.",
|
||||
"error.unexpected_crash.explanation_addons": "Ti-ci págine ne posset esser monstrat correctmen. Li error es probabilmen causat de un extension al navigator o instrumentes por automatic traduction.",
|
||||
"error.unexpected_crash.next_steps": "Prova recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.",
|
||||
"error.unexpected_crash.next_steps_addons": "Prova desactivisar les e recargar li págine. Si to ne auxilia, tu fórsan posse usar Mastodon per un diferent navigator o aplication.",
|
||||
"errors.unexpected_crash.report_issue": "Raportar un problema",
|
||||
"explore.search_results": "Resultates de sercha",
|
||||
"explore.suggested_follows": "Gente",
|
||||
"explore.title": "Explorar",
|
||||
"explore.trending_links": "Novas",
|
||||
"explore.trending_statuses": "Postas",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
"filter_modal.added.context_mismatch_explanation": "Ti-ci filtre-categorie ne aplica al contextu in quel tu ha accessat ti-ci posta. Si tu vole que li posta es filtrat anc in ti-ci contextu, tu deve redacter li filtre.",
|
||||
"filter_modal.added.context_mismatch_title": "Contextu íncompatibil!",
|
||||
"filter_modal.added.expired_explanation": "Ti-ci filtre-categorie ha expirat, tu deve changear li date de expiration por far it aplicar.",
|
||||
"filter_modal.added.expired_title": "Expirat filtre!",
|
||||
"filter_modal.added.review_and_configure": "Por reviser e configurar ti-ci filtre-categorie, ea a {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Parametres pri filtres",
|
||||
"filter_modal.added.settings_link": "págine por parametres",
|
||||
"filter_modal.added.short_explanation": "Ti-ci post ha esset adjuntet al sequente filtre-categorie: {title}.",
|
||||
"filter_modal.added.title": "Filtre adjuntet!",
|
||||
"filter_modal.select_filter.context_mismatch": "ne aplica a ti-ci contextu",
|
||||
"filter_modal.select_filter.expired": "expirat",
|
||||
"filter_modal.select_filter.prompt_new": "Nov categorie: {name}",
|
||||
"filter_modal.select_filter.search": "Serchar o crear",
|
||||
"filter_modal.select_filter.subtitle": "Usar un existent categorie o crear nov",
|
||||
"filter_modal.select_filter.title": "Filtrar ti-ci posta",
|
||||
"filter_modal.title.status": "Filtrar un posta",
|
||||
"firehose.all": "Omno",
|
||||
"firehose.local": "Ti-ci servitor",
|
||||
"firehose.remote": "Altri servitores",
|
||||
"follow_request.authorize": "Autorisar",
|
||||
"follow_request.reject": "Rejecter",
|
||||
"follow_requests.unlocked_explanation": "Benque tu conto ne es cludet, li administratores de {domain} pensat que tu fórsan vell voler tractar seque-petitiones de tis-ci contos manualmen.",
|
||||
"followed_tags": "Sequet hashtags",
|
||||
"footer.about": "Information",
|
||||
"footer.directory": "Profilarium",
|
||||
"footer.get_app": "Obtener li aplication",
|
||||
"footer.invite": "Invitar gente",
|
||||
"footer.privacy_policy": "Politica pri privatie",
|
||||
"footer.source_code": "Vider li fonte-code",
|
||||
"footer.status": "Statu",
|
||||
"generic.saved": "Conservat",
|
||||
"getting_started.heading": "Qualmen comensar",
|
||||
"hashtag.column_header.tag_mode.all": "e {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "sin {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "Null suggestiones trovat",
|
||||
"hashtag.column_settings.select.placeholder": "Inscrir hashtags…",
|
||||
"hashtag.column_settings.tag_mode.all": "Omni tis",
|
||||
"hashtag.column_settings.tag_mode.any": "Quelcunc de tis",
|
||||
"hashtag.column_settings.tag_mode.none": "Necun de tis",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional hashtags in ti-ci columne",
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} posta} other {{counter} postas}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} posta} other {{counter} postas}} hodie",
|
||||
"hashtag.follow": "Sequer hashtag",
|
||||
"hashtag.unfollow": "Dessequer hashtag",
|
||||
"hashtags.and_other": "…e {count, plural, other {# in plu}}",
|
||||
"home.actions.go_to_explore": "Vider lu populari",
|
||||
"home.actions.go_to_suggestions": "Trovar gente por sequer",
|
||||
"home.column_settings.basic": "Basic",
|
||||
"home.column_settings.show_reblogs": "Monstrar boosts",
|
||||
"home.column_settings.show_replies": "Monstrar responses",
|
||||
"home.explore_prompt.body": "Tui hemal témpor-linea have un mixtura del hashtags queles tu selectet sequer, li gente quem tu selectet sequer, e li postas queles ili boosta. Si to sembla tro quiet, tu fórsan vole:",
|
||||
"home.explore_prompt.title": "To-ci es tui hemal págine in Mastodon.",
|
||||
"home.hide_announcements": "Celar proclamationes",
|
||||
"home.pending_critical_update.body": "Ples actualisar tui Mastodon-servitor tam rapid quam es possibil!",
|
||||
"home.pending_critical_update.link": "Vider actualisationes",
|
||||
"home.pending_critical_update.title": "Urgent actualisation de securitá disponibil!",
|
||||
"home.show_announcements": "Monstrar proclamationes",
|
||||
"interaction_modal.description.favourite": "Con un conto de Mastodon, tu posse favoritisar ti-ci posta por informar li autor pri quant mult tu aprecia it e conservar it por plu tard.",
|
||||
"interaction_modal.description.follow": "Con un conto de Mastodon, tu posse sequer {name} por reciver su postas in tui hemal témpor-linea.",
|
||||
"interaction_modal.description.reblog": "Con un conto de Mastodon, tu posse boostar ti-ci posta por distribuer it a tui propri sequitores.",
|
||||
"interaction_modal.description.reply": "Con un conto de Mastodon, tu posse responder a ti-ci posta.",
|
||||
"interaction_modal.login.action": "Retorna a hem",
|
||||
"interaction_modal.login.prompt": "Dominia de tui hemal servitor, p.ex. mastodon.social",
|
||||
"interaction_modal.no_account_yet": "Ne sur Mastodon?",
|
||||
"interaction_modal.on_another_server": "Sur un servitor diferent",
|
||||
"interaction_modal.on_this_server": "Sur ti-ci servitor",
|
||||
"interaction_modal.sign_in": "Tu ne ha initiat session che ti-ci servitor. U logia tui conto?",
|
||||
"interaction_modal.sign_in_hint": "Nota: To es li websitu u tu adheret. Si tu ne rememora, sercha li benevenit-email in tui inbuxe. Tu anc posse introducter tui plen usator-nómine! (p.ex. @Mastodon@mastodon.social)",
|
||||
"interaction_modal.title.favourite": "Favoritisar li posta de {name}",
|
||||
"interaction_modal.title.follow": "Sequer {name}",
|
||||
"interaction_modal.title.reblog": "Boostar li posta de {name}",
|
||||
"interaction_modal.title.reply": "Responder al posta de {name}",
|
||||
"intervals.full.days": "{number, plural, one {# die} other {# dies}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hor} other {# hores}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
"keyboard_shortcuts.back": "Retroear",
|
||||
"keyboard_shortcuts.blocked": "Aperter li lista de bloccat usatores",
|
||||
"keyboard_shortcuts.boost": "Boostar posta",
|
||||
"keyboard_shortcuts.column": "Infocar columne",
|
||||
"keyboard_shortcuts.compose": "Infocar li text-area de composition",
|
||||
"keyboard_shortcuts.description": "Descrition",
|
||||
"keyboard_shortcuts.direct": "por aperter li columne de privat mentiones",
|
||||
"keyboard_shortcuts.down": "Mover ad-infra in li liste",
|
||||
"keyboard_shortcuts.enter": "Aperter posta",
|
||||
"keyboard_shortcuts.favourite": "Favoritisar posta",
|
||||
"keyboard_shortcuts.favourites": "Aperter li liste de favorites",
|
||||
"keyboard_shortcuts.federated": "Aperter li federat témpor-linea",
|
||||
"keyboard_shortcuts.home": "Aperter li hemal témpor-linea",
|
||||
"keyboard_shortcuts.local": "Aperter li local témpor-linea",
|
||||
"keyboard_shortcuts.mention": "Mentionar li autor",
|
||||
"keyboard_shortcuts.muted": "Aperter li lista de silentiat usatores",
|
||||
"keyboard_shortcuts.my_profile": "Aperter tui profil",
|
||||
"keyboard_shortcuts.notifications": "Aperter li columne de notificationes",
|
||||
"keyboard_shortcuts.open_media": "Aperter medie",
|
||||
"keyboard_shortcuts.pinned": "Aperter li liste de pinglat postas",
|
||||
"keyboard_shortcuts.profile": "Aperter profil del autor",
|
||||
"keyboard_shortcuts.reply": "Responder al posta",
|
||||
"keyboard_shortcuts.requests": "Aperter liste de seque-petitiones",
|
||||
"keyboard_shortcuts.search": "Infocar sercha-barre",
|
||||
"keyboard_shortcuts.spoilers": "Monstrar/celar CW camp",
|
||||
"keyboard_shortcuts.start": "Aperter \"Qualmen comensar\" columne",
|
||||
"keyboard_shortcuts.toggle_hidden": "Monstrar/celar text detra CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "Monstrar/celar medie",
|
||||
"keyboard_shortcuts.toot": "Crear un nov posta",
|
||||
"keyboard_shortcuts.unfocus": "Desinfocar text-area de composition/serchar",
|
||||
"keyboard_shortcuts.up": "Mover ad-supra in li liste",
|
||||
"lightbox.close": "Cluder",
|
||||
"lightbox.compress": "Compresser vise-buxe de image",
|
||||
"lightbox.expand": "Expander vise-buxe de image",
|
||||
"lightbox.next": "Sequent",
|
||||
"lightbox.previous": "Precedent",
|
||||
"limited_account_hint.action": "Monstrar profil totvez",
|
||||
"limited_account_hint.title": "Ti-ci profil ha esset celat del moderatores de {domain}.",
|
||||
"link_preview.author": "De {name}",
|
||||
"lists.account.add": "Adjunter a liste",
|
||||
"lists.account.remove": "Remover de liste",
|
||||
"lists.delete": "Deleter liste",
|
||||
"lists.edit": "Redacter liste",
|
||||
"lists.edit.submit": "Changear titul",
|
||||
"lists.exclusive": "Celar ti-ci postas del hemal témpor-linea",
|
||||
"lists.new.create": "Adjunter liste",
|
||||
"lists.new.title_placeholder": "Titul del nov liste",
|
||||
"lists.replies_policy.followed": "Quelcunc sequet usator",
|
||||
"lists.replies_policy.list": "Membres del liste",
|
||||
"lists.replies_policy.none": "Nequi",
|
||||
"lists.replies_policy.title": "Monstrar responses a:",
|
||||
"lists.search": "Serchar inter li persones quem tu seque",
|
||||
"lists.subheading": "Tui listes",
|
||||
"load_pending": "{count, plural, one {# nov element} other {# nov elementes}}",
|
||||
"loading_indicator.label": "Cargant…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Celar image} other {Celar images}}",
|
||||
"moved_to_account_banner.text": "Tui conto {disabledAccount} es actualmen desactivisat pro que tu movet te a {movedToAccount}.",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Celar notificationes de ti-ci usator?",
|
||||
"mute_modal.indefinite": "Índefinit",
|
||||
"navigation_bar.about": "Information",
|
||||
"navigation_bar.advanced_interface": "Aperter in li web-interfacie avansat",
|
||||
"navigation_bar.blocks": "Bloccat usatores",
|
||||
"navigation_bar.bookmarks": "Marcatores",
|
||||
"navigation_bar.community_timeline": "Local témpor-linea",
|
||||
"navigation_bar.compose": "Composir un nov posta",
|
||||
"navigation_bar.direct": "Privat mentiones",
|
||||
"navigation_bar.discover": "Decovrir",
|
||||
"navigation_bar.domain_blocks": "Bloccat dominias",
|
||||
"navigation_bar.edit_profile": "Redacter profil",
|
||||
"navigation_bar.explore": "Explorar",
|
||||
"navigation_bar.favourites": "Favorites",
|
||||
"navigation_bar.filters": "Silentiat paroles",
|
||||
"navigation_bar.follow_requests": "Petitiones de sequer",
|
||||
"navigation_bar.followed_tags": "Sequet hashtags",
|
||||
"navigation_bar.follows_and_followers": "Sequetes e sequitores",
|
||||
"navigation_bar.lists": "Listes",
|
||||
"navigation_bar.logout": "Exear",
|
||||
"navigation_bar.mutes": "Silentiat usatores",
|
||||
"navigation_bar.opened_in_classic_interface": "Postas, contos e altri specific págines es customalmen apertet in li classic web-interfacie.",
|
||||
"navigation_bar.personal": "Personal",
|
||||
"navigation_bar.pins": "Pinglat postas",
|
||||
"navigation_bar.preferences": "Preferenties",
|
||||
"navigation_bar.public_timeline": "Federat témpor-linea",
|
||||
"navigation_bar.search": "Sercha",
|
||||
"navigation_bar.security": "Securitá",
|
||||
"not_signed_in_indicator.not_signed_in": "On deve aperter session por accesser ti-ci ressurse.",
|
||||
"notification.admin.report": "{name} raportat {target}",
|
||||
"notification.admin.sign_up": "{name} adheret",
|
||||
"notification.favourite": "{name} favoritisat tui posta",
|
||||
"notification.follow": "{name} sequet te",
|
||||
"notification.follow_request": "{name} ha petit sequer te",
|
||||
"notification.mention": "{name} mentionat te",
|
||||
"notification.own_poll": "Tui balotation ha finit",
|
||||
"notification.poll": "Un balotation in quel tu votat ha finit",
|
||||
"notification.reblog": "{name} boostat tui posta",
|
||||
"notification.status": "{name} just postat",
|
||||
"notification.update": "{name} modificat un posta",
|
||||
"notifications.clear": "Aclarar notificationes",
|
||||
"notifications.clear_confirmation": "Vole tu vermen permanentmen aclarar omni tui notificationes?",
|
||||
"notifications.column_settings.admin.report": "Nov raportas:",
|
||||
"notifications.column_settings.admin.sign_up": "Nov registrationes:",
|
||||
"notifications.column_settings.alert": "Notificationes sur li computator",
|
||||
"notifications.column_settings.favourite": "Favorites:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Monstrar omni categories",
|
||||
"notifications.column_settings.filter_bar.category": "Rapid filtre-barre",
|
||||
"notifications.column_settings.filter_bar.show_bar": "Monstrar filtre-barre",
|
||||
"notifications.column_settings.follow": "Nov sequitores:",
|
||||
"notifications.column_settings.follow_request": "Nov petitiones de sequer:",
|
||||
"notifications.column_settings.mention": "Mentiones:",
|
||||
"notifications.column_settings.poll": "Resultates del balotation:",
|
||||
"notifications.column_settings.push": "Notificationes push",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Monstrar in columne",
|
||||
"notifications.column_settings.sound": "Far son",
|
||||
"notifications.column_settings.status": "Nov postas:",
|
||||
"notifications.column_settings.unread_notifications.category": "Ínleet notificationes",
|
||||
"notifications.column_settings.unread_notifications.highlight": "Marcar ínleet notificationes",
|
||||
"notifications.column_settings.update": "Redactiones:",
|
||||
"notifications.filter.all": "Omni",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favorites",
|
||||
"notifications.filter.follows": "Seques",
|
||||
"notifications.filter.mentions": "Mentiones",
|
||||
"notifications.filter.polls": "Resultates del balotation",
|
||||
"notifications.filter.statuses": "Actualisationes de gente quem tu seque",
|
||||
"notifications.grant_permission": "Dar permission.",
|
||||
"notifications.group": "{count} notificationes",
|
||||
"notifications.mark_as_read": "Marcar omni notificationes quam leet",
|
||||
"notifications.permission_denied": "Notificationes sur li computator es índisponibil pro que on ha previamen rejectet un petition por navigator-permissiones",
|
||||
"notifications.permission_denied_alert": "Notificationes sur li computator ne posse esser activisat, pro que navigator-permission ha esset previamen rejectet",
|
||||
"notifications.permission_required": "Notificationes sur li computator es índisponibil pro que li besonat permission ne ha esset dat.",
|
||||
"notifications_permission_banner.enable": "Activisar notificationes sur li computator",
|
||||
"notifications_permission_banner.how_to_control": "Por reciver notificationes quande Mastodon ne es apert, activisa notificationes sur li computator. Tu posse decider precisimen quel species de interactiones genera notificationes per li buton {icon} in-supra quande ili es activisat.",
|
||||
"notifications_permission_banner.title": "Nequande preterlassa quocunc",
|
||||
"onboarding.action.back": "Retroear",
|
||||
"onboarding.actions.back": "Retroear",
|
||||
"onboarding.actions.go_to_explore": "Ear a vider lu populari",
|
||||
"onboarding.actions.go_to_home": "Ear al hemal témpor-linea",
|
||||
"onboarding.compose.template": "Salute #Mastodon!",
|
||||
"onboarding.follows.empty": "Ínfortunatmen, null resultates posse esser monstrat actualmen. Tu posse provar serchar o usar li \"Explorar\" págine por trovar gente por sequer, o prova denov plu tard.",
|
||||
"onboarding.follows.lead": "Tui hemal témpor-linea es li primari maniere de experir Mastodon. Plu persones quem tu seque, plu activ e interessant it va esser. Por auxiliar te comensar, vi quelc suggestiones:",
|
||||
"onboarding.follows.title": "Personalisar tui hemal témpor-linea",
|
||||
"onboarding.profile.discoverable": "Fa mi profil decovribil",
|
||||
"onboarding.profile.discoverable_hint": "Quande tu opta esser decovribil in Mastodon, tui postas posse aparir in resultates de sercha e tendenties, e tui profil posse esser suggestet a persones con interesses simil a tui.",
|
||||
"onboarding.profile.display_name": "Nómine a monstrar",
|
||||
"onboarding.profile.display_name_hint": "Tui complet nómine o tui amusant nómine…",
|
||||
"onboarding.profile.lead": "Tu sempre posse completar ti-ci plu tard in li parametres, u mem plu optiones de customisation es disponibil.",
|
||||
"onboarding.profile.note": "Biografie",
|
||||
"onboarding.profile.note_hint": "Tu posse @mentionar altri persones o #hashtags…",
|
||||
"onboarding.profile.save_and_continue": "Conservar e avansar",
|
||||
"onboarding.profile.title": "Popular tu profil",
|
||||
"onboarding.profile.upload_avatar": "Cargar profil-portrete",
|
||||
"onboarding.profile.upload_header": "Cargar cap-image",
|
||||
"onboarding.share.lead": "Di gente qualmen ili posse trovar te che Mastodon!",
|
||||
"onboarding.share.message": "Yo es {username} che #Mastodon! Veni e seque me a {url}",
|
||||
"onboarding.share.next_steps": "Possibil sequent passus:",
|
||||
"onboarding.share.title": "Partir tui profil",
|
||||
"onboarding.start.lead": "Tu es ja un parte de Mastodon, un unic, decentralisat platform de medie social in quel tu—ne un algoritme—selectiona tui propri experientie. Lass nos departer sur un nov frontiera social:",
|
||||
"onboarding.start.skip": "Auxilie por comensar ne besonat?",
|
||||
"onboarding.start.title": "Tu ha successat!",
|
||||
"onboarding.steps.follow_people.body": "Sequer interessant gente es to quo importa in Mastodon.",
|
||||
"onboarding.steps.follow_people.title": "Personalisar tui hemal témpor-linea",
|
||||
"onboarding.steps.publish_status.body": "Saluta li munde con text, images, videos o balotationes {emoji}",
|
||||
"onboarding.steps.publish_status.title": "Crear tui unesim posta",
|
||||
"onboarding.steps.setup_profile.body": "Ascresce tui interactiones per haver un profil detalliat.",
|
||||
"onboarding.steps.setup_profile.title": "Personalisar tui profil",
|
||||
"onboarding.steps.share_profile.body": "Di tui amics qualmen trovar te che Mastodon",
|
||||
"onboarding.steps.share_profile.title": "Partir tui profil Mastodon",
|
||||
"onboarding.tips.2fa": "<strong>Savet tu?</strong> Tu posse securisar tui conto per activisar 2-factor autentication in tui parametres de conto. Ti functiona con quelcunc aplication TOTP quel tu selecte, null númere de telefon besonat!",
|
||||
"onboarding.tips.accounts_from_other_servers": "<strong>Savet tu?</strong> Pro que Mastodon es decentralisat, quelc profiles queles tu trova va esser logiat che servitores altri quam tui. Totvez tu posse interacter con les sin grates! Lor servitores es in li duesim demí de lor usator-nómines!",
|
||||
"onboarding.tips.migration": "<strong>Savet tu?</strong> Si tu senti que {domain} ne es un bonissim servitor por te futurimen, tu posse mover te a un altri Mastodon-servitor sin perdir tui sequitores. Tu posse mem etablisser tui propri servitor!",
|
||||
"onboarding.tips.verification": "<strong>Savet tu?</strong> Tu posse verificar tui conto per metter un ligament a tui Mastodon-profil in tui propri websitu e adjunter li websitu a tui profil. Null payament o documentes besonat!",
|
||||
"password_confirmation.exceeds_maxlength": "Confirmation de passa-parol transpassa li maxim longore de passa-paroles",
|
||||
"password_confirmation.mismatching": "Confirmation de passa-parol ne egala",
|
||||
"picture_in_picture.restore": "Restaurar",
|
||||
"poll.closed": "Finit",
|
||||
"poll.refresh": "Recargar",
|
||||
"poll.reveal": "Vider resultates",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# persones}}",
|
||||
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
|
||||
"poll.vote": "Votar",
|
||||
"poll.voted": "Tu votat por ti-ci option",
|
||||
"poll.votes": "{votes, plural, one {# vote} other {# votes}}",
|
||||
"poll_button.add_poll": "Adjunter un balotation",
|
||||
"poll_button.remove_poll": "Remover balotation",
|
||||
"privacy.change": "Changear li privatie del posta",
|
||||
"privacy.direct.long": "Visibil solmen a mentionat usatores",
|
||||
"privacy.direct.short": "Solmen persones mentionat",
|
||||
"privacy.private.long": "Visibil solmen por sequitores",
|
||||
"privacy.private.short": "Solmen sequitores",
|
||||
"privacy.public.long": "Visibil a omnes",
|
||||
"privacy.public.short": "Public",
|
||||
"privacy.unlisted.long": "Visibil por omnes, ma excludet de functiones de decovrition",
|
||||
"privacy.unlisted.short": "Delistat",
|
||||
"privacy_policy.last_updated": "Ultimmen actualisat ye {date}",
|
||||
"privacy_policy.title": "Politica pri Privatie",
|
||||
"recommended": "Recomandat",
|
||||
"refresh": "Recargar",
|
||||
"regeneration_indicator.label": "Cargant…",
|
||||
"regeneration_indicator.sublabel": "On es preparant tui hemal témpor-linea!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.full.days": "Ante {number, plural, one {# die} other {# dies}}",
|
||||
"relative_time.full.hours": "Ante {number, plural, one {# hor} other {# hores}}",
|
||||
"relative_time.full.just_now": "just nu",
|
||||
"relative_time.full.minutes": "Ante {number, plural, one {# minute} other {# minutes}}",
|
||||
"relative_time.full.seconds": "Ante {number, plural, one {# second} other {# secondes}}",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "nu",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"relative_time.today": "hodie",
|
||||
"reply_indicator.cancel": "Anullar",
|
||||
"report.block": "Bloccar",
|
||||
"report.block_explanation": "Tu ne va vider su postas. Li usator ni va posser vider tui postas, ni sequer te, ni va posser saver pri li statu de esser bloccat.",
|
||||
"report.categories.legal": "Legal",
|
||||
"report.categories.other": "Altricos",
|
||||
"report.categories.spam": "Spam",
|
||||
"report.categories.violation": "Contenete violant un o pluri regules del servitor",
|
||||
"report.category.subtitle": "Selecte li max bon option",
|
||||
"report.category.title": "Di nos quo passa con ti-ci {type}",
|
||||
"report.category.title_account": "profil",
|
||||
"report.category.title_status": "posta",
|
||||
"report.close": "Finit",
|
||||
"report.comment.title": "Hay alquo plu quel tu pensa que noi deve saver?",
|
||||
"report.forward": "Misser anc a {target}",
|
||||
"report.forward_hint": "Ti-ci conto es de un altri servitor. Misser un anonimisat copie del raporte anc a ta?",
|
||||
"report.mute": "Silentiar",
|
||||
"report.mute_explanation": "Tu ne va vider su postas. Ilu ancor posse sequer te e vider tui postas e ne va saver que ilu es silentiat.",
|
||||
"report.next": "Sequent",
|
||||
"report.placeholder": "Additional comentas",
|
||||
"report.reasons.dislike": "It ne plese me",
|
||||
"report.reasons.dislike_description": "It es alquo quel displese te",
|
||||
"report.reasons.legal": "It es ínlegal",
|
||||
"report.reasons.legal_description": "Tu crede que it viola un lege del land de te o de tui servitor",
|
||||
"report.reasons.other": "It es altricos",
|
||||
"report.reasons.other_description": "Li problema ne apartene in li altri categories",
|
||||
"report.reasons.spam": "It es spam",
|
||||
"report.reasons.spam_description": "Maliciosi ligamentes, fals activitá, o repetitiv responses",
|
||||
"report.reasons.violation": "It viola li regules del servitor",
|
||||
"report.reasons.violation_description": "Tu save que it viola specific regules",
|
||||
"report.rules.subtitle": "Selecte omnes queles aplica",
|
||||
"report.rules.title": "Quel regules es violat?",
|
||||
"report.statuses.subtitle": "Selecte omnes queles aplica",
|
||||
"report.statuses.title": "Hay postas queles posse subtener ti-ci raporte?",
|
||||
"report.submit": "Misser",
|
||||
"report.target": "Raportant {target}",
|
||||
"report.thanks.take_action": "Tis-ci es tui optiones por controlar ti quel tu vide che Mastodon:",
|
||||
"report.thanks.take_action_actionable": "Durante que noi tracta ti-ci, tu posse far lu sequent contra @{name}:",
|
||||
"report.thanks.title": "Vole tu ne vider to?",
|
||||
"report.thanks.title_actionable": "Mersí pro raportar, noi va investigar to.",
|
||||
"report.unfollow": "Dessequer @{name}",
|
||||
"report.unfollow_explanation": "Tu seque ti-ci conto. Por ne vider su postas en tui hemal témpor-linea, dessequer it.",
|
||||
"report_notification.attached_statuses": "{count, plural, one {{count} posta} other {{count} postas}} atachat",
|
||||
"report_notification.categories.legal": "Legal",
|
||||
"report_notification.categories.other": "Altricos",
|
||||
"report_notification.categories.spam": "Spam",
|
||||
"report_notification.categories.violation": "Violation de regul",
|
||||
"report_notification.open": "Aperter raporta",
|
||||
"search.no_recent_searches": "Null recent serchas",
|
||||
"search.placeholder": "Serchar",
|
||||
"search.quick_action.account_search": "Profiles acordant con {x}",
|
||||
"search.quick_action.go_to_account": "Ear al profil {x}",
|
||||
"search.quick_action.go_to_hashtag": "Ear al hashtag {x}",
|
||||
"search.quick_action.open_url": "Aperter URL in Mastodon",
|
||||
"search.quick_action.status_search": "Postas acordant con {x}",
|
||||
"search.search_or_paste": "Serchar o glutinar URL",
|
||||
"search_popout.full_text_search_disabled_message": "Ne disponibil che {domain}.",
|
||||
"search_popout.full_text_search_logged_out_message": "Solmen disponibil con session initiat.",
|
||||
"search_popout.options": "Sercha-parametres",
|
||||
"search_popout.quick_actions": "Rapid actiones",
|
||||
"search_popout.recent": "Recent serchas",
|
||||
"search_popout.specific_date": "specific date",
|
||||
"search_popout.user": "usator",
|
||||
"search_results.accounts": "Profiles",
|
||||
"search_results.all": "Omni",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.nothing_found": "Trovat se nullcos por ti término de sercha",
|
||||
"search_results.see_all": "Vider omni",
|
||||
"search_results.statuses": "Postas",
|
||||
"search_results.title": "Sercha por {q}",
|
||||
"server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)",
|
||||
"server_banner.active_users": "activ usatores",
|
||||
"server_banner.administered_by": "Administrat de:",
|
||||
"server_banner.introduction": "{domain} es un part del decentralisat social retage constructet sur {mastodon}.",
|
||||
"server_banner.learn_more": "Aprender plu",
|
||||
"server_banner.server_stats": "Statisticas pri li servitor:",
|
||||
"sign_in_banner.create_account": "Crear un conto",
|
||||
"sign_in_banner.sign_in": "Intrar",
|
||||
"sign_in_banner.sso_redirect": "Intrar o registrar se",
|
||||
"sign_in_banner.text": "Intrar por sequer profiles o hashtags, favoritisar, partir e responder a postas. Tu posse anc interacter per tui conto che un diferent servitor.",
|
||||
"status.admin_account": "Aperter interfacie de moderation por @{name}",
|
||||
"status.admin_domain": "Aperter interfacie de moderation por {domain}",
|
||||
"status.admin_status": "Aperter ti-ci posta in li interfacie de moderation",
|
||||
"status.block": "Bloccar @{name}",
|
||||
"status.bookmark": "Marcar",
|
||||
"status.cancel_reblog_private": "Desboostar",
|
||||
"status.cannot_reblog": "Ti-ci posta ne posse esser boostat",
|
||||
"status.copy": "Copiar ligament al posta",
|
||||
"status.delete": "Deleter",
|
||||
"status.detailed_status": "Detalliat vise de conversation",
|
||||
"status.direct": "Privatmen mentionar @{name}",
|
||||
"status.direct_indicator": "Privat mention",
|
||||
"status.edit": "Modificar",
|
||||
"status.edited": "Modificat ye {date}",
|
||||
"status.edited_x_times": "Modificat {count, plural, one {{count} vez} other {{count} vezes}}",
|
||||
"status.embed": "Inbedar",
|
||||
"status.favourite": "Favoritisar",
|
||||
"status.filter": "Filtrar ti-ci posta",
|
||||
"status.filtered": "Filtrat",
|
||||
"status.hide": "Celar posta",
|
||||
"status.history.created": "creat de {name} ye {date}",
|
||||
"status.history.edited": "modificat de {name} ye {date}",
|
||||
"status.load_more": "Cargar plu",
|
||||
"status.media.open": "Cliccar por aperter",
|
||||
"status.media.show": "Cliccar por monstrar",
|
||||
"status.media_hidden": "Medie celat",
|
||||
"status.mention": "Mentionar @{name}",
|
||||
"status.more": "Plu",
|
||||
"status.mute": "Silentiar @{name}",
|
||||
"status.mute_conversation": "Silentiar conversation",
|
||||
"status.open": "Expander ti-ci posta",
|
||||
"status.pin": "Pinglar sur profil",
|
||||
"status.pinned": "Pinglat posta",
|
||||
"status.read_more": "Leer plu",
|
||||
"status.reblog": "Boostar",
|
||||
"status.reblog_private": "Boostar con li original visibilitá",
|
||||
"status.reblogged_by": "{name} boostat",
|
||||
"status.reblogs.empty": "Ancor nequi ha boostat ti-ci posta. Quande alqui fa it, ilu va aparir ci.",
|
||||
"status.redraft": "Deleter & redacter",
|
||||
"status.remove_bookmark": "Remover marcator",
|
||||
"status.replied_to": "Respondet a {name}",
|
||||
"status.reply": "Responder",
|
||||
"status.replyAll": "Responder al fil",
|
||||
"status.report": "Raportar @{name}",
|
||||
"status.sensitive_warning": "Sensitiv contenete",
|
||||
"status.share": "Partir",
|
||||
"status.show_filter_reason": "Monstrar totvez",
|
||||
"status.show_less": "Monstrar minu",
|
||||
"status.show_less_all": "Monstrar minu por omno",
|
||||
"status.show_more": "Monstrar plu",
|
||||
"status.show_more_all": "Monstrar plu por omno",
|
||||
"status.show_original": "Monstrar li original",
|
||||
"status.title.with_attachments": "{user} postat {attachmentCount, plural, one {un atachament} other {{attachmentCount} atachamentes}}",
|
||||
"status.translate": "Traducter",
|
||||
"status.translated_from_with": "Traductet de {lang} per {provider}",
|
||||
"status.uncached_media_warning": "Previse ne disponibil",
|
||||
"status.unmute_conversation": "Dessilentiar conversation",
|
||||
"status.unpin": "Despinglar de profil",
|
||||
"subscribed_languages.lead": "Solmen postas in selectet lingues va aparir in tui hemal e listal témpor-lineas pos li change. Selecte null por reciver postas in omni lingues.",
|
||||
"subscribed_languages.save": "Conservar changes",
|
||||
"subscribed_languages.target": "Changear abonnat lingues por {target}",
|
||||
"tabs_bar.home": "Hem",
|
||||
"tabs_bar.notifications": "Notificationes",
|
||||
"time_remaining.days": "{number, plural, one {# die} other {# dies}} resta",
|
||||
"time_remaining.hours": "{number, plural, one {# hor} other {# hores}} resta",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} resta",
|
||||
"time_remaining.moments": "Momentes resta",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# secondes}} resta",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} de altri servitores ne es monstrat.",
|
||||
"timeline_hint.resources.followers": "Sequitores",
|
||||
"timeline_hint.resources.follows": "Sequetes",
|
||||
"timeline_hint.resources.statuses": "Plu old postas",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} persones}} durant li ultim {days, plural, one {die} other {{days} dies}}",
|
||||
"trends.trending_now": "Actualmen populari",
|
||||
"ui.beforeunload": "Tui íncomplet posta va esser perdit si tu lassa Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Trenar & lassar cader por cargar",
|
||||
"upload_button.label": "Adjunter images, un video o un audio-file",
|
||||
"upload_error.limit": "Límite de medie-cargationes transpassat.",
|
||||
"upload_error.poll": "On ne es permisset cargar medie con balotationes.",
|
||||
"upload_form.audio_description": "Descrir por persones qui es surd o ne audi bon",
|
||||
"upload_form.description": "Descrir por persones qui es ciec o have mal vision",
|
||||
"upload_form.description_missing": "Null descrition adjuntet",
|
||||
"upload_form.edit": "Redacter",
|
||||
"upload_form.thumbnail": "Changear previsual image",
|
||||
"upload_form.undo": "Deleter",
|
||||
"upload_form.video_description": "Descrir por persones qui es surd, ciec, ne audi bon, o have mal vision",
|
||||
"upload_modal.analyzing_picture": "Analisant image…",
|
||||
"upload_modal.apply": "Aplicar",
|
||||
"upload_modal.applying": "Aplicant…",
|
||||
"upload_modal.choose_image": "Selecter image",
|
||||
"upload_modal.description_placeholder": "Li Europan lingues es membres del sam familie. Lor separat existentie es un mite",
|
||||
"upload_modal.detect_text": "Detecter text del image",
|
||||
"upload_modal.edit_media": "Redacter medie",
|
||||
"upload_modal.hint": "Clicca o trena li circul por selecter li focal punctu quel va esser sempre visibil in omni previse-images.",
|
||||
"upload_modal.preparing_ocr": "Preparant OCR…",
|
||||
"upload_modal.preview_label": "Previse ({ratio})",
|
||||
"upload_progress.label": "Cargant...",
|
||||
"upload_progress.processing": "Tractant…",
|
||||
"username.taken": "Ti usator-nómine es ja prendet. Trova altri",
|
||||
"video.close": "Cluder video",
|
||||
"video.download": "Descargar file",
|
||||
"video.exit_fullscreen": "Exear plen-ecran",
|
||||
"video.expand": "Expander video",
|
||||
"video.fullscreen": "Plen-ecran",
|
||||
"video.hide": "Celar video",
|
||||
"video.mute": "Silentiar li son",
|
||||
"video.pause": "Pausar",
|
||||
"video.play": "Reproducter",
|
||||
"video.unmute": "Dessilentiar li son"
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
"account.blocked": "Blokusita",
|
||||
"account.browse_more_on_origin_server": "Videz pluse che la originala profilo",
|
||||
"account.cancel_follow_request": "Desendez sequodemando",
|
||||
"account.copy": "Kopiez ligilo al profilo",
|
||||
"account.direct": "Private mencionez @{name}",
|
||||
"account.disable_notifications": "Cesez avizar me kande @{name} postas",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
|
@ -38,7 +39,8 @@
|
|||
"account.follows.empty": "Ca uzanto ne sequa irgu til nun.",
|
||||
"account.follows_you": "Sequas tu",
|
||||
"account.go_to_profile": "Irez al profilo",
|
||||
"account.hide_reblogs": "Celez busti de @{name}",
|
||||
"account.hide_reblogs": "Celez repeti de @{name}",
|
||||
"account.in_memoriam": "Memorige.",
|
||||
"account.joined_short": "Juntita",
|
||||
"account.languages": "Chanjez abonita lingui",
|
||||
"account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}",
|
||||
|
@ -58,7 +60,7 @@
|
|||
"account.requested": "Vartante aprobo",
|
||||
"account.requested_follow": "{name} demandis sequar tu",
|
||||
"account.share": "Partigez profilo di @{name}",
|
||||
"account.show_reblogs": "Montrez busti de @{name}",
|
||||
"account.show_reblogs": "Montrez repeti de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Posto} other {{counter} Posti}}",
|
||||
"account.unblock": "Desblokusar @{name}",
|
||||
"account.unblock_domain": "Desblokusar {domain}",
|
||||
|
@ -86,7 +88,7 @@
|
|||
"attachments_list.unprocessed": "(neprocedita)",
|
||||
"audio.hide": "Celez audio",
|
||||
"autosuggest_hashtag.per_week": "{count} dum singla semano",
|
||||
"boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo",
|
||||
"boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye",
|
||||
"bundle_column_error.copy_stacktrace": "Kopierorraporto",
|
||||
"bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.",
|
||||
"bundle_column_error.error.title": "Ach!",
|
||||
|
@ -180,7 +182,7 @@
|
|||
"confirmations.mute.explanation": "Co celigos posti de oli e posti quo mencionas oli, ma ol ankore permisas oli vidar vua posti e sequar vu.",
|
||||
"confirmations.mute.message": "Ka vu certe volas silencigar {name}?",
|
||||
"confirmations.redraft.confirm": "Efacez e riskisez",
|
||||
"confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e busti esos perdita, e respondi al posto originala esos orfanigita.",
|
||||
"confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.",
|
||||
"confirmations.reply.confirm": "Respondez",
|
||||
"confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?",
|
||||
"confirmations.unfollow.confirm": "Desequez",
|
||||
|
@ -189,6 +191,7 @@
|
|||
"conversation.mark_as_read": "Markizez quale lektita",
|
||||
"conversation.open": "Videz konverso",
|
||||
"conversation.with": "Kun {names}",
|
||||
"copy_icon_button.copied": "Kopiita",
|
||||
"copypaste.copied": "Kopiesis",
|
||||
"copypaste.copy_to_clipboard": "Kopiez",
|
||||
"directory.federated": "De savita fediverso",
|
||||
|
@ -200,7 +203,7 @@
|
|||
"dismissable_banner.community_timeline": "Co esas maxim recenta publika posti de personi quo havas konto quo hostigesas da {domain}.",
|
||||
"dismissable_banner.dismiss": "Ignorez",
|
||||
"dismissable_banner.explore_links": "Ca nova rakonti parolesas da personi che ca e altra servili di necentraligita situo nun.",
|
||||
"dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu busti e favoriziti esas rangizita plu alte.",
|
||||
"dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.",
|
||||
"dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.",
|
||||
"dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
|
@ -220,6 +223,7 @@
|
|||
"emoji_button.search_results": "Trovuri",
|
||||
"emoji_button.symbols": "Simboli",
|
||||
"emoji_button.travel": "Vizito & Plasi",
|
||||
"empty_column.account_hides_collections": "Ca uzanto selektis ne publikigar ca informo",
|
||||
"empty_column.account_suspended": "Konto restriktesis",
|
||||
"empty_column.account_timeline": "No toots here!",
|
||||
"empty_column.account_unavailable": "Profilo esas nedisponebla",
|
||||
|
@ -294,14 +298,18 @@
|
|||
"hashtag.column_settings.tag_mode.any": "Irga co",
|
||||
"hashtag.column_settings.tag_mode.none": "Nula co",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} partoprenanto} other {{counter} partoprenanti}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} posto} other {{counter} posti}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} posto} other {{counter} posti}} hodie",
|
||||
"hashtag.follow": "Sequez hashtago",
|
||||
"hashtag.unfollow": "Desequez hashtago",
|
||||
"hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}",
|
||||
"home.actions.go_to_explore": "Videz quo es populara nun",
|
||||
"home.actions.go_to_suggestions": "Trovez personi por sequar",
|
||||
"home.column_settings.basic": "Simpla",
|
||||
"home.column_settings.show_reblogs": "Montrar repeti",
|
||||
"home.column_settings.show_replies": "Montrar respondi",
|
||||
"home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili bustis. Se to semblas tro tacanta, vu darfas volar:",
|
||||
"home.explore_prompt.body": "Vua hemala fluo havos mixuro de la hashtagi quin vu selektis sequar, la personi quin vu selektis sequar, e la posti quin ili repetis. Se to semblas tro tacanta, vu darfas volar:",
|
||||
"home.explore_prompt.title": "Co es vua hemo en Mastodon.",
|
||||
"home.hide_announcements": "Celez anunci",
|
||||
"home.pending_critical_update.body": "Voluntez aktualigar vua Mastodon-servilo tam balde kam es posibla!",
|
||||
|
@ -310,7 +318,7 @@
|
|||
"home.show_announcements": "Montrez anunci",
|
||||
"interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.",
|
||||
"interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.",
|
||||
"interaction_modal.description.reblog": "Per konto che Mastodon, vu povas bustizar ca posti por partigar kun sua sequanti.",
|
||||
"interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.",
|
||||
"interaction_modal.description.reply": "Per konto che Mastodon, vu povas respondar ca posto.",
|
||||
"interaction_modal.login.action": "Irar a hemo",
|
||||
"interaction_modal.login.prompt": "Domeno di vua hemala servilo, ex. mastodon.social",
|
||||
|
@ -321,14 +329,14 @@
|
|||
"interaction_modal.sign_in_hint": "Averto: To es la retsituo ube vu kreis konto. Se vu ne rimemoras, serchez vua bonvenanta e-posto. Vu anke povas enpozar vua kompleta uzantnomo! (ex. @Mastodon@mastodon.social)",
|
||||
"interaction_modal.title.favourite": "Favorizez ca posto da {name}",
|
||||
"interaction_modal.title.follow": "Sequez {name}",
|
||||
"interaction_modal.title.reblog": "Bustizez posto di {name}",
|
||||
"interaction_modal.title.reblog": "Repetez posto di {name}",
|
||||
"interaction_modal.title.reply": "Respondez posto di {name}",
|
||||
"intervals.full.days": "{number, plural, one {# dio} other {# dii}}",
|
||||
"intervals.full.hours": "{number, plural, one {# horo} other {# hori}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.blocked": "to open blocked users list",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.boost": "Repetez posto",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Deskripto",
|
||||
|
@ -383,6 +391,7 @@
|
|||
"lists.search": "Trovez inter personi quon vu sequas",
|
||||
"lists.subheading": "Vua listi",
|
||||
"load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}",
|
||||
"loading_indicator.label": "Kargante…",
|
||||
"media_gallery.toggle_visible": "Chanjar videbleso",
|
||||
"moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.",
|
||||
"mute_modal.duration": "Durado",
|
||||
|
@ -448,7 +457,7 @@
|
|||
"notifications.column_settings.unread_notifications.highlight": "Briligez nelektita avizi",
|
||||
"notifications.column_settings.update": "Modifikati:",
|
||||
"notifications.filter.all": "Omna",
|
||||
"notifications.filter.boosts": "Busti",
|
||||
"notifications.filter.boosts": "Repeti",
|
||||
"notifications.filter.favourites": "Favoriziti",
|
||||
"notifications.filter.follows": "Sequati",
|
||||
"notifications.filter.mentions": "Mencioni",
|
||||
|
@ -471,6 +480,17 @@
|
|||
"onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.",
|
||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||
"onboarding.follows.title": "Popular on Mastodon",
|
||||
"onboarding.profile.discoverable": "Trovebligez mea profilo",
|
||||
"onboarding.profile.discoverable_hint": "Se vu selektas deskovrebleso che Mastodon, vua posti povas aparar en sercho-rezultaji e populari, e vua profilo forsan sugestesos a personi kun interesi simila a vua.",
|
||||
"onboarding.profile.display_name": "Publika nomo",
|
||||
"onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomo…",
|
||||
"onboarding.profile.lead": "Vu sempre povas kompletigar co plu tarde en la opcioni, ube mem plua personalizanta opcioni es disponebla.",
|
||||
"onboarding.profile.note": "Biografio",
|
||||
"onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagi…",
|
||||
"onboarding.profile.save_and_continue": "Preservez e avancez",
|
||||
"onboarding.profile.title": "Kompletigez la profilo",
|
||||
"onboarding.profile.upload_avatar": "Kargez profiloportreto",
|
||||
"onboarding.profile.upload_header": "Kargez profilokapimajo",
|
||||
"onboarding.share.lead": "Savigez personi quale ili povas trovar vu che Mastodon!",
|
||||
"onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}",
|
||||
"onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:",
|
||||
|
@ -482,7 +502,7 @@
|
|||
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
|
||||
"onboarding.steps.publish_status.body": "Say hello to the world.",
|
||||
"onboarding.steps.publish_status.title": "Facar vua unesma posto",
|
||||
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
|
||||
"onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.",
|
||||
"onboarding.steps.setup_profile.title": "Customize your profile",
|
||||
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
|
||||
"onboarding.steps.share_profile.title": "Share your profile",
|
||||
|
@ -510,6 +530,7 @@
|
|||
"privacy.unlisted.short": "Ne enlistigota",
|
||||
"privacy_policy.last_updated": "Antea novajo ye {date}",
|
||||
"privacy_policy.title": "Privatesguidilo",
|
||||
"recommended": "Rekomendata",
|
||||
"refresh": "Rifreshez",
|
||||
"regeneration_indicator.label": "Chargas…",
|
||||
"regeneration_indicator.sublabel": "Vua hemniuzeto preparesas!",
|
||||
|
@ -580,6 +601,8 @@
|
|||
"search.quick_action.status_search": "Posti qui asortas {x}",
|
||||
"search.search_or_paste": "Serchar o pozar URL",
|
||||
"search_popout.full_text_search_disabled_message": "Nedisponebla che {domain}.",
|
||||
"search_popout.full_text_search_logged_out_message": "Nur disponebla enirite.",
|
||||
"search_popout.language_code": "ISO linguokodexo",
|
||||
"search_popout.options": "Opcioni serchala",
|
||||
"search_popout.quick_actions": "Agi rapida",
|
||||
"search_popout.recent": "Lasta serchi",
|
||||
|
@ -607,8 +630,8 @@
|
|||
"status.admin_status": "Open this status in the moderation interface",
|
||||
"status.block": "Restriktez @{name}",
|
||||
"status.bookmark": "Libromarko",
|
||||
"status.cancel_reblog_private": "Debustez",
|
||||
"status.cannot_reblog": "Ca posto ne povas bustesas",
|
||||
"status.cancel_reblog_private": "Desrepetez",
|
||||
"status.cannot_reblog": "Ca posto ne povas repetesar",
|
||||
"status.copy": "Copy link to status",
|
||||
"status.delete": "Efacar",
|
||||
"status.detailed_status": "Detala konversvido",
|
||||
|
@ -636,10 +659,10 @@
|
|||
"status.pin": "Pinglagez che profilo",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.read_more": "Lektez pluse",
|
||||
"status.reblog": "Repetar",
|
||||
"status.reblog_private": "Bustez kun originala videbleso",
|
||||
"status.reblogged_by": "{name} repetita",
|
||||
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
|
||||
"status.reblog": "Repetez",
|
||||
"status.reblog_private": "Repetez kun originala videbleso",
|
||||
"status.reblogged_by": "{name} repetis",
|
||||
"status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.",
|
||||
"status.redraft": "Efacez e riskisigez",
|
||||
"status.remove_bookmark": "Efacez libromarko",
|
||||
"status.replied_to": "Respondis a {name}",
|
||||
|
|
698
app/javascript/mastodon/locales/lad.json
Normal file
698
app/javascript/mastodon/locales/lad.json
Normal file
|
@ -0,0 +1,698 @@
|
|||
{
|
||||
"about.blocks": "Sirvidores moderados",
|
||||
"about.contact": "Kontakto:",
|
||||
"about.disclaimer": "Mastodon es un programario libero, kon kodiche avierto i una marka komersiala de Mastodon gGmbH.",
|
||||
"about.domain_blocks.no_reason_available": "Razon no desponivle",
|
||||
"about.domain_blocks.preamble": "Mastodon djeneralmente te permete ver kontenido de i enteraktuar kon utilizadores de kualseker otro sirvidor en el fediverso. Estas son las eksepsiones en este sirvidor en partikolar.",
|
||||
"about.domain_blocks.silenced.explanation": "\"Djeneralmente no veras profiles i kontenido de este sirvidor, salvo ke eksplisitamente lo bushkes o sigas algun kuento de el.",
|
||||
"about.domain_blocks.silenced.title": "Limitado",
|
||||
"about.domain_blocks.suspended.explanation": "Dingunos datos de este sirvidor sera prosesado, magazinado o enterkambiado kon este sirvidor. Enteraksyon o komunikasyon kon sus utilizadores sera imposivle.",
|
||||
"about.domain_blocks.suspended.title": "Suspendido",
|
||||
"about.not_available": "Esta enformasyon no esta desponivle en este sirvidor.",
|
||||
"about.powered_by": "Redes sosyalas desentralizadas kon uzo de {mastodon}",
|
||||
"about.rules": "Reglas del sirvidor",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Adjusta a o kita de listas",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grupo",
|
||||
"account.block": "Bloka @{name}",
|
||||
"account.block_domain": "Bloka el domeno {domain}",
|
||||
"account.block_short": "Bloka",
|
||||
"account.blocked": "Blokado",
|
||||
"account.browse_more_on_origin_server": "Ve mas en el profil orijinal",
|
||||
"account.cancel_follow_request": "Anula solisitud de segir",
|
||||
"account.copy": "Kopia atadijo de profil",
|
||||
"account.direct": "Enmenta a @{name} en privado",
|
||||
"account.disable_notifications": "No me avizes mas sovre publikasyones de @{name}",
|
||||
"account.domain_blocked": "Domeno blokado",
|
||||
"account.edit_profile": "Edita profil",
|
||||
"account.enable_notifications": "Avizame kuando @{name} publike",
|
||||
"account.endorse": "Avalia en profil",
|
||||
"account.featured_tags.last_status_at": "Ultima publikasyon de {date}",
|
||||
"account.featured_tags.last_status_never": "\"No ay publikasyones",
|
||||
"account.featured_tags.title": "Etiketas avaliadas de {name}",
|
||||
"account.follow": "Sige",
|
||||
"account.followers": "Suivantes",
|
||||
"account.followers.empty": "Por agora dingun no sige a este utilizador.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}",
|
||||
"account.following": "Sigiendo",
|
||||
"account.following_counter": "{count, plural, other {Sigiendo a {counter}}}",
|
||||
"account.follows.empty": "Este utilizador ainda no sige a ningun.",
|
||||
"account.follows_you": "Te sige",
|
||||
"account.go_to_profile": "Va al profil",
|
||||
"account.hide_reblogs": "Eskonde repartajasyones de @{name}",
|
||||
"account.in_memoriam": "De bendicha memoria.",
|
||||
"account.joined_short": "Adjunto",
|
||||
"account.languages": "Troka linguas suskrividas",
|
||||
"account.link_verified_on": "La propriedad de este atadijo fue verifikada el {date}",
|
||||
"account.locked_info": "El estado de privasita de este konto esta konfigurado komo serado. El proprietario reviza manualmente kien le puede segir.",
|
||||
"account.media": "Multimedia",
|
||||
"account.mention": "Enmenta a @{name}",
|
||||
"account.moved_to": "{name} tiene endikado ke su muevo kuento agora es:",
|
||||
"account.mute": "Silensia a @{name}",
|
||||
"account.mute_notifications_short": "Silensia avizos de @{name}",
|
||||
"account.mute_short": "Silensia",
|
||||
"account.muted": "Silensiado",
|
||||
"account.no_bio": "No ay deskripsion.",
|
||||
"account.open_original_page": "Avre pajina orijnala",
|
||||
"account.posts": "Publikasyones",
|
||||
"account.posts_with_replies": "Kon repuestas",
|
||||
"account.report": "Raporta @{name}",
|
||||
"account.requested": "Asperando achetasion. Klika para anular la solisitud de segimiento",
|
||||
"account.requested_follow": "{name} tiene solisitado segirte",
|
||||
"account.share": "Partaja el profil de @{name}",
|
||||
"account.show_reblogs": "Amostra repartajasyones de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}",
|
||||
"account.unblock": "Dezbloka @{name}",
|
||||
"account.unblock_domain": "Dezbloka domeno {domain}",
|
||||
"account.unblock_short": "Dezbloka",
|
||||
"account.unendorse": "No avalia en profil",
|
||||
"account.unfollow": "Desige",
|
||||
"account.unmute": "Desilensia a @{name}",
|
||||
"account.unmute_notifications_short": "Desilensia avizos",
|
||||
"account.unmute_short": "Desilensia",
|
||||
"account_note.placeholder": "Klika para adjustar nota",
|
||||
"admin.dashboard.daily_retention": "Proporsyon de retensyon de utilizadores por diya dempues de enrejistrasyon",
|
||||
"admin.dashboard.monthly_retention": "Proporsyon de retensyon de utilizadores por mez dempues de enrejistrasyon",
|
||||
"admin.dashboard.retention.average": "Media",
|
||||
"admin.dashboard.retention.cohort": "Mez de enrejistrasyon",
|
||||
"admin.dashboard.retention.cohort_size": "Muevos utilizadores",
|
||||
"alert.rate_limited.message": "Por favor aprova dempues de {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Trafiko limitado",
|
||||
"alert.unexpected.message": "Afito un yerro no asperado.",
|
||||
"alert.unexpected.title": "Atyo!",
|
||||
"announcement.announcement": "Pregon",
|
||||
"attachments_list.unprocessed": "(no prosesado)",
|
||||
"audio.hide": "Eskonder audio",
|
||||
"autosuggest_hashtag.per_week": "{count} por semana",
|
||||
"boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez",
|
||||
"bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro",
|
||||
"bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.",
|
||||
"bundle_column_error.error.title": "Atyo, no!",
|
||||
"bundle_column_error.network.body": "Uvo un yerro kon la prova de eskargar esta pajina. Esto puede ser por un problem temporal kon tu koneksyon a la internet o a este sirvidor.",
|
||||
"bundle_column_error.network.title": "Yerro de red",
|
||||
"bundle_column_error.retry": "Aprova de muevo",
|
||||
"bundle_column_error.return": "Volta a la linya prinsipala",
|
||||
"bundle_column_error.routing.body": "No se pudo trokar la pajina solisitada. Estas siguro ke el adreso URL en la vara de adreso es djusto?",
|
||||
"bundle_column_error.routing.title": "404",
|
||||
"bundle_modal_error.close": "Serra",
|
||||
"bundle_modal_error.message": "Algo negro afito al eskargar este komponente.",
|
||||
"bundle_modal_error.retry": "Aprova de muevo",
|
||||
"closed_registrations.other_server_instructions": "Deke Mastodon es desentralizado, puedes kriyar un kuento en otro sirvidor i ainda enteraktuar kon este.",
|
||||
"closed_registrations_modal.description": "Aktualmente no es posivle kriyar un kuento en {domain}, ama por favor akodrate de ke no ay menester de tener un kuento espesifikamente en {domain} para kulanear Mastodon.",
|
||||
"closed_registrations_modal.find_another_server": "Bushka otro sirvidor",
|
||||
"closed_registrations_modal.preamble": "Mastodon es desentralizado, estonses sin emportansya ande kriyas tu kuento, podras segir i enteraktuar kon kualseker persona en este sirvidor. Tamyen puedes balabayarlo tu mezmo!",
|
||||
"closed_registrations_modal.title": "Enrerjistrate en Mastodon",
|
||||
"column.about": "Sovre mozotros",
|
||||
"column.blocks": "Utilizadores blokados",
|
||||
"column.bookmarks": "Markadores",
|
||||
"column.community": "Linya de tiempo lokala",
|
||||
"column.direct": "Enmentaduras privadas",
|
||||
"column.directory": "Eksplora profiles",
|
||||
"column.domain_blocks": "Domenos blokados",
|
||||
"column.favourites": "Te plazen",
|
||||
"column.firehose": "Linyas en bivo",
|
||||
"column.follow_requests": "Solisitudes de segimiento",
|
||||
"column.home": "Linya prinsipala",
|
||||
"column.lists": "Listas",
|
||||
"column.mutes": "Utilizadores silensiados",
|
||||
"column.notifications": "Avizos",
|
||||
"column.pins": "Publikasyones fiksadas",
|
||||
"column.public": "Linya de tiempo federada",
|
||||
"column_back_button.label": "Atras",
|
||||
"column_header.hide_settings": "Eskonde opsyones",
|
||||
"column_header.moveLeft_settings": "Move kolumna a la siedra",
|
||||
"column_header.moveRight_settings": "Move kolumna a la derecha",
|
||||
"column_header.pin": "Fiksa",
|
||||
"column_header.show_settings": "Amostra opsyones",
|
||||
"column_header.unpin": "Defiksar",
|
||||
"column_subheading.settings": "Opsyones",
|
||||
"community.column_settings.local_only": "Solo lokalas",
|
||||
"community.column_settings.media_only": "Solo multimedia",
|
||||
"community.column_settings.remote_only": "Solo remotas",
|
||||
"compose.language.change": "Troka lingua",
|
||||
"compose.language.search": "Bushka linguas...",
|
||||
"compose.published.body": "Publikasyon publikada.",
|
||||
"compose.published.open": "Avre",
|
||||
"compose.saved.body": "Publikasyon guadrada.",
|
||||
"compose_form.direct_message_warning_learn_more": "Ambezate mas",
|
||||
"compose_form.encryption_warning": "Publikasyones en Mastodon no son shifradas de lado a lado. No partajes dinguna enformasyon sensivle por Mastodon.",
|
||||
"compose_form.hashtag_warning": "Esta publikasyon no sera amostrada debasho de dinguna etiketa si no es publika. Solo publikasyones publikas se pueden bushkar por la etiketa.",
|
||||
"compose_form.lock_disclaimer": "Tu kuento no esta {locked}. Todos pueden segirte para ver tus publikasyones solo para suivantes.",
|
||||
"compose_form.lock_disclaimer.lock": "serrado",
|
||||
"compose_form.placeholder": "Ke haber?",
|
||||
"compose_form.poll.add_option": "Adjusta opsyon",
|
||||
"compose_form.poll.duration": "Durasion de anketa",
|
||||
"compose_form.poll.option_placeholder": "Opsyon {number}",
|
||||
"compose_form.poll.remove_option": "Kita esta opsyon",
|
||||
"compose_form.poll.switch_to_multiple": "Trokar anketa para permeter a eskojer mas ke una opsyon",
|
||||
"compose_form.poll.switch_to_single": "Trokar anketa para permeter a eskojer solo una opsyon",
|
||||
"compose_form.publish": "Publika",
|
||||
"compose_form.publish_form": "Mueva publikasyon",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.save_changes": "Guadra trokamientos",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Marka material komo sensivle} other {Marka material komo sensivle}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Material markado komo sensivle} other {Material markado komo sensivle}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Material no markado komo sensivle} other {Material no markado komo sensivle}}",
|
||||
"compose_form.spoiler.marked": "Kita avertensya de kontenido",
|
||||
"compose_form.spoiler.unmarked": "Adjusta avertensya de kontenido",
|
||||
"compose_form.spoiler_placeholder": "Eskrive tu avertensya aki",
|
||||
"confirmation_modal.cancel": "Anula",
|
||||
"confirmations.block.block_and_report": "Bloka i raporta",
|
||||
"confirmations.block.confirm": "Bloka",
|
||||
"confirmations.block.message": "Estas siguro ke keres blokar a {name}?",
|
||||
"confirmations.cancel_follow_request.confirm": "Anula solisitud",
|
||||
"confirmations.cancel_follow_request.message": "Estas siguro ke keres anular tu solisitud de segir a {name}?",
|
||||
"confirmations.delete.confirm": "Efasa",
|
||||
"confirmations.delete.message": "Estas siguro ke keres efasar esta publikasyon?",
|
||||
"confirmations.delete_list.confirm": "Efasa",
|
||||
"confirmations.delete_list.message": "Estas siguro ke keres permanentemente efasar esta lista?",
|
||||
"confirmations.discard_edit_media.confirm": "Anula",
|
||||
"confirmations.discard_edit_media.message": "Tienes trokamientos no guadrados en la deskripsion o vista previa. Keres efasarlos entanto?",
|
||||
"confirmations.domain_block.confirm": "Bloka domeno entero",
|
||||
"confirmations.domain_block.message": "Estas totalmente siguro ke keres blokar todo el domeno {domain}? En djeneral unos kuantos blokos o silensiamientos son sufisientes i preferavles. No veras kontenido de akel domeno en dinguna linya de tiempo publika ni ent tus avizos. Tus suivantes de akel domeno seran kitados.",
|
||||
"confirmations.edit.confirm": "Edita",
|
||||
"confirmations.edit.message": "Editar agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?",
|
||||
"confirmations.logout.confirm": "Sal",
|
||||
"confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?",
|
||||
"confirmations.mute.confirm": "Silensia",
|
||||
"confirmations.mute.explanation": "Esto eskondera las publikasyones de este kuento i publikasyones ke lo enmentan, pero ainda les permetera segirte.",
|
||||
"confirmations.mute.message": "Estas siguro ke keres silensiar a {name}?",
|
||||
"confirmations.redraft.confirm": "Efasar i reeskrivir",
|
||||
"confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.",
|
||||
"confirmations.reply.confirm": "Arisponde",
|
||||
"confirmations.reply.message": "Arispondir agora kitara el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?",
|
||||
"confirmations.unfollow.confirm": "Desige",
|
||||
"confirmations.unfollow.message": "Estas siguro ke keres deshar de segir a {name}?",
|
||||
"conversation.delete": "Efasa konversasyon",
|
||||
"conversation.mark_as_read": "Marka komo meldado",
|
||||
"conversation.open": "Ve konversasyon",
|
||||
"conversation.with": "Kon {names}",
|
||||
"copy_icon_button.copied": "Kopiado al portapapeles",
|
||||
"copypaste.copied": "Kopiado",
|
||||
"copypaste.copy_to_clipboard": "Kopia al portapapeles",
|
||||
"directory.federated": "Dizde el fediverso konesido",
|
||||
"directory.local": "Solo de {domain}",
|
||||
"directory.new_arrivals": "Arivados resientemente",
|
||||
"directory.recently_active": "Aktivos resientemente",
|
||||
"disabled_account_banner.account_settings": "Preferensyas de kuento",
|
||||
"disabled_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado.",
|
||||
"dismissable_banner.community_timeline": "Estas son las publikasyones publikas mas resientes de las personas kualos kuentos estan balabayados en {domain}.",
|
||||
"dismissable_banner.dismiss": "Kita",
|
||||
"dismissable_banner.explore_links": "Estos haberes estan diskutidos agora por djente en este sirvidor i otros de la red desentralizada.",
|
||||
"dismissable_banner.explore_statuses": "Estas publikasyones de este sirvidor i otros de la red desentralizada estan agora popularas. Publikasyones mas muevas, kon mas repartajasiones i favoritadas por mas djente aparesen primero.",
|
||||
"dismissable_banner.explore_tags": "Estas etiketas estan agora popularas en la red sosyala. Etiketas uzadas por mas djente aparesen primero.",
|
||||
"dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.",
|
||||
"embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.",
|
||||
"embed.preview": "Ansi paresera:",
|
||||
"emoji_button.activity": "Aktivita",
|
||||
"emoji_button.clear": "Alimpia",
|
||||
"emoji_button.custom": "Personalizado",
|
||||
"emoji_button.flags": "Bandieras",
|
||||
"emoji_button.food": "Kumidas i beverajes",
|
||||
"emoji_button.label": "Adjustar emoji",
|
||||
"emoji_button.nature": "Natura",
|
||||
"emoji_button.not_found": "Emojis no topados",
|
||||
"emoji_button.objects": "Objektos",
|
||||
"emoji_button.people": "Djente",
|
||||
"emoji_button.recent": "Uzados frekuentemente",
|
||||
"emoji_button.search": "Bushka...",
|
||||
"emoji_button.search_results": "Rizultados de bushkeda",
|
||||
"emoji_button.symbols": "Simbolos",
|
||||
"emoji_button.travel": "Viajes i lugares",
|
||||
"empty_column.account_suspended": "Kuento suspendido",
|
||||
"empty_column.account_timeline": "No ay publikasyones aki!",
|
||||
"empty_column.account_unavailable": "Profil no desponivle",
|
||||
"empty_column.blocks": "Ainda no tienes blokado a dingun utilizador.",
|
||||
"empty_column.bookmarked_statuses": "Ainda no tienes dinguna publikasyon kon markador. Kuando adjustes un markador a una, se amostrara aki.",
|
||||
"empty_column.community": "La linya de tiempo lokala esta vaziya. Eskrive algo publikamente para ampesar la fiesta!",
|
||||
"empty_column.direct": "Ainda no tienes enmentaduras privadas. Kuando embies o risives una, se amostra aki.",
|
||||
"empty_column.domain_blocks": "Ainda no ay domenos blokados.",
|
||||
"empty_column.explore_statuses": "No ay dingunos trendes agora. Mira mas tadre!",
|
||||
"empty_column.favourited_statuses": "Ainda no tienes publikasyones favoritas. Kuando indikes ke una te plaze, se amostrara aki.",
|
||||
"empty_column.favourites": "Nadie tiene indikado ke le plaze una de tus publikasyones. Kuando algun lo aga, se amostrara aki.",
|
||||
"empty_column.follow_requests": "No tienes dinguna solisitud de suivante. Kuando risivas una, se amostrara aki.",
|
||||
"empty_column.followed_tags": "Ainda no tienes segido dinguna etiketa. Kuando lo agas, se amostraran aki.",
|
||||
"empty_column.hashtag": "Ainda no ay niente en esta etiketa.",
|
||||
"empty_column.home": "Tu linya de tiempo esta vaziya! Sige a mas personas para inchirla.",
|
||||
"empty_column.list": "Ainda no ay niente en esta lista. Kuando miembros de esta lista publiken muevas publikasyones, se amostraran aki.",
|
||||
"empty_column.lists": "Ainda no tienes dinguna lista. Kuando kriyes una, aperesera aki.",
|
||||
"empty_column.mutes": "Ainda no tienes silensiado a dingun utilizador.",
|
||||
"empty_column.notifications": "Ainda no tienes dingun avizo. Kuando otras personas enteraktuen kontigo, se amostraran aki.",
|
||||
"empty_column.public": "No ay niente aki! Eskrive algo publikamente o manualmente sige utilizadores de otros sirvidores para inchirlo",
|
||||
"error.unexpected_crash.explanation": "Por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador, no se puede amostrar esta pajina djustamente.",
|
||||
"error.unexpected_crash.explanation_addons": "No se puede amostrar esta pajina djustamente. Este yerro probavlemente fue kauzado por un komplimento del navigador o por un enstrumento de traduksion.",
|
||||
"error.unexpected_crash.next_steps": "Aprova arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulaenar Mastodon kon otro navigador u otra aplikasyon nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Aprova inkapasitarlos i arefreskar la pajina. Si esto no ayuda, es posivle ke ainda puedas kulanear Mastodon kon otro navigador u otra aplikasyon nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopiar stacktrace al portapapeles",
|
||||
"errors.unexpected_crash.report_issue": "Raportar problema",
|
||||
"explore.search_results": "Rizultados de bushkeda",
|
||||
"explore.suggested_follows": "Djente",
|
||||
"explore.title": "Eksplorar",
|
||||
"explore.trending_links": "Haberes",
|
||||
"explore.trending_statuses": "Publikasyones",
|
||||
"explore.trending_tags": "Etiketas",
|
||||
"filter_modal.added.context_mismatch_explanation": "Esta kategoria del filtro no se aplika al konteksto en ke tienes aksesido esta publikasyon. Si keres ke la publikasyon sea filtrada en este konteksto tamyen, kale editar el filtro.",
|
||||
"filter_modal.added.context_mismatch_title": "El konteksto no koensida!",
|
||||
"filter_modal.added.expired_explanation": "Esta kategoria de filtros tiene kadukado. Kale ke trokar la data de kadukasion para aplikarla.",
|
||||
"filter_modal.added.expired_title": "Filtro kadukado!",
|
||||
"filter_modal.added.review_and_configure": "Para revizar i konfigurar esta kategoria de filtros, va a {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Konfigurasyon de filtro",
|
||||
"filter_modal.added.settings_link": "pajina de konfigurasyon",
|
||||
"filter_modal.added.short_explanation": "Esta publikasyon fue adjustada a la sigiente kategoria de filtros: {title}.",
|
||||
"filter_modal.added.title": "Filtro adjustado!",
|
||||
"filter_modal.select_filter.context_mismatch": "no se aplika a este konteksto",
|
||||
"filter_modal.select_filter.expired": "kadukado",
|
||||
"filter_modal.select_filter.prompt_new": "Mueva kategoria: {name}",
|
||||
"filter_modal.select_filter.search": "Bushkar o kriyar",
|
||||
"filter_modal.select_filter.subtitle": "Kulanear una kategoria egzistente o kriya mueva",
|
||||
"filter_modal.select_filter.title": "Filtrar esta publikasyon",
|
||||
"filter_modal.title.status": "Filtrar una publikasyon",
|
||||
"firehose.all": "Todo",
|
||||
"firehose.local": "Este sirvidor",
|
||||
"firehose.remote": "Otros sirvidores",
|
||||
"follow_request.authorize": "Autoriza",
|
||||
"follow_request.reject": "Refuza",
|
||||
"follow_requests.unlocked_explanation": "Aunke tu kuento no esta serrado, la taifa de {domain} kreye ke talvez keres revizar manualmente las solisitudes de segimento de estos kuentos.",
|
||||
"followed_tags": "Etiketas segidas",
|
||||
"footer.about": "Sovre mozotros",
|
||||
"footer.directory": "Katalogo de profiles",
|
||||
"footer.get_app": "Abasha aplikasyon",
|
||||
"footer.invite": "Envitar a djente",
|
||||
"footer.keyboard_shortcuts": "Akortamientos de klavye",
|
||||
"footer.privacy_policy": "Politika de privasita",
|
||||
"footer.source_code": "Ve kodiche fuente",
|
||||
"footer.status": "Estado",
|
||||
"generic.saved": "Guadrado",
|
||||
"getting_started.heading": "Primos pasos",
|
||||
"hashtag.column_header.tag_mode.all": "i {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "sin {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "Rekomendasyones no topadas",
|
||||
"hashtag.column_settings.select.placeholder": "Meter etiketas…",
|
||||
"hashtag.column_settings.tag_mode.all": "Todos estos",
|
||||
"hashtag.column_settings.tag_mode.any": "Kualsekera de estos",
|
||||
"hashtag.column_settings.tag_mode.none": "Dinguno de estos",
|
||||
"hashtag.column_settings.tag_toggle": "Inkluir etiketas adisionalas en esta kolumna",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy",
|
||||
"hashtag.follow": "Segir etiketa",
|
||||
"hashtag.unfollow": "Desegir etiketa",
|
||||
"hashtags.and_other": "…i {count, plural, one {}other {# mas}}",
|
||||
"home.actions.go_to_explore": "Ve los trendes",
|
||||
"home.actions.go_to_suggestions": "Topa a djente para segir",
|
||||
"home.column_settings.basic": "Opsyones bazikas",
|
||||
"home.column_settings.show_reblogs": "Amostrar repartajasyones",
|
||||
"home.column_settings.show_replies": "Amostrar repuestas",
|
||||
"home.hide_announcements": "Eskonde pregones",
|
||||
"home.pending_critical_update.body": "Por favor aktualiza tu sirvidor de Mastodon pishin!",
|
||||
"home.pending_critical_update.link": "Ve aktualizasyones",
|
||||
"home.show_announcements": "Amostra pregones",
|
||||
"interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.",
|
||||
"interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.",
|
||||
"interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.",
|
||||
"interaction_modal.description.reply": "Kon un kuento en Mastodon, puedes arispondir a esta publikasyon.",
|
||||
"interaction_modal.login.prompt": "Domeno del sirvidor de tu kuento, por enshemplo mastodon.social",
|
||||
"interaction_modal.no_account_yet": "No tyenes kuento de Mastodon?",
|
||||
"interaction_modal.on_another_server": "En otro sirvidor",
|
||||
"interaction_modal.on_this_server": "En este sirvidor",
|
||||
"interaction_modal.title.favourite": "Endika ke te plaze publikasyon de {name}",
|
||||
"interaction_modal.title.follow": "Sige a {name}",
|
||||
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
|
||||
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
|
||||
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
|
||||
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||
"keyboard_shortcuts.back": "Volta atras",
|
||||
"keyboard_shortcuts.blocked": "Avre lista de utilizadores blokados",
|
||||
"keyboard_shortcuts.boost": "Repartaja publikasyon",
|
||||
"keyboard_shortcuts.column": "Enfoka en una kolumna",
|
||||
"keyboard_shortcuts.compose": "Enfoka en el area de eskrivir publikasyon",
|
||||
"keyboard_shortcuts.description": "Deskripsyon",
|
||||
"keyboard_shortcuts.direct": "Avre la kolumna de enmentaduras privadas",
|
||||
"keyboard_shortcuts.down": "Move verso abasho en la lista",
|
||||
"keyboard_shortcuts.enter": "Avre publikasyon",
|
||||
"keyboard_shortcuts.favourite": "Endika ke te plaze una publikasyon",
|
||||
"keyboard_shortcuts.favourites": "Avre lista de favoritos",
|
||||
"keyboard_shortcuts.federated": "Avre linya federada",
|
||||
"keyboard_shortcuts.heading": "Akortamientos de klavye",
|
||||
"keyboard_shortcuts.home": "Avre linya prinsipala",
|
||||
"keyboard_shortcuts.hotkey": "Klave rapido",
|
||||
"keyboard_shortcuts.legend": "Amostra esta lejenda",
|
||||
"keyboard_shortcuts.local": "Avre linya lokala",
|
||||
"keyboard_shortcuts.mention": "Enmenta al autor",
|
||||
"keyboard_shortcuts.muted": "Avre lista de utilizadores silensiados",
|
||||
"keyboard_shortcuts.my_profile": "Avre tu profil",
|
||||
"keyboard_shortcuts.notifications": "Avre kolumna de avizos",
|
||||
"keyboard_shortcuts.open_media": "Avre multimedia",
|
||||
"keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas",
|
||||
"keyboard_shortcuts.profile": "Avre profil del autor",
|
||||
"keyboard_shortcuts.reply": "Arisponde a publikasyon",
|
||||
"keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes",
|
||||
"keyboard_shortcuts.search": "Enfoka en la vara de bushkeda",
|
||||
"keyboard_shortcuts.spoilers": "Amostra/eskonde el kampo de avertensya de kontenido (CW)",
|
||||
"keyboard_shortcuts.start": "Avre la kolumna \"para ampesar\"",
|
||||
"keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia",
|
||||
"keyboard_shortcuts.toot": "Eskrive mueva publikasyon",
|
||||
"keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda",
|
||||
"keyboard_shortcuts.up": "Move verso arriva en la lista",
|
||||
"lightbox.close": "Serra",
|
||||
"lightbox.compress": "Kompresa kuadro de imaje",
|
||||
"lightbox.expand": "Espande kuadro de imaje",
|
||||
"lightbox.next": "Sigiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"limited_account_hint.action": "Amostra el profil entanto",
|
||||
"limited_account_hint.title": "Este profil fue eskondido por los moderadores de {domain}.",
|
||||
"link_preview.author": "Publikasyon de {name}",
|
||||
"lists.account.add": "Adjusta a lista",
|
||||
"lists.account.remove": "Kita de lista",
|
||||
"lists.delete": "Efasa lista",
|
||||
"lists.edit": "Edita lista",
|
||||
"lists.edit.submit": "Troka titolo",
|
||||
"lists.new.create": "Adjusta lista",
|
||||
"lists.new.title_placeholder": "Titolo de mueva lista",
|
||||
"lists.replies_policy.followed": "Kualseker utilizardo segido",
|
||||
"lists.replies_policy.list": "Miembros de la lista",
|
||||
"lists.replies_policy.none": "Dinguno",
|
||||
"lists.replies_policy.title": "Amostra repuestas a:",
|
||||
"lists.search": "Bushka entre personas a las kualas siges",
|
||||
"lists.subheading": "Tus listas",
|
||||
"load_pending": "{count, plural, one {# muevo elemento} other {# muevos elementos}}",
|
||||
"loading_indicator.label": "Eskargando…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Eskonde imaje} other {Eskonde imajes}}",
|
||||
"moved_to_account_banner.text": "Tu kuento {disabledAccount} esta aktualmente inkapasitado porke transferates a {movedToAccount}.",
|
||||
"mute_modal.duration": "Durasyon",
|
||||
"mute_modal.hide_notifications": "Eskonder avizos de este utilizador?",
|
||||
"mute_modal.indefinite": "Indefinida",
|
||||
"navigation_bar.about": "Sovre mozotros",
|
||||
"navigation_bar.advanced_interface": "Avre en la enterfaz avanzada",
|
||||
"navigation_bar.blocks": "Utilizadores blokados",
|
||||
"navigation_bar.bookmarks": "Markadores",
|
||||
"navigation_bar.community_timeline": "Linya de tiempo lokala",
|
||||
"navigation_bar.compose": "Eskrivir mueva publikasyon",
|
||||
"navigation_bar.direct": "Enmentaduras privadas",
|
||||
"navigation_bar.discover": "Diskuvre",
|
||||
"navigation_bar.domain_blocks": "Domenos blokados",
|
||||
"navigation_bar.edit_profile": "Edita profil",
|
||||
"navigation_bar.explore": "Eksplorar",
|
||||
"navigation_bar.favourites": "Te plazen",
|
||||
"navigation_bar.filters": "Biervos silensiados",
|
||||
"navigation_bar.follow_requests": "Solisitudes de segimiento",
|
||||
"navigation_bar.followed_tags": "Etiketas segidas",
|
||||
"navigation_bar.follows_and_followers": "Segidos i suivantes",
|
||||
"navigation_bar.lists": "Listas",
|
||||
"navigation_bar.logout": "Salir",
|
||||
"navigation_bar.mutes": "Utilizadores silensiados",
|
||||
"navigation_bar.personal": "Personal",
|
||||
"navigation_bar.pins": "Publikasyones fiksadas",
|
||||
"navigation_bar.preferences": "Preferensyas",
|
||||
"navigation_bar.public_timeline": "Linya de tiempo federada",
|
||||
"navigation_bar.search": "Bushka",
|
||||
"navigation_bar.security": "Segurita",
|
||||
"not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.",
|
||||
"notification.admin.report": "{name} raporto {target}",
|
||||
"notification.admin.sign_up": "{name} kriyo un konto",
|
||||
"notification.favourite": "A {name} le plaze tu publikasyon",
|
||||
"notification.follow": "{name} te ampeso a segir",
|
||||
"notification.follow_request": "{name} tiene solisitado segirte",
|
||||
"notification.mention": "{name} te enmento",
|
||||
"notification.own_poll": "Tu anketa eskapo",
|
||||
"notification.poll": "Anketa en ke votates eskapo",
|
||||
"notification.reblog": "{name} repartajo tu publikasyon",
|
||||
"notification.status": "{name} publiko algo",
|
||||
"notification.update": "{name} edito una publikasyon",
|
||||
"notifications.clear": "Efasar avizos",
|
||||
"notifications.clear_confirmation": "Estas siguro ke keres permanentemente efasar todos tus avizos?",
|
||||
"notifications.column_settings.admin.report": "Muveos raportos:",
|
||||
"notifications.column_settings.admin.sign_up": "Muevas enrejistrasyones:",
|
||||
"notifications.column_settings.alert": "Avizos de ensimameza",
|
||||
"notifications.column_settings.favourite": "Te plazen:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Amostra todas las kategorias",
|
||||
"notifications.column_settings.filter_bar.category": "Vara de filtrado rapido",
|
||||
"notifications.column_settings.filter_bar.show_bar": "Amostra vara de filtros",
|
||||
"notifications.column_settings.follow": "Muevos suivantes:",
|
||||
"notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:",
|
||||
"notifications.column_settings.mention": "Enmentaduras:",
|
||||
"notifications.column_settings.poll": "Rizultados de anketas:",
|
||||
"notifications.column_settings.push": "Avizos arrepushados",
|
||||
"notifications.column_settings.reblog": "Repartajasyones:",
|
||||
"notifications.column_settings.show": "Amostra en kolumna",
|
||||
"notifications.column_settings.sound": "Reproduzir son",
|
||||
"notifications.column_settings.status": "Publikasyones muevas:",
|
||||
"notifications.column_settings.unread_notifications.category": "Avizos no meldados",
|
||||
"notifications.column_settings.unread_notifications.highlight": "Avaliar avizos no meldados",
|
||||
"notifications.column_settings.update": "Edisyones:",
|
||||
"notifications.filter.all": "Todos",
|
||||
"notifications.filter.boosts": "Repartajasyones",
|
||||
"notifications.filter.favourites": "Te plazen",
|
||||
"notifications.filter.follows": "Segidos",
|
||||
"notifications.filter.mentions": "Enmentaduras",
|
||||
"notifications.filter.polls": "Rizultados de anketa",
|
||||
"notifications.filter.statuses": "Aktualizasyones de personas a las kualas siges",
|
||||
"notifications.grant_permission": "Da permiso.",
|
||||
"notifications.group": "{count} avizos",
|
||||
"notifications.mark_as_read": "Marka todos avizos komo meldados",
|
||||
"notifications.permission_denied": "Avizos de ensimameza no estan desponivles porke ya se tiene refuzado el permiso",
|
||||
"notifications.permission_denied_alert": "\"No se pueden kapasitar los avizos de ensimameza, porke ya se tiene refuzado el permiso de navigador",
|
||||
"notifications.permission_required": "Avizos de ensimameza no estan desponivles porke los nesesarios permisos no tienen sido risividos.",
|
||||
"notifications_permission_banner.enable": "Kapasitar avizos de ensimameza",
|
||||
"notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.",
|
||||
"notifications_permission_banner.title": "Nunka te piedres niente",
|
||||
"onboarding.action.back": "Va atras",
|
||||
"onboarding.actions.back": "Va atras",
|
||||
"onboarding.compose.template": "Ke haber, #Mastodon?",
|
||||
"onboarding.follows.title": "Personaliza tu linya prinsipala",
|
||||
"onboarding.profile.display_name": "Nombre amostrado",
|
||||
"onboarding.profile.display_name_hint": "Tu nombre para amostrar.",
|
||||
"onboarding.profile.note": "Tu deskripsyon",
|
||||
"onboarding.profile.save_and_continue": "Guadra i kontinua",
|
||||
"onboarding.profile.title": "Konfigurasyon de profil",
|
||||
"onboarding.profile.upload_avatar": "Karga imaje de profil",
|
||||
"onboarding.profile.upload_header": "Karga kavesera de profil",
|
||||
"onboarding.share.title": "Partaja tu profil",
|
||||
"onboarding.start.skip": "No nesesitas ayudo para ampesar?",
|
||||
"onboarding.steps.follow_people.title": "Personaliza tu linya prinsipala",
|
||||
"onboarding.steps.publish_status.title": "Eskrive tu primera publikasyon",
|
||||
"onboarding.steps.setup_profile.title": "Personaliza tu profil",
|
||||
"onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon",
|
||||
"picture_in_picture.restore": "Restora",
|
||||
"poll.closed": "Serrado",
|
||||
"poll.refresh": "Arefreska",
|
||||
"poll.reveal": "Mira los rezultados",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# personas}}",
|
||||
"poll.total_votes": "{count, plural, one {# voto} other {# votos}}",
|
||||
"poll.vote": "Vota",
|
||||
"poll.voted": "Votates por esta repuesta",
|
||||
"poll.votes": "{votes, plural, one {# voto} other {# votos}}",
|
||||
"poll_button.add_poll": "Adjusta anketa",
|
||||
"poll_button.remove_poll": "Kita anketa",
|
||||
"privacy.change": "Troka privasita de publikasyon",
|
||||
"privacy.direct.long": "Vizivle solo para utilizadores enmentados",
|
||||
"privacy.direct.short": "Solo personas enmentadas",
|
||||
"privacy.private.long": "Vizivle solo para suivantes",
|
||||
"privacy.private.short": "Solo suivantes",
|
||||
"privacy.public.long": "Vizivle para todos",
|
||||
"privacy.public.short": "Publiko",
|
||||
"privacy.unlisted.long": "Vizivle para todos, ama eskluido de las fonksiones de diskuvrimyento",
|
||||
"privacy.unlisted.short": "No listado",
|
||||
"privacy_policy.last_updated": "Ultima aktualizasyon: {date}",
|
||||
"privacy_policy.title": "Politika de privasita",
|
||||
"recommended": "Rekomendado",
|
||||
"refresh": "Arefreska",
|
||||
"regeneration_indicator.label": "Eskargando…",
|
||||
"regeneration_indicator.sublabel": "Tu linya de tiempo prinsipala esta preparando!",
|
||||
"relative_time.days": "{number} d",
|
||||
"relative_time.full.days": "antes {number, plural, one {# diya} other {# diyas}}",
|
||||
"relative_time.full.hours": "antes {number, plural, one {# ora} other {# oras}}",
|
||||
"relative_time.full.just_now": "agora",
|
||||
"relative_time.full.minutes": "antes {number, plural, one {# minuto} other {# minutos}}",
|
||||
"relative_time.full.seconds": "antes {number, plural, one {# sigundo} other {# sigundos}}",
|
||||
"relative_time.hours": "{number} o",
|
||||
"relative_time.just_now": "agora",
|
||||
"relative_time.minutes": "{number} m",
|
||||
"relative_time.seconds": "{number} s",
|
||||
"relative_time.today": "oy",
|
||||
"reply_indicator.cancel": "Anula",
|
||||
"report.block": "Bloka",
|
||||
"report.block_explanation": "No veras sus publikasyones. No podra ver tus publikasyones ni segirte. Podra saver ke le blokates.",
|
||||
"report.categories.other": "Otros",
|
||||
"report.categories.spam": "Spam",
|
||||
"report.categories.violation": "El kontenido viola una o mas reglas del sirvidor",
|
||||
"report.category.subtitle": "Eskoje la mijor koensidensya",
|
||||
"report.category.title": "Deskrive el problem kon {type}",
|
||||
"report.category.title_account": "profil",
|
||||
"report.category.title_status": "publikasyon",
|
||||
"report.close": "Fecho",
|
||||
"report.comment.title": "Ay algo mas ke deveriamos saver?",
|
||||
"report.forward": "Reembiar a {target}",
|
||||
"report.forward_hint": "Este kuento es de otro sirvidor. Embiar una kopia anonimizada del raporto ayi tamyen?",
|
||||
"report.mute": "Silensia",
|
||||
"report.mute_explanation": "No veras sus publikasyones. Ainda pueden segirte i no va saver ke le silensiates.",
|
||||
"report.next": "Sigiente",
|
||||
"report.placeholder": "Otros komentos",
|
||||
"report.reasons.dislike": "No me plaze",
|
||||
"report.reasons.dislike_description": "\"No es algo ke kero ver",
|
||||
"report.reasons.legal": "Es ilegal",
|
||||
"report.reasons.other": "Es otra koza",
|
||||
"report.reasons.other_description": "El problem no es de las otras kategorias",
|
||||
"report.reasons.spam": "Es spam",
|
||||
"report.reasons.spam_description": "Atadijos malisiozos, enteraksyones falsas o repuestas repetitivas",
|
||||
"report.reasons.violation": "Viola las reglas del sirvidor",
|
||||
"report.reasons.violation_description": "Saves ke viola reglas espesifikas",
|
||||
"report.rules.subtitle": "Eskoje todas ke korespondan",
|
||||
"report.rules.title": "Kualas reglas estan violadas?",
|
||||
"report.statuses.subtitle": "Eskoje todas ke korespondan",
|
||||
"report.statuses.title": "Ay alguna publikasyon ke suporta este raporto?",
|
||||
"report.submit": "Embiar",
|
||||
"report.target": "Raportando a {target}",
|
||||
"report.thanks.take_action": "Aki estan tus opsyones para kontrolar lo ke ves en Mastodon:",
|
||||
"report.thanks.take_action_actionable": "Mientres revizamos esto, puedes tomar aksyones kontra @{name}:",
|
||||
"report.thanks.title": "No keres ver esto?",
|
||||
"report.thanks.title_actionable": "Mersi por raportarlo, vamos revizarlo.",
|
||||
"report.unfollow": "Desegir a @{name}",
|
||||
"report.unfollow_explanation": "Estas sigiendo este kuento. Para no ver sus publikasyones en tu linya de tiempo, puedes deshar de segirlo.",
|
||||
"report_notification.attached_statuses": "{count, plural, one {{count} publikasyon} other {{count} publikasyones}} atadas",
|
||||
"report_notification.categories.other": "Otros",
|
||||
"report_notification.categories.spam": "Spam",
|
||||
"report_notification.categories.violation": "Violasion de reglas",
|
||||
"report_notification.open": "Avre raporto",
|
||||
"search.no_recent_searches": "No ay bushkedas resientes",
|
||||
"search.placeholder": "Bushka",
|
||||
"search.quick_action.account_search": "Profiles ke koresponden kon {x}",
|
||||
"search.quick_action.go_to_account": "Va al profil {x}",
|
||||
"search.quick_action.go_to_hashtag": "Va a la etiketa {x}",
|
||||
"search.quick_action.open_url": "Avre URL en Mastodon",
|
||||
"search.quick_action.status_search": "Publikasyones ke koresponden kon {x}",
|
||||
"search.search_or_paste": "Bushka o apega URL",
|
||||
"search_popout.full_text_search_disabled_message": "No desponivle en {domain}.",
|
||||
"search_popout.full_text_search_logged_out_message": "Solo desponivle kuando estas konektado kon tu kuento.",
|
||||
"search_popout.language_code": "kodiche ISO de lingua",
|
||||
"search_popout.options": "Opsyones de bushkeda",
|
||||
"search_popout.quick_actions": "Aksiones rapidas",
|
||||
"search_popout.recent": "Bushkedas resientes",
|
||||
"search_popout.user": "utilizador",
|
||||
"search_results.accounts": "Profiles",
|
||||
"search_results.all": "Todos",
|
||||
"search_results.hashtags": "Etiketas",
|
||||
"search_results.nothing_found": "No se pudo topar niente para estos terminos de bushkeda",
|
||||
"search_results.see_all": "Ve todo",
|
||||
"search_results.statuses": "Publikasyones",
|
||||
"search_results.title": "Bushka por {q}",
|
||||
"server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)",
|
||||
"server_banner.active_users": "utilizadores aktivos",
|
||||
"server_banner.administered_by": "Administrado por:",
|
||||
"server_banner.introduction": "{domain} es parte de la red sosyala desentralizada liderada por {mastodon}.",
|
||||
"server_banner.learn_more": "Ambezate mas",
|
||||
"server_banner.server_stats": "Estatistikas del sirvidor:",
|
||||
"sign_in_banner.create_account": "Kriya kuento",
|
||||
"sign_in_banner.sign_in": "Konektate",
|
||||
"sign_in_banner.sso_redirect": "Konektate o enrejistrate",
|
||||
"status.admin_account": "Avre la enterfaz de moderasyon para @{name}",
|
||||
"status.admin_domain": "Avre la enterfaz de moderasyon para @{domain}",
|
||||
"status.admin_status": "Avre esto en la enterfaz de moderasyon",
|
||||
"status.block": "Bloka a @{name}",
|
||||
"status.bookmark": "Marka",
|
||||
"status.cancel_reblog_private": "No repartaja",
|
||||
"status.cannot_reblog": "Esta publikasyon no se puede repartajar",
|
||||
"status.copy": "Kopia atadijo de publikasyon",
|
||||
"status.delete": "Efasa",
|
||||
"status.direct": "Enmenta a @{name} en privado",
|
||||
"status.direct_indicator": "Enmentadura privada",
|
||||
"status.edit": "Edita",
|
||||
"status.edited": "Editado {date}",
|
||||
"status.embed": "Inkrusta",
|
||||
"status.favourite": "Te plaze",
|
||||
"status.filter": "Filtra esta publikasyon",
|
||||
"status.filtered": "Filtrado",
|
||||
"status.hide": "Eskonde publikasyon",
|
||||
"status.history.created": "{name} kriyo {date}",
|
||||
"status.history.edited": "{name} edito {date}",
|
||||
"status.load_more": "Eskarga mas",
|
||||
"status.media.open": "Klika para avrir",
|
||||
"status.media.show": "Klika para amostrar",
|
||||
"status.media_hidden": "Multimedia eskondidos",
|
||||
"status.mention": "Enmenta a @{name}",
|
||||
"status.more": "Mas",
|
||||
"status.mute": "Silensia a @{name}",
|
||||
"status.mute_conversation": "Silensia konversasyon",
|
||||
"status.open": "Espande publikasyon",
|
||||
"status.pin": "Fiksa en profil",
|
||||
"status.pinned": "Publikasyon fiksada",
|
||||
"status.read_more": "Melda mas",
|
||||
"status.reblog": "Repartaja",
|
||||
"status.reblog_private": "Repartaja kon vizibilita orijinala",
|
||||
"status.reblogged_by": "{name} repartajo",
|
||||
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
|
||||
"status.redraft": "Efasa i eskrive de muevo",
|
||||
"status.remove_bookmark": "Kita markador",
|
||||
"status.replied_to": "Arispondio a {name}",
|
||||
"status.reply": "Arisponde",
|
||||
"status.replyAll": "Arisponde al filo",
|
||||
"status.report": "Raporta @{name}",
|
||||
"status.sensitive_warning": "Kontenido sensivle",
|
||||
"status.share": "Partaja",
|
||||
"status.show_filter_reason": "Amostra entanto",
|
||||
"status.show_less": "Amostra manko",
|
||||
"status.show_less_all": "Amostra manko para todo",
|
||||
"status.show_more": "Amostra mas",
|
||||
"status.show_more_all": "Amostra mas para todo",
|
||||
"status.show_original": "Amostra orijinal",
|
||||
"status.translate": "Trezlada",
|
||||
"status.translated_from_with": "Trezladado dizde {lang} kon {provider}",
|
||||
"status.uncached_media_warning": "Vista previa no desponivle",
|
||||
"status.unmute_conversation": "Desilensiar konversasyon",
|
||||
"status.unpin": "Defiksar del profil",
|
||||
"subscribed_languages.lead": "Solo publikasyones en linguas eskojidas se amostraran en tus linya de tiempo prinsipala i listas dempues del trokamiento. Eskoje dinguna para risivir publikasyones en todas las linguas.",
|
||||
"subscribed_languages.save": "Guadra trokamientos",
|
||||
"subscribed_languages.target": "Troka linguas abonadas para {target}",
|
||||
"tabs_bar.home": "Linya prinsipala",
|
||||
"tabs_bar.notifications": "Avizos",
|
||||
"time_remaining.days": "{number, plural, one {# diya restante} other {# diyas restantes}}",
|
||||
"time_remaining.hours": "{number, plural, one {# ora restante} other {# oras restantes}}",
|
||||
"time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
|
||||
"time_remaining.moments": "Momentos restantes",
|
||||
"time_remaining.seconds": "{number, plural, one {# sigundo restante} other {# sigundos restantes}}",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} de otros sirvidores no se amostran.",
|
||||
"timeline_hint.resources.followers": "Suivantes",
|
||||
"timeline_hint.resources.follows": "Segidos",
|
||||
"timeline_hint.resources.statuses": "Publikasyones mas viejas",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} kuento} other {{counter} kuentos}} en los ultimos {days, plural, one {diyas} other {{days} diyas}}",
|
||||
"trends.trending_now": "Trendes",
|
||||
"ui.beforeunload": "La publikasyon ke estas eskriviendo se pedrera si sales de Mastodon.",
|
||||
"units.short.billion": "{count} MM",
|
||||
"units.short.million": "{count} M",
|
||||
"units.short.thousand": "{count} K",
|
||||
"upload_area.title": "Arastra i mete para kargar",
|
||||
"upload_button.label": "Adjusta imajes, un video or una dosya audio",
|
||||
"upload_error.limit": "Limito de dosyas kargadas eksedido.",
|
||||
"upload_error.poll": "No se permite kargar dosyas kon anketas.",
|
||||
"upload_form.audio_description": "Deskrive para personas sodras o kon problemes auditivos",
|
||||
"upload_form.description": "Deskrive para personas siegas o kon problemes vizuales",
|
||||
"upload_form.description_missing": "No adjustates deskripsion",
|
||||
"upload_form.edit": "Edita",
|
||||
"upload_form.thumbnail": "Troka minyatura",
|
||||
"upload_form.undo": "Efasa",
|
||||
"upload_form.video_description": "Deskrive para personas sodras, kon problemes auditivos, siegas o kon problemes vizuales",
|
||||
"upload_modal.analyzing_picture": "Analizando imaje…",
|
||||
"upload_modal.apply": "Aplika",
|
||||
"upload_modal.applying": "Aplikando…",
|
||||
"upload_modal.choose_image": "Eskoje imaje",
|
||||
"upload_modal.description_placeholder": "Lorem ipsum dolor sit amet",
|
||||
"upload_modal.detect_text": "Detektar teksto de la imaje",
|
||||
"upload_modal.edit_media": "Edita multimedia",
|
||||
"upload_modal.hint": "Klika o arrastra el sirkolo en la vista previa para eskojer el punto fokal ke siempre estara en vista en todas las minyaturas.",
|
||||
"upload_modal.preparing_ocr": "Preparando OCR…",
|
||||
"upload_modal.preview_label": "Vista previa ({ratio})",
|
||||
"upload_progress.label": "Kargando...",
|
||||
"upload_progress.processing": "Prosesando…",
|
||||
"video.close": "Serra video",
|
||||
"video.download": "Abasha dosya",
|
||||
"video.exit_fullscreen": "Sal de ekran kompleto",
|
||||
"video.expand": "Espande video",
|
||||
"video.fullscreen": "Ekran kompleto",
|
||||
"video.hide": "Eskonde video",
|
||||
"video.mute": "Silensia son",
|
||||
"video.pause": "Pauza",
|
||||
"video.play": "Reproduze",
|
||||
"video.unmute": "Desilensia son"
|
||||
}
|
|
@ -1,25 +1,39 @@
|
|||
{
|
||||
"about.contact": "ਸੰਪਰਕ:",
|
||||
"about.domain_blocks.silenced.title": "ਸੀਮਿਤ",
|
||||
"about.domain_blocks.suspended.title": "ਮੁਅੱਤਲ ਕੀਤੀ",
|
||||
"about.rules": "ਸਰਵਰ ਨਿਯਮ",
|
||||
"account.account_note_header": "ਨੋਟ",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.add_or_remove_from_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ ਜਾਂ ਹਟਾਓ",
|
||||
"account.badges.bot": "ਆਟੋਮੇਟ ਕੀਤਾ",
|
||||
"account.badges.group": "ਗਰੁੱਪ",
|
||||
"account.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.block_domain": "{domain} ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"account.block_short": "ਪਾਬੰਦੀ",
|
||||
"account.blocked": "ਪਾਬੰਦੀਸ਼ੁਦਾ",
|
||||
"account.cancel_follow_request": "Withdraw follow request",
|
||||
"account.follow": "ਪ੍ਰਸ਼ੰਸਕ ਬਣੋ",
|
||||
"account.followers": "ਪ੍ਰਸ਼ੰਸਕ",
|
||||
"account.following": "ਪ੍ਰਸ਼ੰਸਕ ਹਾਂ",
|
||||
"account.cancel_follow_request": "ਫ਼ਾਲੋ ਕਰਨ ਨੂੰ ਰੱਦ ਕਰੋ",
|
||||
"account.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ",
|
||||
"account.follow": "ਫ਼ਾਲੋ",
|
||||
"account.followers": "ਫ਼ਾਲੋਅਰ",
|
||||
"account.followers.empty": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਹਾਲੇ ਕੋਈ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
|
||||
"account.following": "ਫ਼ਾਲੋ ਕੀਤਾ",
|
||||
"account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।",
|
||||
"account.follows_you": "ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"account.media": "ਮੀਡੀਆ",
|
||||
"account.muted": "ਮੌਨ ਕੀਤੀਆਂ",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots and replies",
|
||||
"account.requested": "Awaiting approval",
|
||||
"account.posts": "ਪੋਸਟਾਂ",
|
||||
"account.posts_with_replies": "ਪੋਸਤਾਂ ਅਤੇ ਜਵਾਬ",
|
||||
"account.requested": "ਮਨਜ਼ੂਰੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
|
||||
"account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
"account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
"account.unblock_short": "ਪਾਬੰਦੀ ਹਟਾਓ",
|
||||
"account.unfollow": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ",
|
||||
"account.unfollow": "ਅਣ-ਫ਼ਾਲੋ",
|
||||
"account.unmute_short": "ਮੌਨ-ਰਹਿਤ ਕਰੋ",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"admin.dashboard.retention.average": "ਔਸਤ",
|
||||
"admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ",
|
||||
"alert.unexpected.title": "ਓਹੋ!",
|
||||
"announcement.announcement": "ਹੋਕਾ",
|
||||
"bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ",
|
||||
|
@ -27,35 +41,50 @@
|
|||
"bundle_modal_error.close": "ਬੰਦ ਕਰੋ",
|
||||
"bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ",
|
||||
"column.about": "ਸਾਡੇ ਬਾਰੇ",
|
||||
"column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ",
|
||||
"column.bookmarks": "ਬੁੱਕਮਾਰਕ",
|
||||
"column.home": "ਮੁੱਖ ਪੰਨਾ",
|
||||
"column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ",
|
||||
"column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
|
||||
"column.favourites": "ਮਨਪਸੰਦ",
|
||||
"column.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ",
|
||||
"column.home": "ਮੁੱਖ ਸਫ਼ਾ",
|
||||
"column.lists": "ਸੂਚੀਆਂ",
|
||||
"column.notifications": "ਸੂਚਨਾਵਾਂ",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ",
|
||||
"column_back_button.label": "ਪਿੱਛੇ",
|
||||
"column_header.pin": "ਟੰਗੋ",
|
||||
"column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ",
|
||||
"column_header.unpin": "ਲਾਹੋ",
|
||||
"column_subheading.settings": "ਸੈਟਿੰਗਾਂ",
|
||||
"community.column_settings.media_only": "Media only",
|
||||
"community.column_settings.local_only": "ਸਿਰਫ ਲੋਕਲ ਹੀ",
|
||||
"community.column_settings.media_only": "ਸਿਰਫ ਮੀਡੀਆ ਹੀ",
|
||||
"community.column_settings.remote_only": "ਸਿਰਫ਼ ਰਿਮੋਟ ਹੀ",
|
||||
"compose.language.change": "ਭਾਸ਼ਾ ਬਦਲੋ",
|
||||
"compose.language.search": "ਭਾਸ਼ਾਵਾਂ ਦੀ ਖੋਜ...",
|
||||
"compose.published.open": "ਖੋਲ੍ਹੋ",
|
||||
"compose.saved.body": "ਪੋਸਟ ਸੰਭਾਲੀ ਗਈ।",
|
||||
"compose_form.direct_message_warning_learn_more": "ਹੋਰ ਜਾਣੋ",
|
||||
"compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.",
|
||||
"compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer.lock": "ਲਾਕ ਹੈ",
|
||||
"compose_form.placeholder": "What is on your mind?",
|
||||
"compose_form.publish": "ਪ੍ਰਕਾਸ਼ਨ ਕਰੋ",
|
||||
"compose_form.publish_form": "Publish",
|
||||
"compose_form.save_changes": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler.marked": "ਸਮੱਗਰੀ ਚੇਤਾਵਨੀ ਨੂੰ ਹਟਾਓ",
|
||||
"compose_form.spoiler.unmarked": "ਸਮੱਗਰੀ ਬਾਰੇ ਚੇਤਾਵਨੀ ਜੋੜੋ",
|
||||
"confirmation_modal.cancel": "ਰੱਦ ਕਰੋ",
|
||||
"confirmations.block.confirm": "ਬਲਾਕ",
|
||||
"confirmations.delete.confirm": "ਮਿਟਾਓ",
|
||||
"confirmations.delete.message": "Are you sure you want to delete this status?",
|
||||
"confirmations.delete_list.confirm": "ਮਿਟਾਓ",
|
||||
"confirmations.block.confirm": "ਪਾਬੰਦੀ",
|
||||
"confirmations.delete.confirm": "ਹਟਾਓ",
|
||||
"confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||
"confirmations.delete_list.confirm": "ਹਟਾਓ",
|
||||
"confirmations.discard_edit_media.confirm": "ਰੱਦ ਕਰੋ",
|
||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||
"confirmations.domain_block.confirm": "ਪੂਰੀ ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"confirmations.edit.confirm": "ਸੋਧ",
|
||||
"confirmations.logout.confirm": "ਬਾਹਰ ਹੋਵੋ",
|
||||
"confirmations.mute.confirm": "ਮੌਨ ਕਰੋ",
|
||||
"confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ",
|
||||
"confirmations.unfollow.confirm": "ਪ੍ਰਸ਼ੰਸਕੀ ਰੱਦ ਕਰੋ",
|
||||
"confirmations.unfollow.confirm": "ਅਣ-ਫ਼ਾਲੋ",
|
||||
"copypaste.copied": "ਕਾਪੀ ਕੀਤਾ",
|
||||
"copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ",
|
||||
"disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ",
|
||||
|
@ -63,165 +92,252 @@
|
|||
"dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
|
||||
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"emoji_button.activity": "ਗਤੀਵਿਧੀਆਂ",
|
||||
"emoji_button.clear": "ਸਾਫ਼ ਕਰੋ",
|
||||
"emoji_button.activity": "ਗਤੀਵਿਧੀ",
|
||||
"emoji_button.clear": "ਮਿਟਾਓ",
|
||||
"emoji_button.custom": "ਕਸਟਮ",
|
||||
"emoji_button.flags": "ਝੰਡੀਆਂ",
|
||||
"emoji_button.food": "ਖਾਣਾ-ਪੀਣਾ",
|
||||
"emoji_button.nature": "ਕੁਦਰਤ",
|
||||
"emoji_button.objects": "ਇਕਾਈ",
|
||||
"emoji_button.people": "ਲੋਕ",
|
||||
"empty_column.account_timeline": "No toots here!",
|
||||
"emoji_button.search": "ਖੋਜ ਕਰੋ...",
|
||||
"emoji_button.search_results": "ਖੋਜ ਨਤੀਜੇ",
|
||||
"emoji_button.symbols": "ਚਿੰਨ੍ਹ",
|
||||
"emoji_button.travel": "ਸੈਰ ਸਪਾਟਾ ਤੇ ਥਾਵਾਂ",
|
||||
"empty_column.account_timeline": "ਇੱਥੇ ਕੋਈ ਪੋਸਟ ਨਹੀਂ ਹੈ!",
|
||||
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
|
||||
"empty_column.home": "Your home timeline is empty! Follow more people to fill it up. {suggestions}",
|
||||
"empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।",
|
||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||
"errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
|
||||
"explore.suggested_follows": "ਲੋਕ",
|
||||
"explore.title": "ਪੜਚੋਲ ਕਰੋ",
|
||||
"explore.trending_links": "ਖ਼ਬਰਾਂ",
|
||||
"explore.trending_statuses": "ਸੰਪਾਦਨਾਵਾਂ",
|
||||
"follow_request.reject": "ਅਸਵੀਕਾਰ ਕਰੋ",
|
||||
"explore.trending_statuses": "ਪੋਸਟਾਂ",
|
||||
"explore.trending_tags": "ਹੈਸ਼ਟੈਗ",
|
||||
"filter_modal.added.settings_link": "ਸੈਟਿੰਗਾਂ ਸਫ਼ਾ",
|
||||
"firehose.all": "ਸਭ",
|
||||
"firehose.local": "ਇਹ ਸਰਵਰ",
|
||||
"firehose.remote": "ਹੋਰ ਸਰਵਰ",
|
||||
"follow_request.reject": "ਰੱਦ ਕਰੋ",
|
||||
"footer.about": "ਸਾਡੇ ਬਾਰੇ",
|
||||
"footer.get_app": "ਐਪ ਲਵੋ",
|
||||
"footer.invite": "ਲੋਕਾਂ ਨੂੰ ਸੱਦਾ ਭੇਜੋ",
|
||||
"footer.keyboard_shortcuts": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
|
||||
"footer.privacy_policy": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
|
||||
"footer.source_code": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ",
|
||||
"footer.status": "ਹਾਲਤ",
|
||||
"generic.saved": "ਸਾਂਭੀ ਗਈ",
|
||||
"getting_started.heading": "ਸ਼ੁਰੂ ਕਰੀਏ",
|
||||
"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.any": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ",
|
||||
"hashtag.column_settings.tag_mode.none": "ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"home.column_settings.basic": "ਆਮ",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.blocked": "to open blocked users list",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"interaction_modal.title.follow": "{name} ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"keyboard_shortcuts.back": "ਪਿੱਛੇ ਜਾਓ",
|
||||
"keyboard_shortcuts.blocked": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਸੂਚੀ ਖੋਲ੍ਹੋ",
|
||||
"keyboard_shortcuts.boost": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ",
|
||||
"keyboard_shortcuts.column": "ਫੋਕਸ ਕਾਲਮ",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "ਵਰਣਨ",
|
||||
"keyboard_shortcuts.direct": "to open direct messages column",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.federated": "to open federated timeline",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.heading": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ",
|
||||
"keyboard_shortcuts.home": "to open home timeline",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.local": "to open local timeline",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.muted": "to open muted users list",
|
||||
"keyboard_shortcuts.my_profile": "to open your profile",
|
||||
"keyboard_shortcuts.notifications": "to open notifications column",
|
||||
"keyboard_shortcuts.notifications": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਕਾਲਮ ਖੋਲ੍ਹੋ",
|
||||
"keyboard_shortcuts.open_media": "to open media",
|
||||
"keyboard_shortcuts.pinned": "to open pinned toots list",
|
||||
"keyboard_shortcuts.profile": "to open author's profile",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.profile": "ਲੇਖਕ ਦਾ ਪਰੋਫਾਈਲ ਖੋਲ੍ਹੋ",
|
||||
"keyboard_shortcuts.reply": "ਪੋਸਟ ਨੂੰ ਜਵਾਬ ਦਿਓ",
|
||||
"keyboard_shortcuts.requests": "to open follow requests list",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.start": "to open \"get started\" column",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ",
|
||||
"keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "ਬੰਦ ਕਰੋ",
|
||||
"lightbox.next": "ਅਗਲੀ",
|
||||
"lightbox.previous": "ਪਿਛਲੀ",
|
||||
"lists.delete": "ਸੂਚੀ ਮਿਟਾਓ",
|
||||
"link_preview.author": "{name} ਵਲੋਂ",
|
||||
"lists.account.add": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ",
|
||||
"lists.account.remove": "ਸੂਚੀ ਵਿਚੋਂ ਹਟਾਓ",
|
||||
"lists.delete": "ਸੂਚੀ ਹਟਾਓ",
|
||||
"lists.replies_policy.followed": "ਕੋਈ ਵੀ ਫ਼ਾਲੋ ਕੀਤਾ ਵਰਤੋਂਕਾਰ",
|
||||
"lists.replies_policy.none": "ਕੋਈ ਨਹੀਂ",
|
||||
"loading_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ…",
|
||||
"mute_modal.duration": "ਮਿਆਦ",
|
||||
"navigation_bar.about": "ਸਾਡੇ ਬਾਰੇ",
|
||||
"navigation_bar.about": "ਇਸ ਬਾਰੇ",
|
||||
"navigation_bar.advanced_interface": "ਤਕਨੀਕੀ ਵੈੱਬ ਇੰਟਰਫੇਸ ਵਿੱਚ ਖੋਲ੍ਹੋ",
|
||||
"navigation_bar.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ",
|
||||
"navigation_bar.bookmarks": "ਬੁੱਕਮਾਰਕ",
|
||||
"navigation_bar.compose": "Compose new toot",
|
||||
"navigation_bar.community_timeline": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ",
|
||||
"navigation_bar.compose": "ਨਵੀਂ ਪੋਸਟ ਲਿਖੋ",
|
||||
"navigation_bar.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ",
|
||||
"navigation_bar.discover": "ਖੋਜ",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.domain_blocks": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ",
|
||||
"navigation_bar.edit_profile": "ਪਰੋਫਾਈਲ ਨੂੰ ਸੋਧੋ",
|
||||
"navigation_bar.explore": "ਪੜਚੋਲ ਕਰੋ",
|
||||
"navigation_bar.favourites": "ਮਨਪਸੰਦ",
|
||||
"navigation_bar.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ",
|
||||
"navigation_bar.followed_tags": "ਫ਼ਾਲੋ ਕੀਤੇ ਹੈਸ਼ਟੈਗ",
|
||||
"navigation_bar.follows_and_followers": "ਫ਼ਾਲੋ ਅਤੇ ਫ਼ਾਲੋ ਕਰਨ ਵਾਲੇ",
|
||||
"navigation_bar.lists": "ਸੂਚੀਆਂ",
|
||||
"navigation_bar.logout": "ਲਾੱਗ ਆਊਟ, ਬਾਹਰ ਆਉਣਾ",
|
||||
"navigation_bar.logout": "ਲਾਗ ਆਉਟ",
|
||||
"navigation_bar.personal": "ਨਿੱਜੀ",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.preferences": "ਤਰਜੀਹਾਂ",
|
||||
"navigation_bar.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ",
|
||||
"navigation_bar.preferences": "ਪਸੰਦਾਂ",
|
||||
"navigation_bar.search": "ਖੋਜੋ",
|
||||
"navigation_bar.security": "ਸੁਰੱਖਿਆ",
|
||||
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
||||
"not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।",
|
||||
"notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ",
|
||||
"notification.follow_request": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.column_settings.follow": "ਨਵੇਂ ਫ਼ਾਲੋਅਰ:",
|
||||
"notifications.column_settings.follow_request": "ਨਵੀਆਂ ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ:",
|
||||
"notifications.column_settings.status": "ਨਵੀਆਂ ਪੋਸਟਾਂ:",
|
||||
"notifications.column_settings.update": "ਸੋਧ:",
|
||||
"notifications.filter.all": "ਸਭ",
|
||||
"notifications.filter.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ",
|
||||
"onboarding.actions.go_to_explore": "See what's trending",
|
||||
"onboarding.actions.go_to_home": "Go to your home feed",
|
||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||
"onboarding.follows.title": "Popular on Mastodon",
|
||||
"notifications.filter.boosts": "ਬੂਸਟ",
|
||||
"notifications.filter.favourites": "ਮਨਪਸੰਦ",
|
||||
"notifications.filter.follows": "ਫ਼ਾਲੋ",
|
||||
"notifications.filter.mentions": "ਜ਼ਿਕਰ",
|
||||
"onboarding.actions.go_to_explore": "ਮੈਨੂੰ ਰੁਝਾਨ ਵੇਖਾਓ",
|
||||
"onboarding.actions.go_to_home": "ਮੇਰੀ ਮੁੱਖ ਫੀਡ ਉੱਤੇ ਲੈ ਜਾਓ",
|
||||
"onboarding.follows.lead": "",
|
||||
"onboarding.follows.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ",
|
||||
"onboarding.profile.note": "ਜਾਣਕਾਰੀ",
|
||||
"onboarding.profile.save_and_continue": "ਸੰਭਾਲੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ",
|
||||
"onboarding.profile.title": "ਪਰੋਫਾਈਲ ਸੈਟਅੱਪ",
|
||||
"onboarding.profile.upload_avatar": "ਪਰੋਫਾਈਲ ਤਸਵੀਰ ਅੱਪਲੋਡ ਕਰੋ",
|
||||
"onboarding.share.title": "ਆਪਣਾ ਪਰੋਫਾਈਲ ਸਾਂਝਾ ਕਰੋ",
|
||||
"onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:",
|
||||
"onboarding.start.skip": "Want to skip right ahead?",
|
||||
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
|
||||
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
|
||||
"onboarding.start.skip": "ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਦਦ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ?",
|
||||
"onboarding.start.title": "ਤੁਸੀਂ ਪੂਰਾ ਕਰਨ ਲਿਆ!",
|
||||
"onboarding.steps.follow_people.body": "ਦਿਲਚਸਪ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ, ਇਹ ਤਾਂ ਮਸਟਾਡੋਨ ਹੈ।",
|
||||
"onboarding.steps.follow_people.title": "ਆਪਣੀ ਹੋਮ ਫੀਡ ਨੂੰ ਨਿੱਜੀ ਬਣਾਓ",
|
||||
"onboarding.steps.publish_status.body": "Say hello to the world.",
|
||||
"onboarding.steps.publish_status.title": "ਆਪਣੀ ਪਹਿਲੀ ਪੋਸਟ ਕਰੋ",
|
||||
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
|
||||
"onboarding.steps.setup_profile.title": "Customize your profile",
|
||||
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
|
||||
"onboarding.steps.share_profile.title": "Share your profile",
|
||||
"poll.closed": "ਬੰਦ ਹੋਇਆ",
|
||||
"onboarding.steps.setup_profile.title": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਆਪਣਾ ਬਣਾਓ",
|
||||
"onboarding.steps.share_profile.body": "ਆਪਣੇ ਮਿੱਤਰਾਂ ਨੂੰ ਦੱਸੋ ਤੁਹਾਨੂੰ ਮਸਟਾਡੋਨ ਕਿਵੇਂ ਲੱਗਿਆ",
|
||||
"onboarding.steps.share_profile.title": "ਆਪਣੇ ਮਸਟਾਡੋਨ ਪਰੋਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰੋ",
|
||||
"poll.closed": "ਬੰਦ ਹੈ",
|
||||
"poll.refresh": "ਤਾਜ਼ਾ ਕਰੋ",
|
||||
"poll.vote": "ਵੋਟ ਪਾਓ",
|
||||
"privacy.change": "Adjust status privacy",
|
||||
"privacy.direct.short": "Direct",
|
||||
"privacy.private.short": "Followers-only",
|
||||
"privacy.change": "ਪੋਸਟ ਦੀ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਦਲੋ",
|
||||
"privacy.direct.short": "ਸਿੱਧਾ ਲੋਕਾਂ ਦਾ ਜ਼ਿਕਰ ਕਰੋ",
|
||||
"privacy.private.short": "ਸਿਰਫ਼ ਫ਼ਾਲੋਅਰ",
|
||||
"privacy.public.short": "ਜਨਤਕ",
|
||||
"privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
|
||||
"refresh": "ਤਾਜ਼ਾ ਕਰੋ",
|
||||
"regeneration_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...",
|
||||
"relative_time.full.just_now": "ਹੁਣੇ ਹੀ",
|
||||
"relative_time.just_now": "ਹੁਣੇ",
|
||||
"relative_time.minutes": "{number}ਮਿੰ",
|
||||
"relative_time.seconds": "{number}ਸ",
|
||||
"relative_time.today": "ਅੱਜ",
|
||||
"reply_indicator.cancel": "ਰੱਦ ਕਰੋ",
|
||||
"report.block": "ਬਲਾਕ",
|
||||
"report.categories.legal": "ਕਨੂੰਨੀ",
|
||||
"report.categories.other": "ਬਾਕੀ",
|
||||
"report.categories.spam": "ਸਪਾਮ",
|
||||
"report.category.title_status": "ਸੰਪਾਦਨਾ",
|
||||
"report.categories.spam": "ਸਪੈਮ",
|
||||
"report.category.title_account": "ਪਰੋਫਾਈਲ",
|
||||
"report.category.title_status": "ਪੋਸਟ",
|
||||
"report.close": "ਮੁਕੰਮਲ",
|
||||
"report.mute": "ਮੌਨ ਕਰੋ",
|
||||
"report.next": "ਅਗਲੀ",
|
||||
"report.placeholder": "Type or paste additional comments",
|
||||
"report.submit": "Submit report",
|
||||
"report.target": "Report {target}",
|
||||
"report.placeholder": "ਵਧੀਕ ਟਿੱਪਣੀਆਂ",
|
||||
"report.reasons.dislike": "ਮੈਨੂੰ ਇਹ ਪਸੰਦ ਨਹੀਂ ਹੈ",
|
||||
"report.reasons.spam": "ਇਹ ਸਪੈਮ ਹੈ",
|
||||
"report.submit": "ਭੇਜੋ",
|
||||
"report.target": "{target} ਰਿਪੋਰਟ",
|
||||
"report.unfollow": "@{name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ",
|
||||
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
|
||||
"report_notification.categories.other": "ਬਾਕੀ",
|
||||
"report_notification.categories.spam": "ਸਪਾਮ",
|
||||
"report_notification.categories.spam": "ਸਪੈਮ",
|
||||
"report_notification.categories.violation": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ",
|
||||
"search.placeholder": "ਖੋਜੋ",
|
||||
"search_popout.quick_actions": "ਫੌਰੀ ਕਾਰਵਾਈਆਂ",
|
||||
"search_popout.specific_date": "ਖਾਸ ਤਾਰੀਖ",
|
||||
"search_popout.user": "ਵਰਤੋਂਕਾਰ",
|
||||
"search_results.accounts": "ਪਰੋਫਾਈਲ",
|
||||
"search_results.all": "ਸਭ",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.hashtags": "ਹੈਸ਼ਟੈਗ",
|
||||
"search_results.statuses": "ਪੋਸਟਾਂ",
|
||||
"server_banner.learn_more": "ਹੋਰ ਜਾਣੋ",
|
||||
"sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ",
|
||||
"sign_in_banner.sign_in": "Sign in",
|
||||
"status.admin_status": "Open this status in the moderation interface",
|
||||
"status.copy": "Copy link to status",
|
||||
"status.delete": "ਮਿਟਾਓ",
|
||||
"sign_in_banner.sign_in": "ਲਾਗਇਨ",
|
||||
"status.admin_status": "",
|
||||
"status.block": "@{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
|
||||
"status.bookmark": "ਬੁੱਕਮਾਰਕ",
|
||||
"status.copy": "ਪੋਸਟ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
|
||||
"status.delete": "ਹਟਾਓ",
|
||||
"status.edit": "ਸੋਧ",
|
||||
"status.edited": "{date} ਨੂੰ ਸੋਧਿਆ",
|
||||
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
|
||||
"status.embed": "ਮੜ੍ਹੋ",
|
||||
"status.favourite": "ਪਸੰਦ",
|
||||
"status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ",
|
||||
"status.history.edited": "{name} ਨੇ {date} ਨੂੰ ਸੋਧਿਆ",
|
||||
"status.load_more": "ਹੋਰ ਦਿਖਾਓ",
|
||||
"status.media.open": "ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
|
||||
"status.media.show": "ਵੇਖਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
|
||||
"status.mention": "@{name} ਦਾ ਜ਼ਿਕਰ",
|
||||
"status.more": "ਹੋਰ",
|
||||
"status.open": "Expand this status",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.open": "ਇਹ ਪੋਸਟ ਨੂੰ ਫੈਲਾਓ",
|
||||
"status.pin": "ਪਰੋਫਾਈਲ ਉੱਤੇ ਟੰਗੋ",
|
||||
"status.pinned": "ਟੰਗੀ ਹੋਈ ਪੋਸਟ",
|
||||
"status.read_more": "ਹੋਰ ਪੜ੍ਹੋ",
|
||||
"status.reblog": "ਵਧਾਓ",
|
||||
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
|
||||
"status.replied_to": "{name} ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ",
|
||||
"status.reply": "ਜਵਾਬ ਦੇਵੋ",
|
||||
"status.replyAll": "ਮਾਮਲੇ ਨੂੰ ਜਵਾਬ ਦਿਓ",
|
||||
"status.report": "@{name} ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
|
||||
"status.sensitive_warning": "ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ",
|
||||
"status.share": "ਸਾਂਝਾ ਕਰੋ",
|
||||
"status.show_filter_reason": "ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ",
|
||||
"status.show_less": "ਘੱਟ ਦਿਖਾਓ",
|
||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
|
||||
"subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ",
|
||||
"tabs_bar.home": "ਮੁੱਖ ਪੰਨਾ",
|
||||
"status.show_more": "ਹੋਰ ਦਿਖਾਓ",
|
||||
"status.title.with_attachments": "{user} ਨੇ {attachmentCount, plural,one {ਅਟੈਚਮੈਂਟ} other {{attachmentCount}ਅਟੈਚਮੈਂਟਾਂ}} ਪੋਸਟ ਕੀਤੀਆਂ",
|
||||
"status.translate": "ਉਲੱਥਾ ਕਰੋ",
|
||||
"subscribed_languages.save": "ਤਬਦੀਲੀਆਂ ਸੰਭਾਲੋ",
|
||||
"tabs_bar.home": "ਘਰ",
|
||||
"tabs_bar.notifications": "ਸੂਚਨਾਵਾਂ",
|
||||
"timeline_hint.resources.followers": "ਪ੍ਰਸ਼ੰਸਕ",
|
||||
"timeline_hint.resources.follows": "ਪ੍ਰਸ਼ੰਸਕ ਬਣਨ 'ਤੇ",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"timeline_hint.resources.followers": "ਫ਼ਾਲੋਅਰ",
|
||||
"timeline_hint.resources.follows": "ਫ਼ਾਲੋ",
|
||||
"timeline_hint.resources.statuses": "ਪੂਰਾਣੀਆਂ ਪੋਸਟਾਂ",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"units.short.billion": "{count}ਿਬ",
|
||||
"units.short.million": "{count}ਮਿ",
|
||||
"units.short.thousand": "{count}ਹਜ਼ਾਰ",
|
||||
"upload_form.audio_description": "ਬੋਲ਼ੇ ਜਾਂ ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ",
|
||||
"upload_form.description": "ਅੰਨ੍ਹੇ ਜਾਂ ਦੇਖਣ ਲਈ ਮੁਸ਼ਕਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ",
|
||||
"upload_form.edit": "ਸੋਧ",
|
||||
"upload_form.undo": "ਮਿਟਾਓ",
|
||||
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
||||
"upload_form.undo": "ਹਟਾਓ",
|
||||
"upload_form.video_description": "ਬੋਲ਼ੇ, ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ, ਅੰਨ੍ਹੇ ਜਾਂ ਘੱਟ ਨਿਗ੍ਹਾ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵਾ",
|
||||
"upload_modal.apply": "ਲਾਗੂ ਕਰੋ",
|
||||
"upload_modal.applying": "ਲਾਗੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…",
|
||||
"upload_modal.choose_image": "ਤਸਵੀਰ ਚੁਣੋ",
|
||||
"upload_modal.edit_media": "ਮੀਡੀਆ ਸੋਧੋ",
|
||||
"upload_progress.label": "Uploading…",
|
||||
"upload_progress.processing": "ਕਾਰਜ ਅਧੀਨ ਹੈ…",
|
||||
"upload_progress.label": "ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...",
|
||||
"upload_progress.processing": "ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ…",
|
||||
"video.exit_fullscreen": "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚੋਂ ਬਾਹਰ ਨਿਕਲੋ",
|
||||
"video.fullscreen": "ਪੂਰੀ ਸਕਰੀਨ",
|
||||
"video.pause": "ਰਹਾਉ",
|
||||
"video.pause": "ਠਹਿਰੋ",
|
||||
"video.play": "ਚਲਾਓ"
|
||||
}
|
||||
|
|
|
@ -488,6 +488,7 @@
|
|||
"onboarding.profile.note": "O tebe",
|
||||
"onboarding.profile.note_hint": "Môžeš @spomenúť iných ľudí, alebo #haštagy…",
|
||||
"onboarding.profile.save_and_continue": "Ulož a pokračuj",
|
||||
"onboarding.profile.title": "Nastavenie profilu",
|
||||
"onboarding.profile.upload_avatar": "Nahraj profilový obrázok",
|
||||
"onboarding.profile.upload_header": "Nahraj profilové záhlavie",
|
||||
"onboarding.share.lead": "Daj ľudom vedieť, ako ťa môžu na Mastodone nájsť!",
|
||||
|
|
|
@ -496,7 +496,7 @@
|
|||
"onboarding.share.message": "ฉันคือ {username} ใน #Mastodon! มาติดตามฉันที่ {url}",
|
||||
"onboarding.share.next_steps": "ขั้นตอนถัดไปที่เป็นไปได้:",
|
||||
"onboarding.share.title": "แชร์โปรไฟล์ของคุณ",
|
||||
"onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมที่มีเอกลักษณ์เฉพาะตัว กระจายศูนย์ ที่ซึ่งคุณ—ไม่ใช่อัลกอริทึม—เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:",
|
||||
"onboarding.start.lead": "ตอนนี้คุณเป็นส่วนหนึ่งของ Mastodon แพลตฟอร์มสื่อสังคมแบบกระจายศูนย์ที่มีเอกลักษณ์เฉพาะตัว ที่ซึ่งคุณ ไม่ใช่อัลกอริทึม เรียบเรียงประสบการณ์ของคุณเอง มาช่วยให้คุณเริ่มต้นใช้งานพรมแดนทางสังคมใหม่นี้กันเลย:",
|
||||
"onboarding.start.skip": "ไม่ต้องการความช่วยเหลือในการเริ่มต้นใช้งาน?",
|
||||
"onboarding.start.title": "คุณทำสำเร็จแล้ว!",
|
||||
"onboarding.steps.follow_people.body": "การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ",
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"about.blocks": "ئوتتۇراھال مۇلازىمېتىر",
|
||||
"about.contact": "ئالاقىلاشقۇچى:",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.cancel_follow_request": "Withdraw follow request",
|
||||
"account.posts": "Toots",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"about.domain_blocks.silenced.title": "已受限",
|
||||
"about.domain_blocks.suspended.explanation": "來自此伺服器的資料都不會被處理、儲存或交換,也無法與此伺服器上的使用者互動或交流。",
|
||||
"about.domain_blocks.suspended.title": "已停權",
|
||||
"about.not_available": "無法於此伺服器上使用此資訊。",
|
||||
"about.not_available": "無法於本伺服器上使用此資訊。",
|
||||
"about.powered_by": "由 {mastodon} 提供的去中心化社群媒體",
|
||||
"about.rules": "伺服器規則",
|
||||
"account.account_note_header": "備註",
|
||||
|
@ -207,14 +207,14 @@
|
|||
"dismissable_banner.explore_statuses": "這些於此伺服器以及去中心化網路中其他伺服器發出的嘟文正在被此伺服器上的人們熱烈討論著。越多不同人轉嘟及最愛排名更高。",
|
||||
"dismissable_banner.explore_tags": "這些主題標籤正在被此伺服器以及去中心化網路上的人們熱烈討論著。越多不同人所嘟出的主題標籤排名更高。",
|
||||
"dismissable_banner.public_timeline": "這些是來自 {domain} 使用者們跟隨中帳號所發表之最新公開嘟文。",
|
||||
"embed.instructions": "如要將此嘟文嵌入您的網站,請複製以下程式碼。",
|
||||
"embed.instructions": "若您欲於您的網站嵌入此嘟文,請複製以下程式碼。",
|
||||
"embed.preview": "它將顯示成這樣:",
|
||||
"emoji_button.activity": "活動",
|
||||
"emoji_button.clear": "清除",
|
||||
"emoji_button.custom": "自訂",
|
||||
"emoji_button.flags": "旗幟",
|
||||
"emoji_button.food": "食物 & 飲料",
|
||||
"emoji_button.label": "插入表情圖案",
|
||||
"emoji_button.label": "插入表情符號",
|
||||
"emoji_button.nature": "自然",
|
||||
"emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "物件",
|
||||
|
@ -353,11 +353,11 @@
|
|||
"keyboard_shortcuts.legend": "顯示此說明選單",
|
||||
"keyboard_shortcuts.local": "開啟本站時間軸",
|
||||
"keyboard_shortcuts.mention": "提及作者",
|
||||
"keyboard_shortcuts.muted": "開啟靜音使用者清單",
|
||||
"keyboard_shortcuts.muted": "開啟靜音使用者列表",
|
||||
"keyboard_shortcuts.my_profile": "開啟個人檔案頁面",
|
||||
"keyboard_shortcuts.notifications": "開啟通知欄",
|
||||
"keyboard_shortcuts.open_media": "開啟媒體",
|
||||
"keyboard_shortcuts.pinned": "開啟釘選的嘟文清單",
|
||||
"keyboard_shortcuts.pinned": "開啟釘選的嘟文列表",
|
||||
"keyboard_shortcuts.profile": "開啟作者的個人檔案頁面",
|
||||
"keyboard_shortcuts.reply": "回應嘟文",
|
||||
"keyboard_shortcuts.requests": "開啟跟隨請求列表",
|
||||
|
@ -386,7 +386,7 @@
|
|||
"lists.new.create": "新增列表",
|
||||
"lists.new.title_placeholder": "新列表標題",
|
||||
"lists.replies_policy.followed": "任何跟隨的使用者",
|
||||
"lists.replies_policy.list": "成員清單",
|
||||
"lists.replies_policy.list": "列表成員",
|
||||
"lists.replies_policy.none": "沒有人",
|
||||
"lists.replies_policy.title": "顯示回覆:",
|
||||
"lists.search": "搜尋您跟隨的使用者",
|
||||
|
@ -477,7 +477,7 @@
|
|||
"onboarding.actions.back": "返回",
|
||||
"onboarding.actions.go_to_explore": "看看發生什麼新鮮事",
|
||||
"onboarding.actions.go_to_home": "前往您的首頁時間軸",
|
||||
"onboarding.compose.template": "你好 #Mastodon!",
|
||||
"onboarding.compose.template": "哈囉 #Mastodon!",
|
||||
"onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。",
|
||||
"onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人的話,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!",
|
||||
"onboarding.follows.title": "客製化您的首頁時間軸",
|
||||
|
@ -687,7 +687,7 @@
|
|||
"status.translated_from_with": "透過 {provider} 翻譯 {lang}",
|
||||
"status.uncached_media_warning": "無法預覽",
|
||||
"status.unmute_conversation": "解除此對話的靜音",
|
||||
"status.unpin": "從個人檔案頁面取消釘選",
|
||||
"status.unpin": "自個人檔案頁面取消釘選",
|
||||
"subscribed_languages.lead": "僅選定語言的嘟文才會出現於您的首頁上,並於變更後列出時間軸。選取「無」以接收所有語言的嘟文。",
|
||||
"subscribed_languages.save": "儲存變更",
|
||||
"subscribed_languages.target": "變更 {target} 的訂閱語言",
|
||||
|
|
|
@ -2,13 +2,6 @@ import { Map as ImmutableMap } from 'immutable';
|
|||
|
||||
import { STORE_HYDRATE } from '../actions/store';
|
||||
|
||||
export let currentMedia = null;
|
||||
|
||||
export function setCurrentMedia(value) {
|
||||
currentMedia = value;
|
||||
}
|
||||
|
||||
|
||||
const initialState = ImmutableMap({
|
||||
accept_content_types: [],
|
||||
});
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
import {
|
||||
isAsyncThunkAction,
|
||||
isPending as isThunkActionPending,
|
||||
isFulfilled as isThunkActionFulfilled,
|
||||
isRejected as isThunkActionRejected,
|
||||
} from '@reduxjs/toolkit';
|
||||
import { showLoading, hideLoading } from 'react-redux-loading-bar';
|
||||
import type { AnyAction, Middleware } from 'redux';
|
||||
|
||||
|
@ -21,25 +27,43 @@ export const loadingBarMiddleware = (
|
|||
return ({ dispatch }) =>
|
||||
(next) =>
|
||||
(action: AnyAction) => {
|
||||
if (action.type && !action.skipLoading) {
|
||||
let isPending = false;
|
||||
let isFulfilled = false;
|
||||
let isRejected = false;
|
||||
|
||||
if (
|
||||
isAsyncThunkAction(action)
|
||||
// TODO: once we get the first use-case for it, add a check for skipLoading
|
||||
) {
|
||||
if (isThunkActionPending(action)) isPending = true;
|
||||
else if (isThunkActionFulfilled(action)) isFulfilled = true;
|
||||
else if (isThunkActionRejected(action)) isRejected = true;
|
||||
} else if (
|
||||
action.type &&
|
||||
!action.skipLoading &&
|
||||
typeof action.type === 'string'
|
||||
) {
|
||||
const [PENDING, FULFILLED, REJECTED] = promiseTypeSuffixes;
|
||||
|
||||
const isPending = new RegExp(`${PENDING}$`, 'g');
|
||||
const isFulfilled = new RegExp(`${FULFILLED}$`, 'g');
|
||||
const isRejected = new RegExp(`${REJECTED}$`, 'g');
|
||||
const isPendingRegexp = new RegExp(`${PENDING}$`, 'g');
|
||||
const isFulfilledRegexp = new RegExp(`${FULFILLED}$`, 'g');
|
||||
const isRejectedRegexp = new RegExp(`${REJECTED}$`, 'g');
|
||||
|
||||
if (typeof action.type === 'string') {
|
||||
if (action.type.match(isPending)) {
|
||||
dispatch(showLoading());
|
||||
} else if (
|
||||
action.type.match(isFulfilled) ??
|
||||
action.type.match(isRejected)
|
||||
) {
|
||||
dispatch(hideLoading());
|
||||
}
|
||||
if (action.type.match(isPendingRegexp)) {
|
||||
isPending = true;
|
||||
} else if (action.type.match(isFulfilledRegexp)) {
|
||||
isFulfilled = true;
|
||||
} else if (action.type.match(isRejectedRegexp)) {
|
||||
isRejected = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isPending) {
|
||||
dispatch(showLoading());
|
||||
} else if (isFulfilled || isRejected) {
|
||||
dispatch(hideLoading());
|
||||
}
|
||||
|
||||
return next(action);
|
||||
};
|
||||
};
|
||||
|
|
|
@ -52,7 +52,7 @@ class OStatus::TagManager
|
|||
ActivityPub::TagManager.instance.uri_to_local_id(tag)
|
||||
else
|
||||
matches = Regexp.new("objectId=([\\d]+):objectType=#{expected_type}").match(tag)
|
||||
return matches[1] unless matches.nil?
|
||||
matches[1] unless matches.nil?
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class PotentialFriendshipTracker
|
||||
EXPIRE_AFTER = 90.days.seconds
|
||||
MAX_ITEMS = 80
|
||||
|
||||
WEIGHTS = {
|
||||
reply: 1,
|
||||
emoji_reaction: 3,
|
||||
favourite: 10,
|
||||
reblog: 20,
|
||||
}.freeze
|
||||
|
||||
class << self
|
||||
include Redisable
|
||||
|
||||
def record(account_id, target_account_id, action)
|
||||
return if account_id == target_account_id
|
||||
|
||||
key = "interactions:#{account_id}"
|
||||
weight = WEIGHTS[action]
|
||||
|
||||
redis.zincrby(key, weight, target_account_id)
|
||||
redis.zremrangebyrank(key, 0, -MAX_ITEMS)
|
||||
redis.expire(key, EXPIRE_AFTER)
|
||||
end
|
||||
|
||||
def remove(account_id, target_account_id)
|
||||
redis.zrem("interactions:#{account_id}", target_account_id)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -12,7 +12,7 @@ class ApplicationMailer < ActionMailer::Base
|
|||
protected
|
||||
|
||||
def locale_for_account(account, &block)
|
||||
I18n.with_locale(account.user_locale || I18n.default_locale, &block)
|
||||
I18n.with_locale(account.user_locale || I18n.locale || I18n.default_locale, &block)
|
||||
end
|
||||
|
||||
def set_autoreply_headers!
|
||||
|
|
|
@ -202,6 +202,6 @@ class UserMailer < Devise::Mailer
|
|||
end
|
||||
|
||||
def locale
|
||||
@resource.locale.presence || I18n.default_locale
|
||||
@resource.locale.presence || I18n.locale || I18n.default_locale
|
||||
end
|
||||
end
|
||||
|
|
|
@ -496,8 +496,8 @@ class Account < ApplicationRecord
|
|||
end
|
||||
|
||||
def inverse_alias(key, original_key)
|
||||
define_method("#{key}=") do |value|
|
||||
public_send("#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value))
|
||||
define_method(:"#{key}=") do |value|
|
||||
public_send(:"#{original_key}=", !ActiveModel::Type::Boolean.new.cast(value))
|
||||
end
|
||||
|
||||
define_method(key) do
|
||||
|
|
|
@ -18,16 +18,17 @@ class AccountDomainBlock < ApplicationRecord
|
|||
belongs_to :account
|
||||
validates :domain, presence: true, uniqueness: { scope: :account_id }, domain: true
|
||||
|
||||
after_commit :remove_blocking_cache
|
||||
after_commit :remove_relationship_cache
|
||||
after_commit :invalidate_domain_blocking_cache
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
|
||||
private
|
||||
|
||||
def remove_blocking_cache
|
||||
def invalidate_domain_blocking_cache
|
||||
Rails.cache.delete("exclude_domains_for:#{account_id}")
|
||||
Rails.cache.delete(['exclude_domains', account_id, domain])
|
||||
end
|
||||
|
||||
def remove_relationship_cache
|
||||
Rails.cache.delete_matched("relationship:#{account_id}:*")
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,28 +1,48 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions
|
||||
include DatabaseHelper
|
||||
|
||||
SOURCES = [
|
||||
AccountSuggestions::SettingSource,
|
||||
AccountSuggestions::PastInteractionsSource,
|
||||
AccountSuggestions::FriendsOfFriendsSource,
|
||||
AccountSuggestions::SimilarProfilesSource,
|
||||
AccountSuggestions::GlobalSource,
|
||||
].freeze
|
||||
|
||||
def self.get(account, limit)
|
||||
SOURCES.each_with_object([]) do |source_class, suggestions|
|
||||
source_suggestions = source_class.new.get(
|
||||
account,
|
||||
skip_account_ids: suggestions.map(&:account_id),
|
||||
limit: limit - suggestions.size
|
||||
)
|
||||
BATCH_SIZE = 40
|
||||
|
||||
suggestions.concat(source_suggestions)
|
||||
def initialize(account)
|
||||
@account = account
|
||||
end
|
||||
|
||||
def get(limit, offset = 0)
|
||||
with_read_replica do
|
||||
account_ids_with_sources = Rails.cache.fetch("follow_recommendations/#{@account.id}", expires_in: 15.minutes) do
|
||||
SOURCES.flat_map { |klass| klass.new.get(@account, limit: BATCH_SIZE) }.each_with_object({}) do |(account_id, source), h|
|
||||
(h[account_id] ||= []).concat(Array(source).map(&:to_sym))
|
||||
end.to_a.shuffle
|
||||
end
|
||||
|
||||
# The sources deliver accounts that haven't yet been followed, are not blocked,
|
||||
# and so on. Since we reset the cache on follows, blocks, and so on, we don't need
|
||||
# a complicated query on this end.
|
||||
|
||||
account_ids = account_ids_with_sources[offset, limit]
|
||||
accounts_map = Account.where(id: account_ids.map(&:first)).includes(:account_stat).index_by(&:id)
|
||||
|
||||
account_ids.filter_map do |(account_id, source)|
|
||||
next unless accounts_map.key?(account_id)
|
||||
|
||||
AccountSuggestions::Suggestion.new(
|
||||
account: accounts_map[account_id],
|
||||
source: source
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.remove(account, target_account_id)
|
||||
SOURCES.each do |source_class|
|
||||
source = source_class.new
|
||||
source.remove(account, target_account_id)
|
||||
end
|
||||
def remove(target_account_id)
|
||||
FollowRecommendationMute.create(account_id: @account.id, target_account_id: target_account_id)
|
||||
end
|
||||
end
|
||||
|
|
37
app/models/account_suggestions/friends_of_friends_source.rb
Normal file
37
app/models/account_suggestions/friends_of_friends_source.rb
Normal file
|
@ -0,0 +1,37 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source
|
||||
def get(account, limit: 10)
|
||||
Account.find_by_sql([<<~SQL.squish, { id: account.id, limit: limit }]).map { |row| [row.id, key] }
|
||||
WITH first_degree AS (
|
||||
SELECT target_account_id
|
||||
FROM follows
|
||||
JOIN accounts AS target_accounts ON follows.target_account_id = target_accounts.id
|
||||
WHERE account_id = :id
|
||||
AND NOT target_accounts.hide_collections
|
||||
)
|
||||
SELECT accounts.id, COUNT(*) AS frequency
|
||||
FROM accounts
|
||||
JOIN follows ON follows.target_account_id = accounts.id
|
||||
JOIN account_stats ON account_stats.account_id = accounts.id
|
||||
LEFT OUTER JOIN follow_recommendation_mutes ON follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = :id
|
||||
WHERE follows.account_id IN (SELECT * FROM first_degree)
|
||||
AND NOT EXISTS (SELECT 1 FROM follows f WHERE f.target_account_id = follows.target_account_id AND f.account_id = :id)
|
||||
AND follows.target_account_id <> :id
|
||||
AND accounts.discoverable
|
||||
AND accounts.suspended_at IS NULL
|
||||
AND accounts.silenced_at IS NULL
|
||||
AND accounts.moved_to_account_id IS NULL
|
||||
AND follow_recommendation_mutes.target_account_id IS NULL
|
||||
GROUP BY accounts.id, account_stats.id
|
||||
ORDER BY frequency DESC, account_stats.followers_count ASC
|
||||
LIMIT :limit
|
||||
SQL
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def key
|
||||
:friends_of_friends
|
||||
end
|
||||
end
|
|
@ -1,39 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::GlobalSource < AccountSuggestions::Source
|
||||
include Redisable
|
||||
|
||||
def key
|
||||
:global
|
||||
end
|
||||
|
||||
def get(account, skip_account_ids: [], limit: 40)
|
||||
account_ids = account_ids_for_locale(I18n.locale.to_s.split(/[_-]/).first) - [account.id] - skip_account_ids
|
||||
|
||||
as_ordered_suggestions(
|
||||
scope(account).where(id: account_ids),
|
||||
account_ids
|
||||
).take(limit)
|
||||
end
|
||||
|
||||
def remove(_account, _target_account_id)
|
||||
nil
|
||||
def get(account, limit: 10)
|
||||
FollowRecommendation.localized(content_locale).joins(:account).merge(base_account_scope(account)).order(rank: :desc).limit(limit).pluck(:account_id, :reason)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def scope(account)
|
||||
Account.searchable
|
||||
.followable_by(account)
|
||||
.not_excluded_by_account(account)
|
||||
.not_domain_blocked_by_account(account)
|
||||
end
|
||||
|
||||
def account_ids_for_locale(locale)
|
||||
redis.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
|
||||
end
|
||||
|
||||
def to_ordered_list_key(account)
|
||||
account.id
|
||||
def content_locale
|
||||
I18n.locale.to_s.split(/[_-]/).first
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::PastInteractionsSource < AccountSuggestions::Source
|
||||
include Redisable
|
||||
|
||||
def key
|
||||
:past_interactions
|
||||
end
|
||||
|
||||
def get(account, skip_account_ids: [], limit: 40)
|
||||
account_ids = account_ids_for_account(account.id, limit + skip_account_ids.size) - skip_account_ids
|
||||
|
||||
as_ordered_suggestions(
|
||||
scope.where(id: account_ids),
|
||||
account_ids
|
||||
).take(limit)
|
||||
end
|
||||
|
||||
def remove(account, target_account_id)
|
||||
redis.zrem("interactions:#{account.id}", target_account_id)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def scope
|
||||
Account.searchable
|
||||
end
|
||||
|
||||
def account_ids_for_account(account_id, limit)
|
||||
redis.zrevrange("interactions:#{account_id}", 0, limit).map(&:to_i)
|
||||
end
|
||||
|
||||
def to_ordered_list_key(account)
|
||||
account.id
|
||||
end
|
||||
end
|
|
@ -1,32 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::SettingSource < AccountSuggestions::Source
|
||||
def key
|
||||
:staff
|
||||
end
|
||||
|
||||
def get(account, skip_account_ids: [], limit: 40)
|
||||
return [] unless setting_enabled?
|
||||
|
||||
as_ordered_suggestions(
|
||||
scope(account).where(setting_to_where_condition).where.not(id: skip_account_ids),
|
||||
usernames_and_domains
|
||||
).take(limit)
|
||||
end
|
||||
|
||||
def remove(_account, _target_account_id)
|
||||
nil
|
||||
def get(account, limit: 10)
|
||||
if setting_enabled?
|
||||
base_account_scope(account).where(setting_to_where_condition).limit(limit).pluck(:id).zip([key].cycle)
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def scope(account)
|
||||
Account.searchable
|
||||
.followable_by(account)
|
||||
.not_excluded_by_account(account)
|
||||
.not_domain_blocked_by_account(account)
|
||||
.where(locked: false)
|
||||
.where.not(id: account.id)
|
||||
def key
|
||||
:featured
|
||||
end
|
||||
|
||||
def usernames_and_domains
|
||||
|
@ -61,8 +47,4 @@ class AccountSuggestions::SettingSource < AccountSuggestions::Source
|
|||
def setting
|
||||
Setting.bootstrap_timeline_accounts
|
||||
end
|
||||
|
||||
def to_ordered_list_key(account)
|
||||
[account.username.downcase, account.domain&.downcase]
|
||||
end
|
||||
end
|
||||
|
|
67
app/models/account_suggestions/similar_profiles_source.rb
Normal file
67
app/models/account_suggestions/similar_profiles_source.rb
Normal file
|
@ -0,0 +1,67 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::SimilarProfilesSource < AccountSuggestions::Source
|
||||
class QueryBuilder < AccountSearchService::QueryBuilder
|
||||
def must_clauses
|
||||
[
|
||||
{
|
||||
more_like_this: {
|
||||
fields: %w(text text.stemmed),
|
||||
like: @query.map { |id| { _index: 'accounts', _id: id } },
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
term: {
|
||||
properties: 'discoverable',
|
||||
},
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
def must_not_clauses
|
||||
[
|
||||
{
|
||||
terms: {
|
||||
id: following_ids,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
term: {
|
||||
properties: 'bot',
|
||||
},
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
def should_clauses
|
||||
{
|
||||
term: {
|
||||
properties: {
|
||||
value: 'verified',
|
||||
boost: 2,
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def get(account, limit: 10)
|
||||
recently_followed_account_ids = account.active_relationships.recent.limit(5).pluck(:target_account_id)
|
||||
|
||||
if Chewy.enabled? && !recently_followed_account_ids.empty?
|
||||
QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i).zip([key].cycle)
|
||||
else
|
||||
[]
|
||||
end
|
||||
rescue Faraday::ConnectionFailed
|
||||
[]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def key
|
||||
:similar_to_recently_followed
|
||||
end
|
||||
end
|
|
@ -1,34 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccountSuggestions::Source
|
||||
def key
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def get(_account, **kwargs)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def remove(_account, target_account_id)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def as_ordered_suggestions(scope, ordered_list)
|
||||
return [] if ordered_list.empty?
|
||||
|
||||
map = scope.index_by { |account| to_ordered_list_key(account) }
|
||||
|
||||
ordered_list.filter_map { |ordered_list_key| map[ordered_list_key] }.map do |account|
|
||||
AccountSuggestions::Suggestion.new(
|
||||
account: account,
|
||||
source: key
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def to_ordered_list_key(_account)
|
||||
raise NotImplementedError
|
||||
def base_account_scope(account)
|
||||
Account.searchable
|
||||
.followable_by(account)
|
||||
.not_excluded_by_account(account)
|
||||
.not_domain_blocked_by_account(account)
|
||||
.where.not(id: account.id)
|
||||
.joins("LEFT OUTER JOIN follow_recommendation_mutes ON follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = #{account.id}").where(follow_recommendation_mutes: { target_account_id: nil })
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26,15 +26,20 @@ class Block < ApplicationRecord
|
|||
end
|
||||
|
||||
before_validation :set_uri, only: :create
|
||||
after_commit :remove_blocking_cache
|
||||
after_commit :invalidate_blocking_cache
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
|
||||
private
|
||||
|
||||
def remove_blocking_cache
|
||||
def invalidate_blocking_cache
|
||||
Rails.cache.delete("exclude_account_ids_for:#{account_id}")
|
||||
Rails.cache.delete("exclude_account_ids_for:#{target_account_id}")
|
||||
end
|
||||
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
|
||||
def set_uri
|
||||
self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil?
|
||||
end
|
||||
|
|
|
@ -78,6 +78,7 @@ module Account::Associations
|
|||
has_one :deletion_request, class_name: 'AccountDeletionRequest', inverse_of: :account, dependent: :destroy
|
||||
|
||||
# Follow recommendations
|
||||
has_one :follow_recommendation, inverse_of: :account, dependent: nil
|
||||
has_one :follow_recommendation_suppression, inverse_of: :account, dependent: :destroy
|
||||
|
||||
# Account statuses cleanup policy
|
||||
|
|
|
@ -60,12 +60,6 @@ module Account::Interactions
|
|||
end
|
||||
end
|
||||
|
||||
def domain_blocking_map(target_account_ids, account_id)
|
||||
accounts_map = Account.where(id: target_account_ids).select('id, domain').each_with_object({}) { |a, h| h[a.id] = a.domain }
|
||||
blocked_domains = domain_blocking_map_by_domain(accounts_map.values.compact, account_id)
|
||||
accounts_map.reduce({}) { |h, (id, domain)| h.merge(id => blocked_domains[domain]) }
|
||||
end
|
||||
|
||||
def domain_blocking_map_by_domain(target_domains, account_id)
|
||||
follow_mapping(AccountDomainBlock.where(account_id: account_id, domain: target_domains), :domain)
|
||||
end
|
||||
|
@ -122,8 +116,6 @@ module Account::Interactions
|
|||
|
||||
rel.save! if rel.changed?
|
||||
|
||||
remove_potential_friendship(other_account)
|
||||
|
||||
rel
|
||||
end
|
||||
|
||||
|
@ -137,13 +129,10 @@ module Account::Interactions
|
|||
|
||||
rel.save! if rel.changed?
|
||||
|
||||
remove_potential_friendship(other_account)
|
||||
|
||||
rel
|
||||
end
|
||||
|
||||
def block!(other_account, uri: nil)
|
||||
remove_potential_friendship(other_account)
|
||||
block_relationships.create_with(uri: uri)
|
||||
.find_or_create_by!(target_account: other_account)
|
||||
end
|
||||
|
@ -154,8 +143,6 @@ module Account::Interactions
|
|||
mute.expires_in = duration.zero? ? nil : duration
|
||||
mute.save!
|
||||
|
||||
remove_potential_friendship(other_account)
|
||||
|
||||
# When toggling a mute between hiding and allowing notifications, the mute will already exist, so the find_or_create_by! call will return the existing Mute without updating the hide_notifications attribute. Therefore, we check that hide_notifications? is what we want and set it if it isn't.
|
||||
mute.update!(hide_notifications: notifications) if mute.hide_notifications? != notifications
|
||||
|
||||
|
@ -333,10 +320,4 @@ module Account::Interactions
|
|||
domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id),
|
||||
})
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def remove_potential_friendship(other_account)
|
||||
PotentialFriendshipTracker.remove(id, other_account.id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -139,6 +139,7 @@ module Account::Search
|
|||
[].tap do |properties|
|
||||
properties << 'bot' if bot?
|
||||
properties << 'verified' if fields.any?(&:verified?)
|
||||
properties << 'discoverable' if discoverable?
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ module RelationshipCacheable
|
|||
private
|
||||
|
||||
def remove_relationship_cache
|
||||
Rails.cache.delete("relationship:#{account_id}:#{target_account_id}")
|
||||
Rails.cache.delete("relationship:#{target_account_id}:#{account_id}")
|
||||
Rails.cache.delete(['relationship', account_id, target_account_id])
|
||||
Rails.cache.delete(['relationship', target_account_id, account_id])
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ module Remotable
|
|||
def remotable_attachment(attachment_name, limit, suppress_errors: true, download_on_assign: true, attribute_name: nil)
|
||||
attribute_name ||= :"#{attachment_name}_remote_url"
|
||||
|
||||
define_method("download_#{attachment_name}!") do |url = nil|
|
||||
define_method(:"download_#{attachment_name}!") do |url = nil|
|
||||
url ||= self[attribute_name]
|
||||
|
||||
return if url.blank?
|
||||
|
@ -24,29 +24,29 @@ module Remotable
|
|||
Request.new(:get, url).perform do |response|
|
||||
raise Mastodon::UnexpectedResponseError, response unless (200...300).cover?(response.code)
|
||||
|
||||
public_send("#{attachment_name}=", ResponseWithLimit.new(response, limit))
|
||||
public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit))
|
||||
end
|
||||
rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e
|
||||
Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" }
|
||||
public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present?
|
||||
public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present?
|
||||
raise e unless suppress_errors
|
||||
rescue Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Paperclip::Error, Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => e
|
||||
Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" }
|
||||
public_send("#{attachment_name}=", nil) if public_send("#{attachment_name}_file_name").present?
|
||||
public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present?
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
define_method("#{attribute_name}=") do |url|
|
||||
return if self[attribute_name] == url && public_send("#{attachment_name}_file_name").present?
|
||||
define_method(:"#{attribute_name}=") do |url|
|
||||
return if self[attribute_name] == url && public_send(:"#{attachment_name}_file_name").present?
|
||||
|
||||
self[attribute_name] = url if has_attribute?(attribute_name)
|
||||
|
||||
public_send("download_#{attachment_name}!", url) if download_on_assign
|
||||
public_send(:"download_#{attachment_name}!", url) if download_on_assign
|
||||
end
|
||||
|
||||
alias_method("reset_#{attachment_name}!", "download_#{attachment_name}!")
|
||||
alias_method(:"reset_#{attachment_name}!", "download_#{attachment_name}!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -94,7 +94,7 @@ class CustomFilter < ApplicationRecord
|
|||
filters_hash.values.map { |cache| [cache.delete(:filter), cache] }
|
||||
end.to_a
|
||||
|
||||
active_filters.select { |custom_filter, _| !custom_filter.expired? }
|
||||
active_filters.reject { |custom_filter, _| custom_filter.expired? }
|
||||
end
|
||||
|
||||
def self.apply_cached_filters(cached_filters, status, following: false)
|
||||
|
|
|
@ -44,10 +44,10 @@ class Follow < ApplicationRecord
|
|||
|
||||
before_validation :set_uri, only: :create
|
||||
after_create :increment_cache_counters
|
||||
after_create :invalidate_hash_cache
|
||||
after_destroy :remove_endorsements
|
||||
after_destroy :decrement_cache_counters
|
||||
after_destroy :invalidate_hash_cache
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
after_commit :invalidate_hash_cache
|
||||
|
||||
private
|
||||
|
||||
|
@ -74,4 +74,8 @@ class Follow < ApplicationRecord
|
|||
|
||||
Rails.cache.delete("followers_hash:#{target_account_id}:#{account.synchronization_uri_prefix}")
|
||||
end
|
||||
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,12 +17,9 @@ class FollowRecommendationFilter
|
|||
|
||||
def results
|
||||
if params['status'] == 'suppressed'
|
||||
Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a
|
||||
Account.includes(:account_stat).joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc)
|
||||
else
|
||||
account_ids = redis.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i)
|
||||
accounts = Account.where(id: account_ids).index_by(&:id)
|
||||
|
||||
account_ids.filter_map { |id| accounts[id] }
|
||||
Account.includes(:account_stat).joins(:follow_recommendation).merge(FollowRecommendation.localized(@language).order(rank: :desc))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
26
app/models/follow_recommendation_mute.rb
Normal file
26
app/models/follow_recommendation_mute.rb
Normal file
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: follow_recommendation_mutes
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# account_id :bigint(8) not null
|
||||
# target_account_id :bigint(8) not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
class FollowRecommendationMute < ApplicationRecord
|
||||
belongs_to :account
|
||||
belongs_to :target_account, class_name: 'Account'
|
||||
|
||||
validates :target_account, uniqueness: { scope: :account_id }
|
||||
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
|
||||
private
|
||||
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
end
|
|
@ -11,19 +11,5 @@
|
|||
#
|
||||
|
||||
class FollowRecommendationSuppression < ApplicationRecord
|
||||
include Redisable
|
||||
|
||||
belongs_to :account
|
||||
|
||||
after_commit :remove_follow_recommendations, on: :create
|
||||
|
||||
private
|
||||
|
||||
def remove_follow_recommendations
|
||||
redis.pipelined do |pipeline|
|
||||
I18n.available_locales.each do |locale|
|
||||
pipeline.zrem("follow_recommendations:#{locale}", account_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -45,10 +45,15 @@ class FollowRequest < ApplicationRecord
|
|||
end
|
||||
|
||||
before_validation :set_uri, only: :create
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
|
||||
private
|
||||
|
||||
def set_uri
|
||||
self.uri = ActivityPub::TagManager.instance.generate_uri_for(self) if uri.nil?
|
||||
end
|
||||
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -118,7 +118,7 @@ class Form::AdminSettings
|
|||
|
||||
KEYS.each do |key|
|
||||
define_method(key) do
|
||||
return instance_variable_get("@#{key}") if instance_variable_defined?("@#{key}")
|
||||
return instance_variable_get(:"@#{key}") if instance_variable_defined?(:"@#{key}")
|
||||
|
||||
stored_value = if UPLOAD_KEYS.include?(key)
|
||||
SiteUpload.where(var: key).first_or_initialize(var: key)
|
||||
|
@ -130,12 +130,12 @@ class Form::AdminSettings
|
|||
Setting.public_send(key)
|
||||
end
|
||||
|
||||
instance_variable_set("@#{key}", stored_value)
|
||||
instance_variable_set(:"@#{key}", stored_value)
|
||||
end
|
||||
end
|
||||
|
||||
UPLOAD_KEYS.each do |key|
|
||||
define_method("#{key}=") do |file|
|
||||
define_method(:"#{key}=") do |file|
|
||||
value = public_send(key)
|
||||
value.file = file
|
||||
rescue Mastodon::DimensionsValidationError => e
|
||||
|
@ -150,13 +150,13 @@ class Form::AdminSettings
|
|||
return false unless errors.empty? && valid?
|
||||
|
||||
KEYS.each do |key|
|
||||
next unless instance_variable_defined?("@#{key}")
|
||||
next unless instance_variable_defined?(:"@#{key}")
|
||||
|
||||
if UPLOAD_KEYS.include?(key)
|
||||
public_send(key).save
|
||||
else
|
||||
setting = Setting.where(var: key).first_or_initialize(var: key)
|
||||
setting.update(value: typecast_value(key, instance_variable_get("@#{key}")))
|
||||
setting.update(value: typecast_value(key, instance_variable_get(:"@#{key}")))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -177,9 +177,9 @@ class Form::AdminSettings
|
|||
|
||||
def validate_site_uploads
|
||||
UPLOAD_KEYS.each do |key|
|
||||
next unless instance_variable_defined?("@#{key}")
|
||||
next unless instance_variable_defined?(:"@#{key}")
|
||||
|
||||
upload = instance_variable_get("@#{key}")
|
||||
upload = instance_variable_get(:"@#{key}")
|
||||
next if upload.valid?
|
||||
|
||||
upload.errors.each do |error|
|
||||
|
|
|
@ -43,14 +43,19 @@ class Form::Import
|
|||
validate :validate_data
|
||||
|
||||
def guessed_type
|
||||
return :muting if csv_headers_match?('Hide notifications')
|
||||
return :following if csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages')
|
||||
return :following if file_name_matches?('follows') || file_name_matches?('following_accounts')
|
||||
return :blocking if file_name_matches?('blocks') || file_name_matches?('blocked_accounts')
|
||||
return :muting if file_name_matches?('mutes') || file_name_matches?('muted_accounts')
|
||||
return :domain_blocking if file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains')
|
||||
return :bookmarks if file_name_matches?('bookmarks')
|
||||
return :lists if file_name_matches?('lists')
|
||||
if csv_headers_match?('Hide notifications') || file_name_matches?('mutes') || file_name_matches?('muted_accounts')
|
||||
:muting
|
||||
elsif csv_headers_match?('Show boosts') || csv_headers_match?('Notify on new posts') || csv_headers_match?('Languages') || file_name_matches?('follows') || file_name_matches?('following_accounts')
|
||||
:following
|
||||
elsif file_name_matches?('blocks') || file_name_matches?('blocked_accounts')
|
||||
:blocking
|
||||
elsif file_name_matches?('domain_blocks') || file_name_matches?('blocked_domains')
|
||||
:domain_blocking
|
||||
elsif file_name_matches?('bookmarks')
|
||||
:bookmarks
|
||||
elsif file_name_matches?('lists')
|
||||
:lists
|
||||
end
|
||||
end
|
||||
|
||||
# Whether the uploaded CSV file seems to correspond to a different import type than the one selected
|
||||
|
|
|
@ -23,11 +23,16 @@ class Mute < ApplicationRecord
|
|||
|
||||
validates :account_id, uniqueness: { scope: :target_account_id }
|
||||
|
||||
after_commit :remove_blocking_cache
|
||||
after_commit :invalidate_blocking_cache
|
||||
after_commit :invalidate_follow_recommendations_cache
|
||||
|
||||
private
|
||||
|
||||
def remove_blocking_cache
|
||||
def invalidate_blocking_cache
|
||||
Rails.cache.delete("exclude_account_ids_for:#{account_id}")
|
||||
end
|
||||
|
||||
def invalidate_follow_recommendations_cache
|
||||
Rails.cache.delete("follow_recommendations/#{account_id}")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,8 +5,9 @@ class AccountRelationshipsPresenter
|
|||
:muting, :requested, :requested_by, :domain_blocking,
|
||||
:endorsed, :account_note
|
||||
|
||||
def initialize(account_ids, current_account_id, **options)
|
||||
@account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a.to_i }
|
||||
def initialize(accounts, current_account_id, **options)
|
||||
@accounts = accounts.to_a
|
||||
@account_ids = @accounts.pluck(:id)
|
||||
@current_account_id = current_account_id
|
||||
|
||||
@following = cached[:following].merge(Account.following_map(@uncached_account_ids, @current_account_id))
|
||||
|
@ -16,10 +17,11 @@ class AccountRelationshipsPresenter
|
|||
@muting = cached[:muting].merge(Account.muting_map(@uncached_account_ids, @current_account_id))
|
||||
@requested = cached[:requested].merge(Account.requested_map(@uncached_account_ids, @current_account_id))
|
||||
@requested_by = cached[:requested_by].merge(Account.requested_by_map(@uncached_account_ids, @current_account_id))
|
||||
@domain_blocking = cached[:domain_blocking].merge(Account.domain_blocking_map(@uncached_account_ids, @current_account_id))
|
||||
@endorsed = cached[:endorsed].merge(Account.endorsed_map(@uncached_account_ids, @current_account_id))
|
||||
@account_note = cached[:account_note].merge(Account.account_note_map(@uncached_account_ids, @current_account_id))
|
||||
|
||||
@domain_blocking = domain_blocking_map
|
||||
|
||||
cache_uncached!
|
||||
|
||||
@following.merge!(options[:following_map] || {})
|
||||
|
@ -36,6 +38,31 @@ class AccountRelationshipsPresenter
|
|||
|
||||
private
|
||||
|
||||
def domain_blocking_map
|
||||
target_domains = @accounts.pluck(:domain).compact.uniq
|
||||
blocks_by_domain = {}
|
||||
|
||||
# Fetch from cache
|
||||
cache_keys = target_domains.map { |domain| domain_cache_key(domain) }
|
||||
Rails.cache.read_multi(*cache_keys).each do |key, blocking|
|
||||
blocks_by_domain[key.last] = blocking
|
||||
end
|
||||
|
||||
uncached_domains = target_domains - blocks_by_domain.keys
|
||||
|
||||
# Read uncached values from database
|
||||
AccountDomainBlock.where(account_id: @current_account_id, domain: uncached_domains).pluck(:domain).each do |domain|
|
||||
blocks_by_domain[domain] = true
|
||||
end
|
||||
|
||||
# Write database reads to cache
|
||||
to_cache = uncached_domains.to_h { |domain| [domain_cache_key(domain), blocks_by_domain[domain]] }
|
||||
Rails.cache.write_multi(to_cache, expires_in: 1.day)
|
||||
|
||||
# Return formatted value
|
||||
@accounts.each_with_object({}) { |account, h| h[account.id] = blocks_by_domain[account.domain] }
|
||||
end
|
||||
|
||||
def cached
|
||||
return @cached if defined?(@cached)
|
||||
|
||||
|
@ -47,28 +74,23 @@ class AccountRelationshipsPresenter
|
|||
muting: {},
|
||||
requested: {},
|
||||
requested_by: {},
|
||||
domain_blocking: {},
|
||||
endorsed: {},
|
||||
account_note: {},
|
||||
}
|
||||
|
||||
@uncached_account_ids = []
|
||||
@uncached_account_ids = @account_ids.uniq
|
||||
|
||||
@account_ids.each do |account_id|
|
||||
maps_for_account = Rails.cache.read("relationship:#{@current_account_id}:#{account_id}")
|
||||
|
||||
if maps_for_account.is_a?(Hash)
|
||||
@cached.deep_merge!(maps_for_account)
|
||||
else
|
||||
@uncached_account_ids << account_id
|
||||
end
|
||||
cache_ids = @account_ids.map { |account_id| relationship_cache_key(account_id) }
|
||||
Rails.cache.read_multi(*cache_ids).each do |key, maps_for_account|
|
||||
@cached.deep_merge!(maps_for_account)
|
||||
@uncached_account_ids.delete(key.last)
|
||||
end
|
||||
|
||||
@cached
|
||||
end
|
||||
|
||||
def cache_uncached!
|
||||
@uncached_account_ids.each do |account_id|
|
||||
to_cache = @uncached_account_ids.to_h do |account_id|
|
||||
maps_for_account = {
|
||||
following: { account_id => following[account_id] },
|
||||
followed_by: { account_id => followed_by[account_id] },
|
||||
|
@ -77,12 +99,21 @@ class AccountRelationshipsPresenter
|
|||
muting: { account_id => muting[account_id] },
|
||||
requested: { account_id => requested[account_id] },
|
||||
requested_by: { account_id => requested_by[account_id] },
|
||||
domain_blocking: { account_id => domain_blocking[account_id] },
|
||||
endorsed: { account_id => endorsed[account_id] },
|
||||
account_note: { account_id => account_note[account_id] },
|
||||
}
|
||||
|
||||
Rails.cache.write("relationship:#{@current_account_id}:#{account_id}", maps_for_account, expires_in: 1.day)
|
||||
[relationship_cache_key(account_id), maps_for_account]
|
||||
end
|
||||
|
||||
Rails.cache.write_multi(to_cache, expires_in: 1.day)
|
||||
end
|
||||
|
||||
def domain_cache_key(domain)
|
||||
['exclude_domains', @current_account_id, domain]
|
||||
end
|
||||
|
||||
def relationship_cache_key(account_id)
|
||||
['relationship', @current_account_id, account_id]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,32 +14,7 @@ class InitialStateSerializer < ActiveModel::Serializer
|
|||
has_one :role, serializer: REST::RoleSerializer
|
||||
|
||||
def meta
|
||||
store = {
|
||||
streaming_api_base_url: Rails.configuration.x.streaming_api_base_url,
|
||||
access_token: object.token,
|
||||
locale: I18n.locale,
|
||||
domain: Addressable::IDNA.to_unicode(instance_presenter.domain),
|
||||
title: instance_presenter.title,
|
||||
admin: object.admin&.id&.to_s,
|
||||
search_enabled: Chewy.enabled?,
|
||||
repository: Mastodon::Version.repository,
|
||||
source_url: instance_presenter.source_url,
|
||||
version: instance_presenter.version,
|
||||
limited_federation_mode: Rails.configuration.x.limited_federation_mode,
|
||||
mascot: instance_presenter.mascot&.file&.url,
|
||||
profile_directory: Setting.profile_directory,
|
||||
trends_enabled: Setting.trends,
|
||||
registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode,
|
||||
timeline_preview: Setting.timeline_preview,
|
||||
activity_api_enabled: Setting.activity_api_enabled,
|
||||
single_user_mode: Rails.configuration.x.single_user_mode,
|
||||
trends_as_landing_page: Setting.trends_as_landing_page,
|
||||
status_page_url: Setting.status_page_url,
|
||||
sso_redirect: sso_redirect,
|
||||
dtl_tag: dtl_enabled? ? dtl_tag_name : nil,
|
||||
enable_local_privacy: Setting.enable_public_unlisted_visibility,
|
||||
enable_local_timeline: Setting.enable_local_timeline,
|
||||
}
|
||||
store = default_meta_store
|
||||
|
||||
if object.current_account
|
||||
store[:me] = object.current_account.id.to_s
|
||||
|
@ -133,6 +108,35 @@ class InitialStateSerializer < ActiveModel::Serializer
|
|||
|
||||
private
|
||||
|
||||
def default_meta_store
|
||||
{
|
||||
access_token: object.token,
|
||||
activity_api_enabled: Setting.activity_api_enabled,
|
||||
admin: object.admin&.id&.to_s,
|
||||
domain: Addressable::IDNA.to_unicode(instance_presenter.domain),
|
||||
dtl_tag: dtl_enabled? ? dtl_tag_name : nil,
|
||||
enable_local_privacy: Setting.enable_public_unlisted_visibility,
|
||||
enable_local_timeline: Setting.enable_local_timeline,
|
||||
limited_federation_mode: Rails.configuration.x.limited_federation_mode,
|
||||
locale: I18n.locale,
|
||||
mascot: instance_presenter.mascot&.file&.url,
|
||||
profile_directory: Setting.profile_directory,
|
||||
registrations_open: Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode,
|
||||
repository: Mastodon::Version.repository,
|
||||
search_enabled: Chewy.enabled?,
|
||||
single_user_mode: Rails.configuration.x.single_user_mode,
|
||||
source_url: instance_presenter.source_url,
|
||||
sso_redirect: sso_redirect,
|
||||
status_page_url: Setting.status_page_url,
|
||||
streaming_api_base_url: Rails.configuration.x.streaming_api_base_url,
|
||||
timeline_preview: Setting.timeline_preview,
|
||||
title: instance_presenter.title,
|
||||
trends_as_landing_page: Setting.trends_as_landing_page,
|
||||
trends_enabled: Setting.trends,
|
||||
version: instance_presenter.version,
|
||||
}
|
||||
end
|
||||
|
||||
def object_account_user
|
||||
object.current_account.user
|
||||
end
|
||||
|
|
|
@ -23,6 +23,7 @@ class AccountSearchService < BaseService
|
|||
query: {
|
||||
bool: {
|
||||
must: must_clauses,
|
||||
must_not: must_not_clauses,
|
||||
},
|
||||
},
|
||||
|
||||
|
@ -51,6 +52,10 @@ class AccountSearchService < BaseService
|
|||
end
|
||||
end
|
||||
|
||||
def must_not_clauses
|
||||
[]
|
||||
end
|
||||
|
||||
def should_clauses
|
||||
if @account && !@options[:following] && !@options[:follower]
|
||||
[boost_following_query]
|
||||
|
|
|
@ -36,7 +36,7 @@ class EmojiReactService < BaseService
|
|||
|
||||
create_notification
|
||||
notify_to_followers
|
||||
bump_potential_friendship!
|
||||
increment_statistics
|
||||
write_stream!
|
||||
|
||||
@emoji_reaction
|
||||
|
@ -64,11 +64,8 @@ class EmojiReactService < BaseService
|
|||
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @emoji_reaction.status_id, @emoji_reaction.account_id)
|
||||
end
|
||||
|
||||
def bump_potential_friendship!
|
||||
def increment_statistics
|
||||
ActivityTracker.increment('activity:interactions')
|
||||
return if @emoji_reaction.account.following?(@emoji_reaction.status.account_id)
|
||||
|
||||
PotentialFriendshipTracker.record(@emoji_reaction.account.id, @emoji_reaction.status.account_id, :emoji_reaction)
|
||||
end
|
||||
|
||||
def payload
|
||||
|
|
|
@ -20,7 +20,7 @@ class FavouriteService < BaseService
|
|||
Trends.statuses.register(status)
|
||||
|
||||
create_notification(favourite)
|
||||
bump_potential_friendship(account, status)
|
||||
increment_statistics
|
||||
|
||||
favourite
|
||||
end
|
||||
|
@ -37,11 +37,8 @@ class FavouriteService < BaseService
|
|||
end
|
||||
end
|
||||
|
||||
def bump_potential_friendship(account, status)
|
||||
def increment_statistics
|
||||
ActivityTracker.increment('activity:interactions')
|
||||
return if account.following?(status.account_id)
|
||||
|
||||
PotentialFriendshipTracker.record(account.id, status.account_id, :favourite)
|
||||
end
|
||||
|
||||
def build_json(favourite)
|
||||
|
|
|
@ -280,9 +280,6 @@ class PostStatusService < BaseService
|
|||
return if !@status.reply? || @account.id == @status.in_reply_to_account_id
|
||||
|
||||
ActivityTracker.increment('activity:interactions')
|
||||
return if @account.following?(@status.in_reply_to_account_id)
|
||||
|
||||
PotentialFriendshipTracker.record(@account.id, @status.in_reply_to_account_id, :reply)
|
||||
end
|
||||
|
||||
def status_attributes
|
||||
|
|
|
@ -34,7 +34,7 @@ class ReblogService < BaseService
|
|||
ActivityPub::DistributionWorker.perform_async(reblog.id)
|
||||
|
||||
create_notification(reblog)
|
||||
bump_potential_friendship(account, reblog)
|
||||
increment_statistics
|
||||
|
||||
reblog
|
||||
end
|
||||
|
@ -51,12 +51,8 @@ class ReblogService < BaseService
|
|||
end
|
||||
end
|
||||
|
||||
def bump_potential_friendship(account, reblog)
|
||||
def increment_statistics
|
||||
ActivityTracker.increment('activity:interactions')
|
||||
|
||||
return if account.following?(reblog.reblog.account_id)
|
||||
|
||||
PotentialFriendshipTracker.record(account.id, reblog.reblog.account_id, :reblog)
|
||||
end
|
||||
|
||||
def build_json(reblog)
|
||||
|
|
|
@ -27,7 +27,7 @@ class UpdateAccountService < BaseService
|
|||
|
||||
def authorize_all_follow_requests(account)
|
||||
follow_requests = FollowRequest.where(target_account: account)
|
||||
follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? && reject_straight_follow_domains.exclude?(req.account.domain) }
|
||||
follow_requests = follow_requests.preload(:account).reject { |req| req.account.silenced? || reject_straight_follow_domains.include?(req.account.domain) }
|
||||
AuthorizeFollowWorker.push_bulk(follow_requests, limit: 1_000) do |req|
|
||||
[req.account_id, req.target_account_id]
|
||||
end
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
%p.muted-hint= deletion_request.present? ? t('admin.accounts.suspension_reversible_hint_html', date: content_tag(:strong, l(deletion_request.due_at.to_date))) : t('admin.accounts.suspension_irreversible')
|
||||
= link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsuspend, account)
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account) && account.suspension_origin_remote?
|
||||
- if deletion_request.present?
|
||||
= link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') } if can?(:destroy, account)
|
||||
- if deletion_request.present? && can?(:destroy, account)
|
||||
= link_to t('admin.accounts.delete'), admin_account_path(account.id), method: :delete, class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
- else
|
||||
.action-buttons
|
||||
%div
|
||||
|
@ -15,8 +15,8 @@
|
|||
= link_to t('admin.accounts.warn'), new_admin_account_action_path(account.id, type: 'none'), class: 'button' if can?(:warn, account)
|
||||
- if account.user_disabled?
|
||||
= link_to t('admin.accounts.enable'), enable_admin_account_path(account.id), method: :post, class: 'button' if can?(:enable, account.user)
|
||||
- else
|
||||
= link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button' if can?(:disable, account.user)
|
||||
- elsif can?(:disable, account.user)
|
||||
= link_to t('admin.accounts.disable'), new_admin_account_action_path(account.id, type: 'disable'), class: 'button'
|
||||
- if account.sensitized?
|
||||
= link_to t('admin.accounts.undo_sensitized'), unsensitive_admin_account_path(account.id), method: :post, class: 'button' if can?(:unsensitive, account)
|
||||
- elsif !account.local? || account.user_approved?
|
||||
|
@ -29,13 +29,13 @@
|
|||
- if account.user_pending?
|
||||
= link_to t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, account.user)
|
||||
= link_to t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, account.user)
|
||||
- unless account.user_confirmed?
|
||||
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button' if can?(:confirm, account.user)
|
||||
- if !account.local? || account.user_approved?
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button' if can?(:suspend, account)
|
||||
- if !account.user_confirmed? && can?(:confirm, account.user)
|
||||
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(account.id), method: :post, class: 'button'
|
||||
- if (!account.local? || account.user_approved?) && can?(:suspend, account)
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(account.id, type: 'suspend'), class: 'button'
|
||||
%div
|
||||
- if account.local?
|
||||
- if !account.memorial? && account.user_approved?
|
||||
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, account)
|
||||
- else
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button' if can?(:redownload, account)
|
||||
- if !account.memorial? && account.user_approved? && can?(:memorialize, account)
|
||||
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive'
|
||||
- elsif can?(:redownload, account)
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(account.id), method: :post, class: 'button'
|
||||
|
|
|
@ -47,8 +47,8 @@
|
|||
- else
|
||||
= t 'admin.accounts.security_measures.only_password'
|
||||
%td
|
||||
- if account.user&.two_factor_enabled?
|
||||
= table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete if can?(:disable_2fa, account.user)
|
||||
- if account.user&.two_factor_enabled? && can?(:disable_2fa, account.user)
|
||||
= table_link_to 'unlock', t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(account.user.id), method: :delete
|
||||
- if can?(:reset_password, account.user)
|
||||
%tr
|
||||
%td
|
||||
|
|
|
@ -38,3 +38,5 @@
|
|||
= nothing_here 'nothing-here--under-tabs'
|
||||
- else
|
||||
= render partial: 'account', collection: @accounts, locals: { f: f }
|
||||
|
||||
= paginate @accounts
|
||||
|
|
|
@ -2,61 +2,11 @@
|
|||
|
||||
class Scheduler::FollowRecommendationsScheduler
|
||||
include Sidekiq::Worker
|
||||
include Redisable
|
||||
|
||||
sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i
|
||||
|
||||
# The maximum number of accounts that can be requested in one page from the
|
||||
# API is 80, and the suggestions API does not allow pagination. This number
|
||||
# leaves some room for accounts being filtered during live access
|
||||
SET_SIZE = 100
|
||||
|
||||
def perform
|
||||
# Maintaining a materialized view speeds-up subsequent queries significantly
|
||||
AccountSummary.refresh
|
||||
FollowRecommendation.refresh
|
||||
|
||||
fallback_recommendations = FollowRecommendation.order(rank: :desc).limit(SET_SIZE)
|
||||
|
||||
Trends.available_locales.each do |locale|
|
||||
recommendations = if AccountSummary.safe.filtered.localized(locale).exists? # We can skip the work if no accounts with that language exist
|
||||
FollowRecommendation.localized(locale).order(rank: :desc).limit(SET_SIZE).map { |recommendation| [recommendation.rank, recommendation.account_id] }
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
||||
# Use language-agnostic results if there are not enough language-specific ones
|
||||
missing = SET_SIZE - recommendations.size
|
||||
|
||||
if missing.positive? && fallback_recommendations.size.positive?
|
||||
max_fallback_rank = fallback_recommendations.first.rank || 0
|
||||
|
||||
# Language-specific results should be above language-agnostic ones,
|
||||
# otherwise language-agnostic ones will always overshadow them
|
||||
recommendations.map! { |(rank, account_id)| [rank + max_fallback_rank, account_id] }
|
||||
|
||||
added = 0
|
||||
|
||||
fallback_recommendations.each do |recommendation|
|
||||
next if recommendations.any? { |(_, account_id)| account_id == recommendation.account_id }
|
||||
|
||||
recommendations << [recommendation.rank, recommendation.account_id]
|
||||
added += 1
|
||||
|
||||
break if added >= missing
|
||||
end
|
||||
end
|
||||
|
||||
redis.multi do |multi|
|
||||
multi.del(key(locale))
|
||||
multi.zadd(key(locale), recommendations)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def key(locale)
|
||||
"follow_recommendations:#{locale}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
unless ENV.key?('RAILS_ENV')
|
||||
STDERR.puts 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".'
|
||||
warn 'ERROR: Missing RAILS_ENV environment variable, please set it to "production", "development", or "test".'
|
||||
exit 1
|
||||
end
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ Devise.setup do |config|
|
|||
oidc_options[:client_auth_method] = ENV['OIDC_CLIENT_AUTH_METHOD'] if ENV['OIDC_CLIENT_AUTH_METHOD'] # OPTIONAL (default: basic)
|
||||
scope_string = ENV['OIDC_SCOPE'] if ENV['OIDC_SCOPE'] # NEED
|
||||
scopes = scope_string.split(',')
|
||||
oidc_options[:scope] = scopes.map { |x| x.to_sym }
|
||||
oidc_options[:scope] = scopes.map(&:to_sym)
|
||||
oidc_options[:response_type] = ENV['OIDC_RESPONSE_TYPE'] if ENV['OIDC_RESPONSE_TYPE'] # OPTIONAL (default: code)
|
||||
oidc_options[:response_mode] = ENV['OIDC_RESPONSE_MODE'] if ENV['OIDC_RESPONSE_MODE'] # OPTIONAL (default: query)
|
||||
oidc_options[:display] = ENV['OIDC_DISPLAY'] if ENV['OIDC_DISPLAY'] # OPTIONAL (default: page)
|
||||
|
|
|
@ -188,7 +188,7 @@ SimpleForm.setup do |config|
|
|||
# config.item_wrapper_class = nil
|
||||
|
||||
# How the label text should be generated altogether with the required text.
|
||||
config.label_text = lambda { |label, required, _explicit_label| "#{label} #{required}" }
|
||||
config.label_text = ->(label, required, _explicit_label) { "#{label} #{required}" }
|
||||
|
||||
# You can define the class to use on all labels. Default is nil.
|
||||
# config.label_class = nil
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Rack
|
||||
class Request
|
||||
def trusted_proxy?(ip)
|
||||
if Rails.application.config.action_dispatch.trusted_proxies.nil?
|
||||
super
|
||||
else
|
||||
Rails.application.config.action_dispatch.trusted_proxies.any? { |proxy| proxy === ip }
|
||||
end
|
||||
end
|
||||
end
|
||||
unless Rails.application.config.action_dispatch.trusted_proxies.nil?
|
||||
# Rack is configured with a default collection of trusted proxies
|
||||
# If Rails has been configured to use a specific list, configure
|
||||
# Rack to use this Proc, which enforces the Rails-configured list.
|
||||
Rack::Request.ip_filter = ->(ip) { Rails.application.config.action_dispatch.trusted_proxies.include?(ip) }
|
||||
end
|
||||
|
|
8
config/locales/activerecord.ia.yml
Normal file
8
config/locales/activerecord.ia.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
ia:
|
||||
activerecord:
|
||||
attributes:
|
||||
user:
|
||||
password: Contrasigno
|
||||
user/account:
|
||||
username: Nomine de usator
|
9
config/locales/activerecord.ie.yml
Normal file
9
config/locales/activerecord.ie.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
ie:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Cludent date
|
||||
options: Optiones
|
||||
user:
|
||||
password: Passa-parol
|
59
config/locales/activerecord.lad.yml
Normal file
59
config/locales/activerecord.lad.yml
Normal file
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
lad:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: Limito temporal
|
||||
options: Opsyones
|
||||
user:
|
||||
agreement: Akodro de servisyo
|
||||
email: Adreso de posta elektronika
|
||||
locale: Lingua
|
||||
password: Kod
|
||||
user/account:
|
||||
username: Nombre de uzador
|
||||
user/invite_request:
|
||||
text: Razon
|
||||
errors:
|
||||
models:
|
||||
account:
|
||||
attributes:
|
||||
username:
|
||||
invalid: solo puede kontener letras, shifras i sulinyados
|
||||
reserved: esta rezervado
|
||||
admin/webhook:
|
||||
attributes:
|
||||
url:
|
||||
invalid: no es adreso URL valido
|
||||
doorkeeper/application:
|
||||
attributes:
|
||||
website:
|
||||
invalid: no es adreso URL valido
|
||||
import:
|
||||
attributes:
|
||||
data:
|
||||
malformed: tiene formato yerrado
|
||||
status:
|
||||
attributes:
|
||||
reblog:
|
||||
taken: de publikasyon ya existe
|
||||
user:
|
||||
attributes:
|
||||
email:
|
||||
blocked: uza un prokurador de posta no autorizado
|
||||
unreachable: no parese existir
|
||||
role_id:
|
||||
elevated: no puede ser mas alto ke tu rolo aktual
|
||||
user_role:
|
||||
attributes:
|
||||
permissions_as_keys:
|
||||
dangerous: inkluir permisos ke no son siguros para el rolo de baza
|
||||
elevated: no se puede inkluir permisos kualos no tiene tu rolo aktual
|
||||
own_role: no se puede trokar kon tu rolo aktual
|
||||
position:
|
||||
elevated: no puede ser mas alto ke tu rolo aktual
|
||||
own_role: no se puede trokar kon tu rolo aktual
|
||||
webhook:
|
||||
attributes:
|
||||
events:
|
||||
invalid_permissions: no puedes inkluir evenimientos a los kualos no estas autorizado
|
|
@ -1 +1,23 @@
|
|||
---
|
||||
pa:
|
||||
activerecord:
|
||||
attributes:
|
||||
poll:
|
||||
expires_at: ਆਖਰੀ ਤਾਰੀਖ
|
||||
options: ਚੋਣਾਂ
|
||||
user:
|
||||
agreement: ਸੇਵਾ ਸਮਝੌਤਾ
|
||||
email: ਈਮੇਲ ਪਤਾ
|
||||
locale: ਲੋਕੇਲ
|
||||
password: ਪਾਸਵਰਡ
|
||||
user/account:
|
||||
username: ਵਰਤੋਂਕਾਰ-ਨਾਂ
|
||||
user/invite_request:
|
||||
text: ਕਾਰਨ
|
||||
errors:
|
||||
models:
|
||||
account:
|
||||
attributes:
|
||||
username:
|
||||
invalid: ਸਿਰਫ਼ ਅੱਖਰ, ਅੰਕ ਅਤੇ ਹੇਠਾਂ-ਰੇਖਾ ਹੀ ਹੋੋਣੀ ਚਾਹੀਦੀ ਹੈ
|
||||
reserved: ਰਾਖਵਾਂ ਹੈ
|
||||
|
|
1
config/locales/devise.ia.yml
Normal file
1
config/locales/devise.ia.yml
Normal file
|
@ -0,0 +1 @@
|
|||
ia:
|
30
config/locales/devise.ie.yml
Normal file
30
config/locales/devise.ie.yml
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
ie:
|
||||
devise:
|
||||
failure:
|
||||
invalid: Ínvalid %{authentication_keys} o passa-parol.
|
||||
not_found_in_database: Ínvalid %{authentication_keys} o passa-parol.
|
||||
mailer:
|
||||
email_changed:
|
||||
extra: Si tu ne changeat tui email-adresse, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto.
|
||||
password_change:
|
||||
explanation: Li passa-parol de tui conto ha esset changeat.
|
||||
extra: Si tu ne changeat tui passa-parol, it es probabil que alqui ha ganiat accesse a tui conto. Ples changear tui passa-parol strax o contacter li administrator del servitor si tu ne posse intrar tui conto.
|
||||
subject: 'Mastodon: Passa-parol changeat'
|
||||
title: Passa-parol changeat
|
||||
reset_password_instructions:
|
||||
action: Changear passa-parol
|
||||
explanation: Tu demandat un nov passa-parol por tui conto.
|
||||
extra: Si tu ne demandat to-ci, ples ignorar ti-ci email. Tui passa-parol ne va changear til que tu accessaye li ligament supra e crear un nov.
|
||||
subject: 'Mastodon: Instructiones por reiniciar li passa-parol'
|
||||
title: Reiniciar passa-parol
|
||||
two_factor_disabled:
|
||||
explanation: 2-factor autentication por tui conto ha esset desactivisat. Aperter session nu es possibil solmen per email-adresse e passa-parol.
|
||||
passwords:
|
||||
no_token: Tu ne posse accessar ti-ci págine sin venir de un email pri reiniciar li passa-parol. Si tu ha venit de un email pri reiniciar li passa-parol, ples far cert que tu usat li complet URL providet.
|
||||
send_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email.
|
||||
send_paranoid_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email.
|
||||
updated: Tui passa-parol ha esset changeat successosimen. Tu nu ha apertet session.
|
||||
updated_not_active: Tui passa-parol ha esset changeat successosimen.
|
||||
registrations:
|
||||
signed_up: Benevenit! Tu ha successat registrar te.
|
|
@ -13,7 +13,7 @@ io:
|
|||
locked: Tua konto esas extingita.
|
||||
not_found_in_database: Nejusta %{authentication_keys}.
|
||||
pending: Vua konti ankore kontrolesas.
|
||||
timeout: Tua kunsido expiris. Voluntez rienirar por durar.
|
||||
timeout: Vua kunsido expiris. Voluntez rienirar por avancar.
|
||||
unauthenticated: Tu devas enirar o membreskar por durar.
|
||||
unconfirmed: Tu devas konfirmar tua konto por durar.
|
||||
mailer:
|
||||
|
@ -102,7 +102,7 @@ io:
|
|||
unlocks:
|
||||
send_instructions: Tu recevos retpost-mesajo kun instrucioni por riacendar tua konto pos kelka minuti.
|
||||
send_paranoid_instructions: Se tua retpost-adreso existas en nia datumbazo, tu recevos ligilo por riacendar tua konto per retpost-meajo.
|
||||
unlocked: Tua konto riacendesis senprobleme, tu nun esas enirinta.
|
||||
unlocked: Vua konto desklefagesis senprobleme. Voluntez enirar por avancar.
|
||||
errors:
|
||||
messages:
|
||||
already_confirmed: ja konfirmesis, voluntez probar enirar
|
||||
|
|
115
config/locales/devise.lad.yml
Normal file
115
config/locales/devise.lad.yml
Normal file
|
@ -0,0 +1,115 @@
|
|||
---
|
||||
lad:
|
||||
devise:
|
||||
confirmations:
|
||||
confirmed: Tu adreso de posta elektronika tyene sido konfirmado korektamente.
|
||||
send_instructions: Risiviras una posta elektronika kon instruksyones para konfirmar tu adreso de posta elektronika en unos minutos. Por favor, komprova tu kuti de spam si no risivites esta posta elektronika.
|
||||
send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras una posta elektronika kon instruksyones sobre komo konfirmar tu adreso de posta elektronika en pokos minutos.
|
||||
failure:
|
||||
already_authenticated: Ya te konektates kon tu kuento.
|
||||
inactive: Tu kuento ainda no tyene sido aktivado.
|
||||
invalid: "%{authentication_keys} o kod invalido."
|
||||
last_attempt: Aprova una vez mas antes de ke tu kuento sea blokado.
|
||||
locked: Tu kuento esta blokado.
|
||||
not_found_in_database: Inkorekto %{authentication_keys} o kod.
|
||||
pending: Tu ainda esta basho revizyon.
|
||||
timeout: Tu sesyon tiene kadukado. Por favor konektate kon tu kuento de muevo para kontinuar.
|
||||
unauthenticated: Kale konektarte kon tu kuento o enregistrarte antes de kontinuar.
|
||||
unconfirmed: Tyenes ke konfirmar tu adreso de posta elektronika antes de kontinuar.
|
||||
mailer:
|
||||
confirmation_instructions:
|
||||
action: Verifika tu adreso de posta elektronika
|
||||
action_with_app: Konfirma i volta a %{app}
|
||||
explanation: Tyenes kriyado un kuento en %{host} kon este adreso de posta elektronika. Estas a un solo klik de aktivarlo. Si no fuites tu, por favor ignora esta posta elektronika.
|
||||
explanation_when_pending: Tienes solisitado una envitasyon a %{host} kon este adreso de posta elektronika. Una vez ke konfirmes tu adreso de posta elektronika, revizaremos tu solisitud. Puedes konektarte kon tu kuento para trokar tus datos o supremir tu kuento, pero no puedes akseder a la majorita de las funciones hasta ke tu kuento sea achetado. Si tu solisitud es refuzada, tus datos seran supremidos, por lo ke no ay menester de dinguna aksyon adicional por tu parte. Si no fuites tu, por favor ignora esta posta elektronika.
|
||||
extra_html: Por favor, reviza <a href="%{terms_path}">las reglas del sirvidor</a> i <a href="%{policy_path}">muestros terminos de sirvisyo</a>.
|
||||
subject: 'Mastodon: Instruksyones de konfirmasyon para %{instance}'''
|
||||
title: Verifika tu adreso de posta elektronika
|
||||
email_changed:
|
||||
explanation: 'La posta elektronika para tu kuento esta siendo trokado a:'
|
||||
extra: Si no tienes trokado tu posta elektronika, es probavle ke algun aya konsigido akseso a tu kuento. Por favor troka tu kod inmediatamente o kontakta al administrador de la instansya si no puedes konektarte kon tu kuento.
|
||||
subject: 'Mastodon: Posta elektronika trokada'
|
||||
title: Muevo adreso de posta elektronika
|
||||
password_change:
|
||||
explanation: El kod de tu kuento tyene sido trokado.
|
||||
extra: Si no tienes trokado tu kod. es probavle ke algun a konsigido akseso a tu kuento. Por favor troka tu kod inmediatamente o kontakta al administrador de la instansya si no puedes konektarte kon tu kuento.
|
||||
subject: 'Mastodon: Kod trokado'
|
||||
title: Kod trokado
|
||||
reconfirmation_instructions:
|
||||
explanation: Konfirma el muevo adreso para trokar tu posta elektronika.
|
||||
extra: Si no inisyates este trokamiento, por favor ignora esta posta. Este adreso de posta elektronika para el kuento de Mastodon no trokara asta ke aksedas al atadijo arriva.
|
||||
subject: 'Mastodon: Konfirma posta elektronika para %{instance}'
|
||||
title: Verifika tu adreso de posta elektronika
|
||||
reset_password_instructions:
|
||||
action: Troka el kod
|
||||
explanation: Solisitates un muevo kod para tu kuento.
|
||||
extra: Si no solisitates esto, por favor ignora esta posta. Tu kod no trokara asta ke tu aksedas al atadijo arriva i kriyes un muevo.
|
||||
subject: 'Mastodon: Instruksyones para reinisyar kod'
|
||||
title: Reinisyar kod
|
||||
two_factor_disabled:
|
||||
explanation: La autentifikasyon de dos pasos para tu kuento a sido inkapasitada. Agora puedes konektarte solamente uzando el adreso de posta elektronika i el kod.
|
||||
subject: 'Mastodon: La autentifikasyon de dos pasos esta inkapasitada'
|
||||
title: Autentifikasyon 2FA inkapasitada
|
||||
two_factor_enabled:
|
||||
explanation: La autentifikasyon de dos pasos para tu kuento a sido kapasitada. Se rekiere un token djenerado por la aplikasyon TOTP konektada para entrar.
|
||||
subject: 'Mastodon: La autentifikasyon de dos pasos esta kapasitada'
|
||||
title: Autentifikasyon 2FA aktivada
|
||||
two_factor_recovery_codes_changed:
|
||||
explanation: Los kodiches de rekuperasyon previos tienen sido invalidados i se djeneraron kodiches muevos.
|
||||
subject: 'Mastodon: Los kodiches de rekuperasyon de dos pasos fueron rejenerados'
|
||||
title: Kodiches de rekuperasyon 2FA trokados
|
||||
unlock_instructions:
|
||||
subject: 'Mastodon: Instruksyones para dezblokar'
|
||||
webauthn_credential:
|
||||
added:
|
||||
explanation: La sigiente yave de sigurita tiene sido adjustada a tu kuento
|
||||
subject: 'Mastodon: Mueva yave de sigurita'
|
||||
title: Se tiene adjustado una mueva yave de sigurita
|
||||
deleted:
|
||||
explanation: La sigiente yave de sigurita a sido supremida de tu kuento
|
||||
subject: 'Mastodon: Yave de sigurita supremida'
|
||||
title: Una de tus yaves de sigurita tiene sido supremida
|
||||
webauthn_disabled:
|
||||
explanation: La autentifikasyon kon yaves de sigurita a sido inkapasitada para tu kuento. Agora el inisyo de sesyon solo es posivle utilizando el token djeenerado por la aplikasyon TOTP konektada.
|
||||
subject: 'Mastodon: autentifikasyon kon yaves de sigurita inkapasitada'
|
||||
title: Yaves de sigurita inkapasitadas
|
||||
webauthn_enabled:
|
||||
explanation: La autentifikasyon kon yave de sigurita a sido kapasitada para tu kuento. Agora tu yave de sigurita puede ser utilizada para inisyar sesyon.
|
||||
subject: 'Mastodon: Autentifikasyon de yave de sigurita aktivada'
|
||||
title: Yaves de sigurita kapasitadas
|
||||
omniauth_callbacks:
|
||||
failure: No se te pudo autentifikar dizde %{kind} porke “%{reason}”.
|
||||
success: Autentifikado djustamente dizde el kuento de %{kind}.
|
||||
passwords:
|
||||
no_token: No puedes akseder a esta pajina si no vienes dizde una posta elektronika de restablesimyento de kod. Si vienes dizde una posta elektronika de restablesimyento de kod, por favor asigurate de utilizar el URL kompleto embiado.
|
||||
send_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
|
||||
send_paranoid_instructions: Si tu adreso de posta elektronika existe en muestra baza de datos, risiviras un atadijo de rekuperasyon de kod en tu adreso de posta elektronika en pokos minutos. Por favor, komprova tu kuti de posta no deseado si no risives akeya posta elektronika.
|
||||
updated: Tu kod a sido trokado kon reusho. Tinenes entrado en kuento.
|
||||
updated_not_active: Tu kod se tiene trokado kon reusho.
|
||||
registrations:
|
||||
destroyed: Tu kuento a sido efasado kon reusho. Asperamos verte de muevo pronto.
|
||||
signed_up: Bienvenido! Te tienes enrejistrado djustamente.
|
||||
signed_up_but_inactive: Te tienes enrejistrado kon reusho. Entanto, no se pudio inisyar sesyon porke tu kuento ainda no esta aktivado.
|
||||
signed_up_but_locked: Te tienes enrejistrado kon reusho. Entanto, no pudites konektarte kon tu kuento porke tu kuento esta blokado.
|
||||
signed_up_but_pending: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Dempues de klikar en el atadijo, revizaremos tu solisitud. Seras avizado si se acheta.
|
||||
signed_up_but_unconfirmed: Un mesaj kon un atadijo de konfirmasyon a sido enviado a tu adreso de posta elektronika. Por favor, sigue el atadijo para aktivar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
|
||||
update_needs_confirmation: Tienes aktualizado tu kuento kon reusho, pero kale verifikar tu muevo adreso de posta elektronika. Por favor, komprova tu posta elektronika i sige el atadijo de konfirmasyon para konfirmar tu muevo adreso de posta elektronika. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
|
||||
updated: Tu kuento se aktualizo kon reusho.
|
||||
sessions:
|
||||
already_signed_out: Salites del kuento kon reusho.
|
||||
signed_in: Konektates kon tu kuento kon reusho.
|
||||
signed_out: Salites del kuento kon reusho.
|
||||
unlocks:
|
||||
send_instructions: En unos minutos risiviras una posta elektronika kon instruksyones para dezblokar tu kuento. Por favor, komprova tu kuti de posta spam si no risives akeya posta elektronika.
|
||||
send_paranoid_instructions: Si tu kuento existe, en unos minutos risiviras una posta elektronika kon instruksyones para dezblokarlo. Por favor, reviza tu kuti de posta spam si no risives akeya posta elektronika.
|
||||
unlocked: Tu kuento fue dezblokado kon reusho. Por favor, konektate kon tu kuento para kontinuar.
|
||||
errors:
|
||||
messages:
|
||||
already_confirmed: ya estaba konfirmado, por favor aprova konektarte kon tu kuento
|
||||
confirmation_period_expired: nesesita konfirmarse dentro de %{period}, por favor, solisita una mueva
|
||||
expired: tiene kadukado, por favor solisita una mueva
|
||||
not_found: no topado
|
||||
not_locked: no estava blokado
|
||||
not_saved:
|
||||
one: '1 yerro impidio ke este %{resource} se guadrase:'
|
||||
other: "%{count} yerros impidieron ke este %{resource} se guadrase:"
|
|
@ -1 +1,18 @@
|
|||
---
|
||||
pa:
|
||||
devise:
|
||||
confirmations:
|
||||
confirmed: ਤੁਹਾਡੇ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਨੂੰ ਕਾਮਯਾਬੀ ਨਾਲ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ ਹੈ।
|
||||
failure:
|
||||
inactive: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਸਰਗਰਮ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।
|
||||
invalid: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ।
|
||||
last_attempt: ਤੁਹਾਡੇ ਖਾਤੇ ਦੇ ਲਾਕ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਹੋਰ ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।
|
||||
locked: ਤੁਹਾਡਾ ਖਾਤਾ ਲਾਕ ਹੋ ਗਿਆ ਹੈ।
|
||||
not_found_in_database: ਗਲਤ %{authentication_keys} ਜਾਂ ਪਾਸਵਰਡ ਹੈ।
|
||||
pending: ਤੁਹਾਡਾ ਖਾਤਾ ਹਾਲੇ ਵੀ ਪੜਤਾਲ ਅਧੀਨ ਹੈ।
|
||||
timeout: ਤੁਹਾਡੇ ਸ਼ੈਸ਼ਨ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਫੇਰ ਲਾਗਇਨ ਕਰੋ।
|
||||
unauthenticated: ਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਜਾਂ ਸਾਈਨ ਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।
|
||||
sessions:
|
||||
already_signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ।
|
||||
signed_in: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਇਨ ਕੀਤਾ।
|
||||
signed_out: ਕਾਮਯਾਬੀ ਨਾਲ ਸਾਈਨ ਆਉਟ ਕੀਤਾ।
|
||||
|
|
1
config/locales/doorkeeper.ia.yml
Normal file
1
config/locales/doorkeeper.ia.yml
Normal file
|
@ -0,0 +1 @@
|
|||
ia:
|
11
config/locales/doorkeeper.ie.yml
Normal file
11
config/locales/doorkeeper.ie.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
ie:
|
||||
doorkeeper:
|
||||
grouped_scopes:
|
||||
title:
|
||||
follow: Seques, silentias e bloccas
|
||||
mutes: Silentias
|
||||
scopes:
|
||||
read:mutes: vider tui silentias
|
||||
write:conversations: silentiar e deleter conversationes
|
||||
write:mutes: silentiar persones e conversationes
|
|
@ -122,12 +122,14 @@ io:
|
|||
admin/accounts: Administrar di konti
|
||||
admin/all: Omna administrofuncioni
|
||||
admin/reports: Administro di raporti
|
||||
all: Kompleta aceso a vua Mastodon-konto
|
||||
blocks: Restriktita
|
||||
bookmarks: Libromarki
|
||||
conversations: Konversi
|
||||
crypto: Intersequanta chifro
|
||||
favourites: Favoriziti
|
||||
filters: Filtrili
|
||||
follow: Sequati, silencigati e blokusati
|
||||
follows: Sequati
|
||||
lists: Listi
|
||||
media: Mediatachaji
|
||||
|
|
195
config/locales/doorkeeper.lad.yml
Normal file
195
config/locales/doorkeeper.lad.yml
Normal file
|
@ -0,0 +1,195 @@
|
|||
---
|
||||
lad:
|
||||
activerecord:
|
||||
attributes:
|
||||
doorkeeper/application:
|
||||
name: Nombre de aplikasyon
|
||||
redirect_uri: URI para readreso
|
||||
scopes: Ambitos
|
||||
website: Sitio internetiko
|
||||
errors:
|
||||
models:
|
||||
doorkeeper/application:
|
||||
attributes:
|
||||
redirect_uri:
|
||||
fragment_present: no puede kontener un fragmento.
|
||||
invalid_uri: deve ser un URI valido.
|
||||
relative_uri: deve ser un URI asoluto.
|
||||
secured_uri: deve ser un URI de HTTPS/SSL.
|
||||
doorkeeper:
|
||||
applications:
|
||||
buttons:
|
||||
authorize: Autoriza
|
||||
cancel: Anula
|
||||
destroy: Destruye
|
||||
edit: Edita
|
||||
submit: Embia
|
||||
confirmations:
|
||||
destroy: Estas siguro?
|
||||
edit:
|
||||
title: Edita aplikasyon
|
||||
form:
|
||||
error: Atyo! Komprova tu formulario
|
||||
help:
|
||||
native_redirect_uri: Utiliza %{native_redirect_uri} para provas lokalas
|
||||
redirect_uri: Uza una linya por URI
|
||||
scopes: Separa los ambitos kon espasyos. Deshalo en blanko para kulanear los ambitos predeterminados.
|
||||
index:
|
||||
application: Aplikasyon
|
||||
callback_url: URL de callback
|
||||
delete: Efasa
|
||||
empty: No tienes aplikasyones.
|
||||
name: Nombre
|
||||
new: Mueva aplikasyon
|
||||
scopes: Ambitos
|
||||
show: Amostra
|
||||
title: Tus aplikasyones
|
||||
new:
|
||||
title: Mueva aplikasyon
|
||||
show:
|
||||
actions: Aksyones
|
||||
application_id: Yave de mushteri
|
||||
callback_urls: URLs de callback
|
||||
scopes: Ambitos
|
||||
secret: Mushteri sekreto
|
||||
title: 'Aplikasyon: %{name}'
|
||||
authorizations:
|
||||
buttons:
|
||||
authorize: Autoriza
|
||||
deny: Dezautoriza
|
||||
error:
|
||||
title: Un yerro tiene afitado
|
||||
new:
|
||||
prompt_html: "%{client_name} kere permiso para akseder tu kuento. Es una aplikasyon de terseros. <strong>Si no konfias en eya, no deverias autorizarla.</strong>"
|
||||
review_permissions: Reviza permisos
|
||||
title: Autorizasyon rekerida
|
||||
show:
|
||||
title: Kopia este kodiche de autorizasyon i apegalo en la aplikasyon.
|
||||
authorized_applications:
|
||||
buttons:
|
||||
revoke: Revoka
|
||||
confirmations:
|
||||
revoke: Estas siguro?
|
||||
index:
|
||||
authorized_at: Autorizado el %{date}
|
||||
description_html: Estas son las aplikasyones ke pueden akseder tu kuento uzando el API. Si ay aplikasyones aki las kualas no rekoneses, o unas ke no se komporten bien, puedes revokar sus akseso.
|
||||
last_used_at: Ultimo uzo el %{date}
|
||||
never_used: Nunkua uzado
|
||||
scopes: Permisos
|
||||
superapp: Interno
|
||||
title: Tus aplikasyones autorizadas
|
||||
errors:
|
||||
messages:
|
||||
access_denied: El patron del rekurso o el sirvidor de autorizasyon refuzo tu solisitud.
|
||||
credential_flow_not_configured: Las kredensyalas de kod del patron del rekurso no funksyonan porke Doorkeeper.configure.resource_owner_from_credentials no esta konfigurado.
|
||||
invalid_client: La autentifikasyon del mushteri no reushida porke el mushteri no es konesido, no ay autentifikasyon del mushteri inkluyida, o el metodo de autentifikasyon no es suportada.
|
||||
invalid_grant: La konsesyon de autorizasyon ofresida es invalida, kadukada, revokada, no koensida kon el URI de readreso utilizado en la solisitud de autorizasyon, o fue emitida para otro mushteri.
|
||||
invalid_redirect_uri: El URI de readreso inkluydo no es valido.
|
||||
invalid_request:
|
||||
missing_param: 'Parametro rekerido no topado: %{value}.'
|
||||
request_not_authorized: Solisitud deve ser autorizada. Parametro rekerido para autorizar la solisitud no topado o no valido.
|
||||
unknown: La solisitud no tiene un parametro rekerido, inkluye una valuta de parametro no suportada o es yerrado de otra forma.
|
||||
invalid_resource_owner: Las kredensyalas de patron del rekurso no son validas o patron del rekurso no topado
|
||||
invalid_scope: El ambito pedido es invalido, no konesido o yerrado.
|
||||
invalid_token:
|
||||
expired: El token de akseso tiene kadukado
|
||||
revoked: El token de akseso fue revokado
|
||||
unknown: El token de akseso no es valido
|
||||
resource_owner_authenticator_not_configured: El patron del rekurso no topado porke Doorkeeper.configure.resource_owner_authenticator no esta konfigurado.
|
||||
server_error: El sirvidor de autorizasyon topo una kondisyon no ekspektada ke no le permite kumplir kon la solisitud.
|
||||
temporarily_unavailable: El sirvidor de autorizasyon agora no puede realizar la solisitud porke el sirvidor esta sobrekargado o basho mantenimiento.
|
||||
unauthorized_client: El mushteri no esta autorizado para realizar esta solisitud uzando este metodo.
|
||||
unsupported_grant_type: El tipo de konsesyon de autorizasyon no esta suportado por el sirvidor de autentifikasyon.
|
||||
unsupported_response_type: El sirvidor de autorizasyon no suporta este tipo de repuesta.
|
||||
flash:
|
||||
applications:
|
||||
create:
|
||||
notice: Aplikasyon kriyada.
|
||||
destroy:
|
||||
notice: Aplikasyon efasada.
|
||||
update:
|
||||
notice: Aplikasyon aktualizada.
|
||||
authorized_applications:
|
||||
destroy:
|
||||
notice: Aplikasyon revokada.
|
||||
grouped_scopes:
|
||||
access:
|
||||
read: Akseso solo de meldar
|
||||
read/write: Akseso de meldar i eskrivir
|
||||
write: Akseso solo de eskrivir
|
||||
title:
|
||||
accounts: Kuentos
|
||||
admin/accounts: Administrasyon de kuentos
|
||||
admin/all: Todas las funksyones administrativas
|
||||
admin/reports: Administrasyon de raportos
|
||||
all: Akseso total a tu kuento de Mastodon
|
||||
blocks: Blokos
|
||||
bookmarks: Markadores
|
||||
conversations: Konversasyones
|
||||
crypto: Shifrasyon de lado a lado
|
||||
favourites: Favoritos
|
||||
filters: Filtros
|
||||
follow: Segimientos, silensiasyones i blokos
|
||||
follows: Segimientos
|
||||
lists: Listas
|
||||
media: Aneksos de multimedia
|
||||
mutes: Silensiasyones
|
||||
notifications: Avizos
|
||||
push: Avizos arrepushados
|
||||
reports: Raportos
|
||||
search: Bushkeda
|
||||
statuses: Publikasyones
|
||||
layouts:
|
||||
admin:
|
||||
nav:
|
||||
applications: Publikasyones
|
||||
oauth2_provider: Prokurador de OAuth2
|
||||
application:
|
||||
title: Autorizasyon OAuth rekerida
|
||||
scopes:
|
||||
admin:read: meldar todos los datos en el sirvidor
|
||||
admin:read:accounts: meldar informasyon sensivle en todos los kuentos
|
||||
admin:read:canonical_email_blocks: meldar informasyon sensivle de todos blokos kanonikos de posta
|
||||
admin:read:domain_allows: meldar informasyon sensivle de todos los domenos permitidos
|
||||
admin:read:domain_blocks: meldar informasyon sensivle de todos los blokos de domeno
|
||||
admin:read:email_domain_blocks: meldar informasyon sensivle de todos los blokos de domenos de posta
|
||||
admin:read:ip_blocks: meldar informasyon sensivle de todos los blokos de IP
|
||||
admin:read:reports: meldar informasyon sensivle de todos los raportos i kuentos raportados
|
||||
admin:write: modifikar todos los datos en el sirvidor
|
||||
admin:write:accounts: fazer aksyones de moderasyon en kuentos
|
||||
admin:write:canonical_email_blocks: fazer aksyones de moderasyon en blokos kanonikos de posta
|
||||
admin:write:domain_allows: fazer aksyones de moderasyon en domenos permitidos
|
||||
admin:write:domain_blocks: fazer aksyones de moderasyon en blokos de domeno
|
||||
admin:write:email_domain_blocks: fazer aksyones de moderasyon en blokos de domenos de posta
|
||||
admin:write:ip_blocks: fazer aksyones de moderasyon en blokos de IP
|
||||
admin:write:reports: fazer aksyones de moderasyon en raportos
|
||||
crypto: kulanear shifrasyon de lado a lado
|
||||
follow: modifikar relasyones de kuentos
|
||||
push: risivir tus avizos arrepushados
|
||||
read: meldar todos tus datos de kuento
|
||||
read:accounts: ver enformasyon de kuentos
|
||||
read:blocks: ver tus blokos
|
||||
read:bookmarks: ver tus markadores
|
||||
read:favourites: ver ke te plaze
|
||||
read:filters: ver tus filtros
|
||||
read:follows: ver a ken siges
|
||||
read:lists: ver tus listas
|
||||
read:mutes: ver tus silensiasyones
|
||||
read:notifications: ver tus avizos
|
||||
read:reports: ver tus raportos
|
||||
read:search: bushkar en tu nombre
|
||||
read:statuses: ver todas las publikasyones
|
||||
write: modifikar todos los datos de tu kuento
|
||||
write:accounts: modifikar tu profil
|
||||
write:blocks: blokar kuentos i domenos
|
||||
write:bookmarks: markar publikasyones
|
||||
write:conversations: silensyar i efasar konversasyones
|
||||
write:favourites: indikar ke publikasyones te plazen
|
||||
write:filters: kriyar filtros
|
||||
write:follows: segir a djente
|
||||
write:lists: kriyar listas
|
||||
write:media: kargar dosyas multimedia
|
||||
write:mutes: silensyar a djente i konversasyones
|
||||
write:notifications: alimpiar tus avizos
|
||||
write:reports: raportar a otras personas
|
||||
write:statuses: publikar publikasyones
|
|
@ -1 +1,85 @@
|
|||
---
|
||||
pa:
|
||||
activerecord:
|
||||
attributes:
|
||||
doorkeeper/application:
|
||||
name: ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਨਾਂ
|
||||
website: ਐਪਲੀਕੇਸ਼ਨ ਵੈੱਬਸਾਈਟ
|
||||
doorkeeper:
|
||||
applications:
|
||||
buttons:
|
||||
authorize: ਪਰਮਾਣਿਤ
|
||||
cancel: ਰੱਦ ਕਰੋ
|
||||
destroy: ਖਾਰਜ
|
||||
edit: ਸੋਧੋ
|
||||
submit: ਭੇਜੋ
|
||||
confirmations:
|
||||
destroy: ਪੱਕਾ?
|
||||
edit:
|
||||
title: ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਸੋਧੋ
|
||||
form:
|
||||
error: ਓਹ ਹੋ! ਸੰਭਾਵਿਤ ਗਲਤੀਆਂ ਲਈ ਆਪਣੇ ਫਾਰਮ ਦੀ ਜਾਂਚ ਕਰੋ
|
||||
index:
|
||||
application: ਐਪਲੀਕੇਸ਼ਨ
|
||||
callback_url: ਕਾਲਬੈਕ URL
|
||||
delete: ਹਟਾਓ
|
||||
empty: ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ।
|
||||
name: ਨਾਂ
|
||||
new: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ
|
||||
scopes: ਸਕੋਪ
|
||||
show: ਵੇਖਾਓ
|
||||
title: ਤੁਹਾਡੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ
|
||||
new:
|
||||
title: ਨਵੀਂ ਐਪਲੀਕੇਸ਼ਨ
|
||||
show:
|
||||
actions: ਕਾਰਵਾਈਆਂ
|
||||
application_id: ਕਲਾਈਂਟ ਕੁੰਜੀ
|
||||
callback_urls: ਕਾਲਬੈਕ URL
|
||||
scopes: ਸਕੋਪ
|
||||
secret: ਕਲਾਈਂਟ ਭੇਤ
|
||||
title: 'ਐਪਲੀਕੇਸ਼ਨ: %{name}'
|
||||
authorizations:
|
||||
buttons:
|
||||
authorize: ਪਰਮਾਣਿਤ
|
||||
deny: ਇਨਕਾਰ ਕਰੋ
|
||||
error:
|
||||
title: ਗਲਤੀ ਆਈ ਹੈ
|
||||
new:
|
||||
review_permissions: ਇਜਾਜ਼ਤਾਂ ਦੀ ਪੜਤਾਲ ਕਰੋ
|
||||
title: ਪਰਮਾਣਕਿਤਾ ਚਾਹੀਦੀ ਹੈ
|
||||
authorized_applications:
|
||||
buttons:
|
||||
revoke: ਮਨਸੂਖ ਕਰੋ
|
||||
confirmations:
|
||||
revoke: ਪੱਕਾ?
|
||||
index:
|
||||
authorized_at: "%{date} ਨੂੰ ਪਰਮਾਣਿਤ ਕੀਤਾ"
|
||||
last_used_at: "%{date} ਨੂੰ ਆਖਰੀ ਵਾਰ ਵਰਤਿਆ"
|
||||
never_used: ਕਦੀ ਨਹੀਂ ਵਰਤਿਆ
|
||||
scopes: ਇਜਾਜ਼ਤਾਂ
|
||||
superapp: ਅੰਦਰੂਨੀ
|
||||
grouped_scopes:
|
||||
title:
|
||||
accounts: ਖਾਤੇ
|
||||
blocks: ਪਾਬੰਦੀਸ਼ੁਦਾ
|
||||
bookmarks: ਬੁੱਕਮਾਰਕ
|
||||
crypto: ਸਿਰੇ-ਤੋਂ-ਸਿਰੇ ਤੱਕ ਇੰਕ੍ਰਿਪਸ਼ਨ
|
||||
favourites: ਮਨਪਸੰਦ
|
||||
filters: ਫਿਲਟਰ
|
||||
follow: ਫ਼ਾਲੋ, ਮੌਨ ਅਤੇ ਪਾਬੰਦੀ ਲਾਏ
|
||||
follows: ਫ਼ਾਲੋ
|
||||
lists: ਸੂਚੀਆਂ
|
||||
media: ਨੱਥੀ ਕੀਤਾ ਮੀਡੀਆ
|
||||
mutes: ਮੌਨ
|
||||
notifications: ਨੋਟੀਫਿਕੇਸ਼ਨ
|
||||
reports: ਰਿਪੋਰਟਾਂ
|
||||
search: ਖੋਜੋ
|
||||
statuses: ਪੋਸਟਾਂ
|
||||
layouts:
|
||||
admin:
|
||||
nav:
|
||||
applications: ਐਪਲੀਕੇਸ਼ਨਾਂ
|
||||
scopes:
|
||||
write:follows: ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ
|
||||
write:lists: ਸੂਚੀਆਂ ਬਣਾਓ
|
||||
write:media: ਮੀਡੀਆ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ
|
||||
|
|
|
@ -777,6 +777,8 @@ eu:
|
|||
open: Edonork eman dezake izena
|
||||
security:
|
||||
authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik
|
||||
authorized_fetch_hint: Zerbitzari federatuen autentifikazioa eskatzeak erabiltzaile-mailako zein zerbitzari-mailako blokeak zorrotzago betearaztea ahalbidetzen du. Hala ere, horrek errendimendu galera dakar, zure erantzunen irismena murrizten du eta baliteke federatutako zerbitzu batzuekin bateragarritasun-arazoak sortu ahal izatea. Horrez gain, horrek ez du eragotziko aktore dedikatuek zure mezu eta kontu publikoak eskuratzea.
|
||||
authorized_fetch_overridden_hint: Une honetan ezin duzu ezarpen hau aldatu ingurune-aldagai batek gainidazten duelako.
|
||||
federation_authentication: Federazio autentifikazioaren betearaztea
|
||||
title: Zerbitzariko ezarpenak
|
||||
site_uploads:
|
||||
|
@ -784,6 +786,7 @@ eu:
|
|||
destroyed_msg: Guneko igoera ongi ezabatu da!
|
||||
software_updates:
|
||||
critical_update: Kritikoa — mesedez, eguneratu azkar
|
||||
description: Zure Mastodon instalazioa eguneratuta mantentzea gomendatzen da azken konponketa eta hobekuntzak edukitzeko. Gainera, batzuetan funtsezkoa da Mastodon garaiz eguneratzea segurtasun-arazoak saihesteko. Arrazoi horiengatik, Mastodonek eguneratzeak egiaztatzen ditu 30 minuturo, eta zure posta elektronikoko jakinarazpen-hobespenen arabera jakinaraziko dizu.
|
||||
documentation_link: Informazio gehiago
|
||||
release_notes: Bertsio oharrak
|
||||
title: Eguneraketak eskuragarri
|
||||
|
@ -791,6 +794,7 @@ eu:
|
|||
types:
|
||||
major: Argitalpen handia
|
||||
minor: Argitalpen txikia
|
||||
patch: Partxe eguneraketa — akatsen konponketa eta aplikatzeko aldaketa errazak
|
||||
version: Bertsioa
|
||||
statuses:
|
||||
account: Egilea
|
||||
|
@ -976,6 +980,7 @@ eu:
|
|||
next_steps: Apelazioa onartu dezakezu moderazio erabakia desegiteko, edo ez ikusia egin.
|
||||
subject: "%{username} erabiltzailea %{instance} instantziako moderazio erabaki bat apelatzen ari da"
|
||||
new_critical_software_updates:
|
||||
body: Mastodon-en bertsio kritiko berriak kaleratu dira, agian lehenbailehen eguneratu nahi duzu!
|
||||
subject: "%{instance} ek eguneraketa kritikoak eskuragarri ditu!"
|
||||
new_pending_account:
|
||||
body: Kontu berriaren xehetasunak azpian daude. Eskaera hau onartu edo ukatu dezakezu.
|
||||
|
@ -1037,10 +1042,12 @@ eu:
|
|||
hint_html: Azken kontu bat! Gizakia zarela berretsi behar dugu (zabor-kontuak kanpoan mantentzeko baino ez da!) Ebatzi azpiko CAPTCHA eta sakatu "Jarraitu".
|
||||
title: Segurtasun txekeoa
|
||||
confirmations:
|
||||
awaiting_review: Zure helbide elektronikoa baieztatu da! %{domain} lan taldea zure erregistroa berrikusten ari da. Mezu elektroniko bat jasoko duzu zure kontua onartzen badute!
|
||||
awaiting_review_title: Zure izen-ematea berrikusten ari da
|
||||
clicking_this_link: lotura hau klikatzen
|
||||
login_link: hasi saioa
|
||||
proceed_to_login_html: Orain jarraitu dezakezu %{login_link} -era.
|
||||
redirect_to_app_html: "<strong>%{app_name}</strong> aplikaziora berbideratua izan beharko zenuke. Hori gertatu ez bada, saiatu %{clicking_this_link} edo eskuz itzuli."
|
||||
registration_complete: Osatuta dago orain zure izen-ematea %{domain} -en!
|
||||
welcome_title: Ongi etorri, %{name}!
|
||||
wrong_email_hint: Helbide-elektroniko hori zuzena ez bada, kontuaren ezarpenetan alda dezakezu.
|
||||
|
|
52
config/locales/ia.yml
Normal file
52
config/locales/ia.yml
Normal file
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
ia:
|
||||
admin:
|
||||
accounts:
|
||||
delete: Deler datos
|
||||
deleted: Delite
|
||||
display_name: Nomine visibile
|
||||
enabled: Activate
|
||||
location:
|
||||
all: Toto
|
||||
title: Location
|
||||
moderation:
|
||||
disabled: Disactivate
|
||||
reset: Reinitialisar
|
||||
reset_password: Reinitialisar contrasigno
|
||||
search: Cercar
|
||||
security: Securitate
|
||||
username: Nomine de usator
|
||||
custom_emojis:
|
||||
copy: Copiar
|
||||
create_new_category: Crear nove categoria
|
||||
delete: Deler
|
||||
domain_blocks:
|
||||
confirm_suspension:
|
||||
cancel: Cancellar
|
||||
export: Exportar
|
||||
import: Importar
|
||||
email_domain_blocks:
|
||||
add_new: Adder nove
|
||||
delete: Deler
|
||||
export_domain_allows:
|
||||
no_file: Necun file seligite
|
||||
follow_recommendations:
|
||||
language: Per lingua
|
||||
status: Stato
|
||||
instances:
|
||||
dashboard:
|
||||
instance_languages_dimension: Linguas principal
|
||||
delivery:
|
||||
unavailable: Non disponibile
|
||||
private_comment: Commento private
|
||||
public_comment: Commento public
|
||||
invites:
|
||||
filter:
|
||||
available: Disponibile
|
||||
ip_blocks:
|
||||
delete: Deler
|
||||
expires_in:
|
||||
'1209600': 2 septimanas
|
||||
'15778476': 6 menses
|
||||
'2629746': 1 mense
|
||||
'86400': 1 die
|
1414
config/locales/ie.yml
Normal file
1414
config/locales/ie.yml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -91,6 +91,7 @@ io:
|
|||
moderation:
|
||||
active: Aktiva
|
||||
all: Omna
|
||||
disabled: Desaktivigita
|
||||
pending: Vartanta
|
||||
silenced: Limitizita
|
||||
suspended: Restriktita
|
||||
|
@ -116,12 +117,16 @@ io:
|
|||
redownloaded_msg: Sucesoze rifreshis profilo di %{username} de origino
|
||||
reject: Refuzez
|
||||
rejected_msg: Sucesoze refuzis registroapliko di %{username}
|
||||
remote_suspension_irreversible: La datumi di ca konto esas nerenversebla efacita.
|
||||
remote_suspension_reversible_hint_html: Ca konto restriktesis che lua servilo, e la datumi tota efacesos ye %{date}. Ante ta tempo, la fora servilo povos restaurar ca konto sen irga mala efecti. Se vu volas efacar omna datumi dil konto quik, vu povas facar lo sube.
|
||||
remove_avatar: Efacez profilimajo
|
||||
remove_header: Efacez kapimajo
|
||||
removed_avatar_msg: Sucesoze efacis profilimajo di %{username}
|
||||
removed_header_msg: Sucesoze efacis kapimajo di %{username}
|
||||
resend_confirmation:
|
||||
already_confirmed: Ca uzanto ja konfirmesis
|
||||
send: Risendez konfirmligilo
|
||||
success: Konfirmligilo sucesoze sendesas!
|
||||
reset: Richanjez
|
||||
reset_password: Richanjez pasvorto
|
||||
resubscribe: Riabonez
|
||||
|
@ -129,6 +134,7 @@ io:
|
|||
search: Trovez
|
||||
search_same_email_domain: Altra uzanti kun sama retpostodomeno
|
||||
search_same_ip: Altra uzanti kun sama IP
|
||||
security: Sekureso
|
||||
security_measures:
|
||||
only_password: Nur pasvorto
|
||||
password_and_2fa: Pasvorto e 2FA
|
||||
|
@ -205,6 +211,7 @@ io:
|
|||
reject_user: Refuzez uzanto
|
||||
remove_avatar_user: Efacez profilimajo
|
||||
reopen_report: Riapertez raporto
|
||||
resend_user: Risendez konfirmretposto
|
||||
reset_password_user: Richanjez pasvorto
|
||||
resolve_report: Rezolvez raporto
|
||||
sensitive_account: Forcsentoza konto
|
||||
|
@ -263,6 +270,7 @@ io:
|
|||
reject_user_html: "%{name} refuzis registro de %{target}"
|
||||
remove_avatar_user_html: "%{name} efacis profilimajo de %{target}"
|
||||
reopen_report_html: "%{name} riapertis raporto %{target}"
|
||||
resend_user_html: "%{name} risendis konfirmretposto por %{target}"
|
||||
reset_password_user_html: "%{name} richanjis pasvorto de uzanto %{target}"
|
||||
resolve_report_html: "%{name} rezolvis raporto %{target}"
|
||||
sensitive_account_html: "%{name} markizis medii di %{target} quale sentoza"
|
||||
|
@ -279,6 +287,7 @@ io:
|
|||
update_ip_block_html: "%{name} kreis regulo por IP %{target}"
|
||||
update_status_html: "%{name} novigis posto da %{target}"
|
||||
update_user_role_html: "%{name} chanjis rolo di %{target}"
|
||||
deleted_account: konto efacita
|
||||
empty: Nula logi.
|
||||
filter_by_action: Filtrez segun ago
|
||||
filter_by_user: Filtrez segun uzanto
|
||||
|
@ -300,6 +309,7 @@ io:
|
|||
unpublish: Depublikigez
|
||||
unpublished_msg: Anunco sucesoze depublikigesas!
|
||||
updated_msg: Anunco sucesoza novigesas!
|
||||
critical_update_pending: Urjanta aktualigo vartesas
|
||||
custom_emojis:
|
||||
assign_category: Insertez kategorio
|
||||
by_domain: Domeno
|
||||
|
@ -373,6 +383,15 @@ io:
|
|||
undo: Despermisez federato kun domeno
|
||||
domain_blocks:
|
||||
add_new: Add new
|
||||
confirm_suspension:
|
||||
cancel: Anulez
|
||||
confirm: Restriktez
|
||||
permanent_action: Desrestriktar la servilo ne restaurar irga datumi o relati.
|
||||
preamble_html: Vu restriktos <strong>%{domain}</strong> e lua subdomeni.
|
||||
remove_all_data: Co efacos omna kontenaji, imaji, videi e profildatumi por la konti di ca domeno de vua servilo.
|
||||
stop_communication: Vua servilo haltos komunikar kun ca servili.
|
||||
title: Konfirmez domenoblokuso por %{domain}
|
||||
undo_relationships: Co desfacos irga sequorelato inter konti di ca servili e vua.
|
||||
created_msg: Domenobstrukto nun procedesas
|
||||
destroyed_msg: Domenobstrukto desagesis
|
||||
domain: Domeno
|
||||
|
@ -385,6 +404,7 @@ io:
|
|||
create: Kreez obstrukto
|
||||
hint: Domenobstrukto ne preventos kreo di kontrekordaji en datumaturo, ma retroaktive e automate aplikos partikulara jermetodi a ta konti.
|
||||
severity:
|
||||
desc_html: "<strong>Limitizez</strong> facos la posti dil konti di ca domeno nevidebla da irgu qua ne sequas li. <strong>Restriktez</strong> efacos omna kontenaji, imaji, videi e profildatumi dil konti di ca domeno de vua servilo. Uzez <strong>Nulo</strong> se vu volas nur refuzar imaji e videi."
|
||||
noop: Nulo
|
||||
silence: Limito
|
||||
suspend: Restriktez
|
||||
|
@ -419,9 +439,23 @@ io:
|
|||
resolve: Rezolvez domeno
|
||||
title: Obstruktez nova retpostodomeno
|
||||
no_email_domain_block_selected: Retpostodomenobstrukti ne chanjesis por ke nulo selektesis
|
||||
not_permitted: Ne permisata
|
||||
resolved_dns_records_hint_html: Ca domennomo rezolvesas a ca MX-domeni, quale esas ultime responsanta por ganar retposto. Obstruktar MX-domeno obstruktos registri de irga retpostoadreso quo uzas sama MX-domeni, mem se la videbla domennomo esas diferanta. <strong>Sorgemez e ne obstruktez majora retpostositi.</strong>
|
||||
resolved_through_html: Rezolvesis tra %{domain}
|
||||
title: Obstruktita retpostodomeni
|
||||
export_domain_allows:
|
||||
no_file: Nula dosiero selektesas
|
||||
export_domain_blocks:
|
||||
import:
|
||||
description_html: Vu importacos listo de domenoblokusi. Voluntez kontrolar la listo sorgoze, partikulare se vu ne kreis la listo personale.
|
||||
existing_relationships_warning: Existanta sequo-relati
|
||||
private_comment_description_html: 'Por helpar vu savar de ube importacita blokusi venis, importacita blokusi kreesos kun la sequanta komento privata: <q>%{comment}</q>'
|
||||
private_comment_template: Importacita de %{source} ye %{date}
|
||||
title: Importacar domenoblokusi
|
||||
invalid_domain_block: 'Un o plu kam un domenoblokuso omisesis pro la sequanta eroro(-i): %{error}'
|
||||
new:
|
||||
title: Importacar domenoblokusi
|
||||
no_file: Nula dosiero selektesas
|
||||
follow_recommendations:
|
||||
description_html: "<strong>Sequorekomendi helpas nova uzanti rapide trovar interesanta kontenajo</strong>. Se uzanto ne interagas kun altra personi sate por igar personaligita sequorekomendi, ca konti rekomendas. Oli rikalkulesas die de mixo di konti kun maxim alta recenta interagi e maxim altra lokala sequantoquanto segun selektita linguo."
|
||||
language: Por linguo
|
||||
|
@ -450,6 +484,7 @@ io:
|
|||
content_policies:
|
||||
comment: Interna noto
|
||||
description_html: Vu povas fixar kontenajguidili quo aplikesos a omna konti de ca domeno e irga oli subdomeni.
|
||||
limited_federation_mode_description_html: Vu povas selektar ka vu permisos federar kun ca domeno.
|
||||
policies:
|
||||
reject_media: Refusez medii
|
||||
reject_reports: Refusez raporti
|
||||
|
@ -497,6 +532,7 @@ io:
|
|||
total_reported: Raporti pri oli
|
||||
total_storage: Mediiatachaji
|
||||
totals_time_period_hint_html: Sumi quo montresas sube inkluzas informi de pos la komenco.
|
||||
unknown_instance: Prezente ne esas registrago pri ta domeno che ca servilo.
|
||||
invites:
|
||||
deactivate_all: Deaktivigez omno
|
||||
filter:
|
||||
|
@ -553,20 +589,27 @@ io:
|
|||
mark_as_sensitive_description_html: Medii en raportizita posti markizesos quale sentoza e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto.
|
||||
other_description_html: Videz plu multa opcioni por dominacar konduto di konto e kustumizar komuniko a raportizita konto.
|
||||
resolve_description_html: Nulo agesos kontre raportizita konto, streko ne rekordizesos e raporto klozesos.
|
||||
silence_description_html: Konto esos videbla nur por personi qui ja sequas lo o manuale serchas lo, severe limitizante lua atingo. On sempre povas desfacar co. Klozas omna raporti kontra ca konto.
|
||||
suspend_description_html: Ca konto e omna kontenaji esos neacesebla e efacota, e interagar kun ol esos neposibla. Desfacebla dum 30 dii. Klozas omna raporti kontra ca konto.
|
||||
actions_description_html: Decidez ago por rezolvar ca raporto. Se vu decidar puniso kontre raportizesis konto, retpostoavizo sendesos a ol, ecepte kande <strong>Spam</strong> kategorio selektesis.
|
||||
actions_description_remote_html: Selektez quo vu agos por solvar ca raporto. Co nur efektigos quale <strong>vua</strong> servilo komunikas kun ca fora konto e traktas lua kontenaji.
|
||||
add_to_report: Insertez pluse a raporto
|
||||
are_you_sure: Ka vu esas certa?
|
||||
assign_to_self: Taskigez me
|
||||
assigned: Taskigita jerero
|
||||
by_target_domain: Domeno di raportizita konto
|
||||
cancel: Anulez
|
||||
category: Kategorio
|
||||
category_description_html: La motivo ke ca konto e kontenajo raportizesis citesos por komuniko kun raportizita konto
|
||||
comment:
|
||||
none: Nulo
|
||||
comment_description_html: 'Por donar plu multa informo, %{name} skribis:'
|
||||
confirm: Konfirmez
|
||||
confirm_action: Konfirmez jero-ago kontra @%{acct}
|
||||
created_at: Raportizesis
|
||||
delete_and_resolve: Efacez posti
|
||||
forwarded: Sendesis
|
||||
forwarded_replies_explanation: Ca raporto esas de fora uzanto e pri fora kontenajo. Esis dissemata a vu pro ke la raportita kontenajo es respondo a un ek vua uzanti.
|
||||
forwarded_to: Sendesis a %{domain}
|
||||
mark_as_resolved: Markizez quale rezolvita
|
||||
mark_as_sensitive: Markizez quale sentoza
|
||||
|
@ -580,6 +623,7 @@ io:
|
|||
placeholder: Deskriptez quo agesis o irga relatita novaji...
|
||||
title: Noti
|
||||
notes_description_html: Videz e pozez noti a altra jereri e vua su en futuro
|
||||
processed_msg: 'Raporto #%{id} sucesoze traktita'
|
||||
quick_actions_description_html: 'Agetez o volvez base por vidar raportizita kontenajo:'
|
||||
remote_user_placeholder: nelokala uzanti de %{instance}
|
||||
reopen: Riapertez raporto
|
||||
|
@ -592,9 +636,28 @@ io:
|
|||
status: Stando
|
||||
statuses: Raportizita kontenajo
|
||||
statuses_description_html: Ofensanta kontenajo citesos en komuniko kun raportizita konto
|
||||
summary:
|
||||
action_preambles:
|
||||
delete_html: 'Vu <strong>efacos</strong> kelka posti di <strong>@%{acct}</strong>. Co facos lo sequanta:'
|
||||
mark_as_sensitive_html: 'Vu <strong>markizos</strong> kelka posti di <strong>@%{acct}</strong> quale <strong>provokema</strong>. Co facos lo sequanta:'
|
||||
silence_html: 'Vu <strong>limitizos</strong> la konto di <strong>@%{acct}</strong>. Co facos lo sequanta:'
|
||||
suspend_html: 'Vu <strong>restriktos</strong> la konto di <strong>@%{acct}</strong>. Co facos lo sequanta:'
|
||||
actions:
|
||||
delete_html: Efacar la ofensiva posti
|
||||
mark_as_sensitive_html: Markizar la atachuri dil posti quale provokema
|
||||
silence_html: Severe limitizar la atingo dil konto di <strong>@%{acct}</strong> per facar ke lua profilo e posti es videbla nur a personi qui ja sequas lu o qui manuale serchas lua profilo
|
||||
suspend_html: Restriktar <strong>@%{acct}</strong>, facante ke lua profilo e kontenaji neacesibla e neposibla por interagado
|
||||
close_report: 'Markizar raporto #%{id} quale solvita'
|
||||
close_reports_html: Markizar <strong>omna</strong> raporti contra <strong>@%{acct}</strong> quale solvita
|
||||
delete_data_html: Efacor la profilo e kontenaji di <strong>@%{acct}</strong> ye 30 dii de nun ecepte ke lu esus desrestrikita ante ta tempe
|
||||
preview_preamble_html: "<strong>@%{acct}</strong> recevos averto kun la sequanta kontenajo:"
|
||||
record_strike_html: Registrar punto kontra <strong>@%{acct}</strong> por helpar vu traktar futura reguloviolaci di ca konto
|
||||
send_email_html: Sendez a <strong>@%{acct}</strong> avertala retposto
|
||||
warning_placeholder: Neobligata plusa expliko por la jero-ago.
|
||||
target_origin: Fonto di raportizita konto
|
||||
title: Raporti
|
||||
unassign: Detaskigez
|
||||
unknown_action_msg: 'Nekonocata ago: %{action}'
|
||||
unresolved: Nerezolvita
|
||||
updated_at: Novigesis
|
||||
view_profile: Videz profilo
|
||||
|
@ -676,14 +739,21 @@ io:
|
|||
branding:
|
||||
preamble: Fabrikmarko di ca servilo diferentigas lu de altra servili en la reto. Ca informi forsan montresas che diversa loki. Do, ca informi debas esar klara.
|
||||
title: Fabrikmarkeso
|
||||
captcha_enabled:
|
||||
title: Postular ke nova uzanti solvos CAPTCHA por konfirmar lia konti
|
||||
content_retention:
|
||||
preamble: Dominacez quale uzantigita kontenajo retenesar en Mastodon.
|
||||
title: Kontenajreteneso
|
||||
default_noindex:
|
||||
desc_html: Efektigas omna uzanti qui ne personale chanjis ca opciono
|
||||
title: Despartoprenigez uzanti de serchilo-indexi quale originala stando
|
||||
discovery:
|
||||
follow_recommendations: Sequez rekomendaji
|
||||
preamble: Montrar interesanta kontenajo esas importanta ye voligar nova uzanti quo forsan ne savas irgu. Dominacez quale ca deskovrotraiti funcionar en ca servilo.
|
||||
profile_directory: Profilcheflisto
|
||||
public_timelines: Publika tempolinei
|
||||
publish_discovered_servers: Publikar deskovrita servili
|
||||
publish_statistics: Publikar statistiki
|
||||
title: Deskovro
|
||||
trends: Tendenci
|
||||
domain_blocks:
|
||||
|
@ -698,20 +768,51 @@ io:
|
|||
approved: Aprobo bezonesas por registro
|
||||
none: Nulu povas registrar
|
||||
open: Irgu povas registrar
|
||||
security:
|
||||
authorized_fetch: Postular autentikigo de federata servili
|
||||
authorized_fetch_hint: Postular autentikigo de federata servili kapabligar plu strikta enforcigo dil blokusi di uzanti e dil servilo. Tamen, co enduktos exekutado-lentigo, diminutos la atingebleso di via respondi, e forsan enduktos koncilieblesoproblemi kun kelka softwari federata. Pluse, co ne preventos aganti dedikita de acesar vua publika posti e konti.
|
||||
authorized_fetch_overridden_hint: Vu prezente ne povas chanjar ca opciono pro ke ol es remplasata da environmentala varieblo.
|
||||
federation_authentication: Enforcigo di federado-autentikigo
|
||||
title: Servilopcioni
|
||||
site_uploads:
|
||||
delete: Efacez adchargita failo
|
||||
destroyed_msg: Sitadchargito sucesoze efacesis!
|
||||
software_updates:
|
||||
critical_update: Urjanta — voluntez aktualigar rapide
|
||||
description: On rekomendas ke vu sempre aktualigas vua Mastodon-instaluro por profitar la maxim nova solvuri e novaji. Pluse, kelkafoye es importantega aktualigar Mastodon rapide por evitar sekuresoproblemi. Pro ca motivi, Mastodon serchas aktualigi mihorale, e notifikos vu segun vua opcioni pri retposto-notifiki.
|
||||
documentation_link: Lernez pluse
|
||||
release_notes: Emiso-noti
|
||||
title: Aktualigi disponebla
|
||||
type: Tipo
|
||||
types:
|
||||
major: Majora emiso
|
||||
minor: Minora emiso
|
||||
patch: Mikra emiso — problemosolvuri e chanji facila a facar
|
||||
version: Versiono
|
||||
statuses:
|
||||
account: Skribinto
|
||||
application: Apliko
|
||||
back_to_account: Retrovenez a kontopagino
|
||||
back_to_report: Retrovenez a raportpagino
|
||||
batch:
|
||||
remove_from_report: Efacez de raporto
|
||||
report: Raportizez
|
||||
deleted: Efacesis
|
||||
favourites: Favoriziti
|
||||
history: Historio di versioni
|
||||
in_reply_to: Respondante a
|
||||
language: Linguo
|
||||
media:
|
||||
title: Medii
|
||||
metadata: Metadatumi
|
||||
no_status_selected: Nula posti chanjesis pro ke nulo selektesis
|
||||
open: Apertez posto
|
||||
original_status: Originala posto
|
||||
reblogs: Dissemi
|
||||
status_changed: Posto chanjita
|
||||
title: Kontoposti
|
||||
trending: Populara
|
||||
visibility: Videbleso
|
||||
with_media: Kun medii
|
||||
strikes:
|
||||
actions:
|
||||
|
@ -724,9 +825,14 @@ io:
|
|||
suspend: "%{name} restriktis konto di %{target}"
|
||||
appeal_approved: Apelis
|
||||
appeal_pending: Vartata apelo
|
||||
appeal_rejected: Apelo refuzita
|
||||
system_checks:
|
||||
database_schema_check:
|
||||
message_html: Existas vartanta datamaturmigri. Startez por certigar ke la softwaro kondutar quale expektita
|
||||
elasticsearch_preset:
|
||||
action: Videz la dokumentajo
|
||||
elasticsearch_preset_single_node:
|
||||
action: Videz la dokumentajo
|
||||
elasticsearch_running_check:
|
||||
message_html: Ne povas konektas a Elasticsearch. Kontrolez ke ol functionas o desaktivigez textokompleta trovo
|
||||
elasticsearch_version_check:
|
||||
|
@ -737,6 +843,18 @@ io:
|
|||
message_html: Vu ne fixis irga servilreguli.
|
||||
sidekiq_process_check:
|
||||
message_html: Sidekiq procedo ne funcionas ye %{value} fask(o). Kontrolez vua opciono di Sidekiq
|
||||
software_version_critical_check:
|
||||
action: Videz la aktualigi disponebla
|
||||
message_html: Urjanta Mastodon-aktualigo es disponebla, voluntez aktualigar la servilo tam rapide kam es posibla.
|
||||
software_version_patch_check:
|
||||
action: Videz la aktualigi disponebla
|
||||
message_html: Problemosolvanta Mastodon-aktualigo es disponebla.
|
||||
upload_check_privacy_error:
|
||||
action: Konsultez hike por plu multa informo
|
||||
message_html: "<strong>Vua retservilo es misfigurizita. La privateso di vua uzanti es domajebla.</strong>"
|
||||
upload_check_privacy_error_object_storage:
|
||||
action: Konsultez hike por plu multa informo
|
||||
message_html: "<strong>Vua dosierokonservo es misfigurizita. La privateso di vua uzanti es domajebla.</strong>"
|
||||
tags:
|
||||
review: Kontrolez stando
|
||||
updated_msg: Hashtagopcioni novigesis sucesoze
|
||||
|
@ -759,6 +877,7 @@ io:
|
|||
other: Partigesis da %{count} personi de pos antea semano
|
||||
title: Tendencoza ligili
|
||||
usage_comparison: Partigesis %{today} foyi hodie, la nombro esas %{yesterday} hiere
|
||||
not_allowed_to_trend: Ne permisita quale popularo
|
||||
only_allowed: Nur permisato
|
||||
pending_review: Vartas kontrolo
|
||||
preview_card_providers:
|
||||
|
@ -843,6 +962,9 @@ io:
|
|||
body: "%{target} apelas jerdecido da %{action_taken_by} de %{date}, quale esis %{type}. Oli skribis:"
|
||||
next_steps: Vu povas aprobar apelo por deagar jerdecido o ignorar.
|
||||
subject: "%{username} apela jerdecido che %{instance}"
|
||||
new_critical_software_updates:
|
||||
body: Nova urjanta versioni di Mastodon emisesis, vu forsan volas aktualigar tam balde kam es posibla!
|
||||
subject: Urjanta Mastodon-aktualigi es disponebla por %{instance}!
|
||||
new_pending_account:
|
||||
body: Detali de nova konto esas la subo. Vu povas aprobar o refuzar ca apliko.
|
||||
subject: Nova konto bezonas kontrolesar che %{instance} (%{username})
|
||||
|
@ -850,6 +972,9 @@ io:
|
|||
body: "%{reporter} raportizis %{target}"
|
||||
body_remote: Ulu de %{domain} raportizis %{target}
|
||||
subject: Nova raporto por %{instance} (#%{id})
|
||||
new_software_updates:
|
||||
body: Nova Mastodon-versioni emisesis, vu forsan volas aktualigar!
|
||||
subject: Nova Mastodon-versioni es disponebla por %{instance}!
|
||||
new_trends:
|
||||
body: 'Ca kozi bezonas kontrol ante ol povas montresar publike:'
|
||||
new_trending_links:
|
||||
|
@ -881,23 +1006,41 @@ io:
|
|||
notification_preferences: Chanjez retpostopreferaji
|
||||
salutation: "%{name},"
|
||||
settings: 'Chanjar la retpost-mesajala preferi: %{link}'
|
||||
unsubscribe: Desabonez
|
||||
view: 'Vidar:'
|
||||
view_profile: Videz profilo
|
||||
view_status: Videz posto
|
||||
applications:
|
||||
created: Apliko sucesoze kreesas
|
||||
destroyed: Apliko sucesoze efacesas
|
||||
logout: Ekirez
|
||||
regenerate_token: Rifacez acesficho
|
||||
token_regenerated: Acesficho sucesoze riganesas
|
||||
warning: Sorgemez per ca informi. Ne partigez kun irgu!
|
||||
your_token: Vua acesficho
|
||||
auth:
|
||||
apply_for_account: Demandar konto
|
||||
captcha_confirmation:
|
||||
help_html: Se vu ne povas solvar la CAPTCHA, vu povas kontaktar ni per %{email} e ni povas helpar vu.
|
||||
hint_html: Nur un plusa kozo! Ni postulas ke vu konfirmez ke vu esas homo (co es por ke ni povas preventar mesajachi!). Solvez la suba CAPTCHA e pulsez "Avancez".
|
||||
title: Sekuresokontrolo
|
||||
confirmations:
|
||||
awaiting_review: Vua retpostadreso es konfirmita! La jeraro che %{domain} revuos vua apliko. Vu recevos retposto se li aprobas vua konto!
|
||||
awaiting_review_title: Vua apliko vartas revuo
|
||||
clicking_this_link: pulsante ca ligilo
|
||||
login_link: enirar
|
||||
proceed_to_login_html: Nun vu povas avancar a %{login_link}.
|
||||
redirect_to_app_html: Vu devas sendesir al apliko <strong>%{app_name}</strong>. Se to ne evenis, probez %{clicking_this_link} o retroirez manuale al apliko.
|
||||
registration_complete: Vua registrago che %{domain} nun es kompleta!
|
||||
welcome_title: Bonvenez, %{name}!
|
||||
wrong_email_hint: Se ta retpostadreso ne es korekta, vu povas chanjar lo en la konto-opcioni.
|
||||
delete_account: Efacez konto
|
||||
delete_account_html: Se vu volas efacar vua konto, vu povas <a href="%{path}">irar hike</a>. Vu demandesos konfirmar.
|
||||
description:
|
||||
prefix_invited_by_user: "@%{name} invitas vu juntar ca servilo di Mastodon!"
|
||||
prefix_sign_up: Registrez che Mastodon hodie!
|
||||
suffix: Per konto, vu povos sequar personi, postigar novaji e interchanjar mesaji kun uzanti de irga servilo di Mastodon e pluse!
|
||||
didnt_get_confirmation: Ka vu ne recevis konfirmoligilo?
|
||||
dont_have_your_security_key: Ka vu ne havas sekuresklefo?
|
||||
forgot_password: Pasvorto obliviita?
|
||||
invalid_reset_password_token: Pasvorto richanjoficho esas nevalida o expirita. Demandez novo.
|
||||
|
@ -910,18 +1053,39 @@ io:
|
|||
migrate_account_html: Se vu volas ridirektar ca konto a diferanto, vu povas <a href="%{path}">ajustar hike</a>.
|
||||
or_log_in_with: O eniras per
|
||||
privacy_policy_agreement_html: Me lektis e konsentis <a href="%{privacy_policy_path}" target="_blank">privatesguidilo</a>
|
||||
progress:
|
||||
confirm: Konfirmar retpostoadreso
|
||||
details: Vua detali
|
||||
review: Nia revuo
|
||||
rules: Aceptar reguli
|
||||
providers:
|
||||
cas: CAS
|
||||
saml: SAML
|
||||
register: Membreskar
|
||||
registration_closed: "%{instance} ne aceptas nova membri"
|
||||
resend_confirmation: Risendez konfirmligilo
|
||||
reset_password: Chanjar la pasvorto
|
||||
rules:
|
||||
accept: Aceptar
|
||||
back: Retro
|
||||
invited_by: 'Vu darfas krear konto che %{domain} pro ke vu recevis invito de:'
|
||||
preamble: Co igesas e exekutesas da jereri di %{domain}.
|
||||
preamble_invited: Ante ke vu avancos, voluntez konsiderar la reguli kreita dal jeraro di %{domain}.
|
||||
title: Kelka bazala reguli.
|
||||
title_invited: Vu esas invitita.
|
||||
security: Chanjar pasvorto
|
||||
set_new_password: Selektar nova pasvorto
|
||||
setup:
|
||||
email_below_hint_html: Kontrolez vua spam-dosieruro, o demandez altra ligilo. Vu povas korektigar vua retpostadreso se esas nekorekta.
|
||||
email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike.
|
||||
link_not_received: Ka vu ne recevis ligilo?
|
||||
new_confirmation_instructions_sent: Vu recevos nova retposto kun la konfirmligilo pos kelka minuti!
|
||||
title: Kontrolez vua retposti
|
||||
sign_in:
|
||||
preamble_html: Enirez per vua <strong>%{domain}</strong> detali. Se vua konto esas che altra servilo, vu ne povos enirar hike.
|
||||
title: Enirez a %{domain}
|
||||
sign_up:
|
||||
manual_review: Registragi che %{domain} es revuata da nia personaro. Por helpar ni traktar vua aplikajo, skribez kelko pri vu e pro quo vu volas konto che %{domain}.
|
||||
preamble: Per konto en ca servilo di Mastodon, on povas sequar irga persono en ca reto, ne ye ube ona konto hostagisas.
|
||||
title: Ni komencigez vu en %{domain}.
|
||||
status:
|
||||
|
@ -930,14 +1094,15 @@ io:
|
|||
functional: Vua konto esas tote funcionoza.
|
||||
pending: Vua apliko bezonas kontrolo da nia laborero. Co forsan esas nekurta. Vu ganos retposto se vua apliko aprobesas.
|
||||
redirecting_to: Vua konto esas neaktiva pro ke ol nun ridirektesos a %{acct}.
|
||||
self_destruct: Pro ke %{domain} balde klozos, vu havas nur aceso limitizata a vua konto.
|
||||
view_strikes: Videz antea streki kontre vua konto
|
||||
too_fast: Formulario sendesis tro rapide, probez itere.
|
||||
use_security_key: Uzes sekuresklefo
|
||||
challenge:
|
||||
confirm: Durez
|
||||
confirm: Avancez
|
||||
hint_html: "<strong>Guidilo:</strong> Ni ne demandos vua pasvorto itere til 1 horo."
|
||||
invalid_password: Nevalida pasvorto
|
||||
prompt: Konfirmez pasvorto por durar
|
||||
prompt: Konfirmez pasvorto por avancar
|
||||
crypto:
|
||||
errors:
|
||||
invalid_key: ne esas valida klefo Ed25519 o Curve25519
|
||||
|
@ -1009,6 +1174,9 @@ io:
|
|||
your_appeal_rejected: Vua apelo refuzesis
|
||||
domain_validator:
|
||||
invalid_domain: ne esas valida domennomo
|
||||
edit_profile:
|
||||
basic_information: Fundamentala informo
|
||||
other: Altra
|
||||
errors:
|
||||
'400': Demando quon vu sendis esas nevalida o malstrukturala.
|
||||
'403': Vu ne havas permiso por vidar ca pagino.
|
||||
|
@ -1044,6 +1212,8 @@ io:
|
|||
storage: Konservado di kontenajo
|
||||
featured_tags:
|
||||
add_new: Insertez novo
|
||||
errors:
|
||||
limit: Vu ja pinglizis la maxima nombro de hastagi
|
||||
hint_html: "<strong>Quo esas estelita hashtagi?</strong> Ol montresas eminente che vua publika profilo e povigas personi vidar vua publika posti partikulare kun ta hashtagi. Oli esas bona utensilo por jeretar kreiva agaji e longa projetaji."
|
||||
filters:
|
||||
contexts:
|
||||
|
@ -1095,7 +1265,9 @@ io:
|
|||
all_matching_items_selected_html:
|
||||
one: "<strong>%{count}</strong> kozo quo parigesas kun vua trovato selektesas."
|
||||
other: Omna <strong>%{count}</strong> kozi quo parigesas kun vua trovato selektesas.
|
||||
cancel: Anulez
|
||||
changes_saved_msg: Chanji senprobleme konservita!
|
||||
confirm: Konfirmez
|
||||
copy: Kopiez
|
||||
delete: Efacez
|
||||
deselect: Deselektez omno
|
||||
|
@ -1111,19 +1283,59 @@ io:
|
|||
other: Ulo ne eventis senprobleme! Voluntez konsultar la suba %{count} eror-raporti
|
||||
imports:
|
||||
errors:
|
||||
empty: CSV-dosiero vakua
|
||||
invalid_csv_file: 'Nevalida CSV-dosiero. Eroro: %{error}'
|
||||
over_rows_processing_limit: kontenas plu kam %{count} horizontala lineo
|
||||
too_large: Dosiero es tro granda
|
||||
failures: Falii
|
||||
imported: Importacita
|
||||
mismatched_types_warning: Semblas ke vu forsan selektis la nekorekta tipo por ca importaco, voluntez kontrolar itere.
|
||||
modes:
|
||||
merge: Kombinez
|
||||
merge_long: Retenez displonebla rekordi e insertez novi
|
||||
overwrite: Remplasez
|
||||
overwrite_long: Remplasez nuna rekordi per novi
|
||||
overwrite_preambles:
|
||||
blocking_html: Vu <strong>substitucos vua blokusolisto</strong> per til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong>.
|
||||
bookmarks_html: Vu <strong>substitucos vua libromarki</strong> per til <strong>%{total_items} posti</strong> de <strong>%{filename}</strong>.
|
||||
domain_blocking_html: Vu <strong>substitucos vua domenoblokusolisto</strong> per til <strong>%{total_items} domeni</strong> de <strong>%{filename}</strong>.
|
||||
following_html: Vu <strong>sequos</strong> til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong> e <strong>haltar sequar irga altra konto</strong>.
|
||||
lists_html: Vu <strong>substitucos vua listi</strong> kun la kontenaji di <strong>%{filename}</strong>. Til <strong>%{total_items} konti</strong> adjuntesos a nova listi.
|
||||
muting_html: Vu <strong>substitucos vua listo di konti silencigita</strong> per til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong>.
|
||||
preambles:
|
||||
blocking_html: Vu <strong>blokusos</strong> til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong>.
|
||||
bookmarks_html: Vu adjuntos <strong>%{total_items} posti</strong> de <strong>%{filename}</strong> a vua <strong>libromarki</strong>.
|
||||
domain_blocking_html: Vu <strong>blokusos</strong> til <strong>%{total_items} domeni</strong> de <strong>%{filename}</strong>.
|
||||
following_html: Vu <strong>sequos</strong> til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong>.
|
||||
lists_html: Vu adjuntos til <strong>%{total_items} konti</strong> de <strong>%{filename}</strong> a vua <strong>listi</strong>. Nova listi kreesos se ne existas listo a quo adjuntar.
|
||||
muting_html: Vu <strong>silencigos</strong> til <strong>%{total_items}</strong> konti en <strong>%{filename}</strong>.
|
||||
preface: Tu povas importacar kelka datumi, tal quala listi de omna homi quin tu sequas o blokusas, a tua konto di ca instaluro, per dosiero exportacita de altra instaluro.
|
||||
recent_imports: Importacaji recenta
|
||||
states:
|
||||
finished: Finita
|
||||
in_progress: Progresanta
|
||||
scheduled: Projetita
|
||||
unconfirmed: Nekonfirmata
|
||||
status: Stando
|
||||
success: Tua datumi esis senprobleme importacita ed esos traktita quale projetita
|
||||
time_started: Komencita ye
|
||||
titles:
|
||||
blocking: Importacante konti blokusata
|
||||
bookmarks: Importacante libromarki
|
||||
domain_blocking: Importacante domeni blokusata
|
||||
following: Importacante konti sequata
|
||||
lists: Importacante listi
|
||||
muting: Importacante konti silencigata
|
||||
type: Tipo di importaco
|
||||
type_groups:
|
||||
constructive: Sequati & libromarki
|
||||
destructive: Blokusati e silencigati
|
||||
types:
|
||||
blocking: Listo de blokusiti
|
||||
bookmarks: Libromarki
|
||||
domain_blocking: Domenobstruktolisto
|
||||
following: Listo de sequati
|
||||
lists: Listi
|
||||
muting: Silenciglisto
|
||||
upload: Kargar
|
||||
invites:
|
||||
|
@ -1138,6 +1350,7 @@ io:
|
|||
'86400': 1 dio
|
||||
expires_in_prompt: Nulatempe
|
||||
generate: Facez invitligilo
|
||||
invalid: Ca invito ne es valida
|
||||
invited_by: 'Vu invitesis da:'
|
||||
max_uses:
|
||||
one: 1 uzo
|
||||
|
@ -1148,6 +1361,9 @@ io:
|
|||
expires_at: Expiros
|
||||
uses: Uzi
|
||||
title: Invitez personi
|
||||
lists:
|
||||
errors:
|
||||
limit: Vu atingis la maxima nombro de listi
|
||||
login_activities:
|
||||
authentication_methods:
|
||||
otp: 2-faktoryurizessoftwaro
|
||||
|
@ -1159,6 +1375,21 @@ io:
|
|||
failed_sign_in_html: Falita enirprob per %{method} de %{ip} (%{browser})
|
||||
successful_sign_in_html: Sucesoza eniro per %{method} de %{ip} (%{browser})
|
||||
title: Yurizeshistorio
|
||||
mail_subscriptions:
|
||||
unsubscribe:
|
||||
action: Yes, desabonez
|
||||
complete: Desabonita
|
||||
confirmation_html: Ka vu esas certa ke vu volas desabonar de recevar %{type} por Mastodon che %{domain} a vua retpostoadreso %{email}? Vu sempre povas riabonar che vua <a href="%{settings_path}">opcioni pri restposto-notifiki</a>.
|
||||
emails:
|
||||
notification_emails:
|
||||
favourite: notifiko-retposti pri favoriziti
|
||||
follow: retposti pri sequo-notifiki
|
||||
follow_request: retposti pri sequo-demandi
|
||||
mention: retposti pri menciono-notifiki
|
||||
reblog: retposti pri repeto-notifiki
|
||||
resubscribe_html: Se vu desabonis eroroze, vu povas riabonar en vua <a href="%{settings_path}">opcioni pri retposto-notifiki</a>.
|
||||
success_html: Vu ne plus recevos %{type} por Mastodon che %{domain} a vua retpostadreso %{email}.
|
||||
title: Desabonez
|
||||
media_attachments:
|
||||
validations:
|
||||
images_and_video: Ne povas atachar video a posto quo ja kontenar imaji
|
||||
|
@ -1230,14 +1461,15 @@ io:
|
|||
poll:
|
||||
subject: Votposto di %{name} finis
|
||||
reblog:
|
||||
body: "%{name} diskonocigis tua mesajo:"
|
||||
subject: "%{name} diskonocigis tua mesajo"
|
||||
title: Nova busto
|
||||
body: "%{name} repetis vua posto:"
|
||||
subject: "%{name} repetis vua posto"
|
||||
title: Nova repeto
|
||||
status:
|
||||
subject: "%{name} nove postigis"
|
||||
update:
|
||||
subject: "%{name} modifikis posto"
|
||||
notifications:
|
||||
administration_emails: Jerala retpostonotifiki
|
||||
email_events: Eventi por retpostoavizi
|
||||
email_events_hint: 'Selektez eventi quon vu volas ganar avizi:'
|
||||
other_settings: Altra avizopcioni
|
||||
|
@ -1274,12 +1506,18 @@ io:
|
|||
expired: Votposto ja finis
|
||||
invalid_choice: Selektita votselektajo ne existas
|
||||
over_character_limit: ne povas esar plu longa kam %{max} literi por sing
|
||||
self_vote: On ne povas votar en sua propra inquesti
|
||||
too_few_options: mustas havar kozi
|
||||
too_many_options: ne povas havar plu kam %{max} kozi
|
||||
preferences:
|
||||
other: Altra
|
||||
posting_defaults: Originala postoopcioni
|
||||
public_timelines: Publika tempolinei
|
||||
privacy:
|
||||
privacy: Privateso
|
||||
reach: Atingo
|
||||
search: Sercho
|
||||
title: Privateso e atingo
|
||||
privacy_policy:
|
||||
title: Privatesguidilo
|
||||
reactions:
|
||||
|
@ -1288,7 +1526,11 @@ io:
|
|||
unrecognized_emoji: ne esas rikonocita emocimajo
|
||||
relationships:
|
||||
activity: Kontoaktiveso
|
||||
confirm_follow_selected_followers: Ka vu es certa ke vu volas sequar la selektata sequati?
|
||||
confirm_remove_selected_followers: Ka vu es certa ke vu volas revokar la selektata sequati?
|
||||
confirm_remove_selected_follows: Ka vu es certa ke vu volas revokar la selektata sequanti?
|
||||
dormant: Neaktiva
|
||||
follow_failure: Ne esis posibla sequar kelka ek la selektita konti.
|
||||
follow_selected_followers: Sequez kelka sequanti
|
||||
followers: Sequanti
|
||||
following: Sequati
|
||||
|
@ -1317,6 +1559,9 @@ io:
|
|||
over_daily_limit: Vu ecesas limito quale esas %{limit} projetita posti por hodio
|
||||
over_total_limit: Vu ecesas limito quale esas %{limit} projetita posti
|
||||
too_soon: Projetita dato mustas esar en futuro
|
||||
self_destruct:
|
||||
lead_html: Desfortunoze, <strong>%{domain}</strong> balde klozos. Se vu havis konto ibe, vu ne plus povas uzar it, ma vu ankore povas demandar exportacajo de vua datumi.
|
||||
title: Ca servilo balde klozos
|
||||
sessions:
|
||||
activity: Antea aktiveso
|
||||
browser: Vidilo
|
||||
|
@ -1328,6 +1573,7 @@ io:
|
|||
electron: Electron
|
||||
firefox: Firefox
|
||||
generic: Nesavita vidilo
|
||||
huawei_browser: Navigilo Huawei
|
||||
ie: Internet Explorer
|
||||
micro_messenger: MicroMessenger
|
||||
nokia: Vidilo Nokia S40 Ovi
|
||||
|
@ -1337,6 +1583,7 @@ io:
|
|||
qq: Vidilo QQ
|
||||
safari: Safari
|
||||
uc_browser: UC Browser
|
||||
unknown_browser: Nekonocata Navigilo
|
||||
weibo: Weibo
|
||||
current_session: Nuna sesiono
|
||||
description: "%{browser} che %{platform}"
|
||||
|
@ -1349,8 +1596,10 @@ io:
|
|||
chrome_os: ChromeOS
|
||||
firefox_os: Firefox OS
|
||||
ios: iOS
|
||||
kai_os: KaiOS
|
||||
linux: Linux
|
||||
mac: macOS
|
||||
unknown_platform: Nekonocata Platformo
|
||||
windows: Windows
|
||||
windows_mobile: Windows Mobile
|
||||
windows_phone: Windows Phone
|
||||
|
@ -1393,7 +1642,7 @@ io:
|
|||
video:
|
||||
one: "%{count} video"
|
||||
other: "%{count} videi"
|
||||
boosted_from_html: Bustesis de %{acct_link}
|
||||
boosted_from_html: Repetis de %{acct_link}
|
||||
content_warning: 'Kontenajaverto: %{warning}'
|
||||
default_language: Sama quale intervizajlinguo
|
||||
disallowed_hashtags:
|
||||
|
@ -1408,7 +1657,7 @@ io:
|
|||
direct: Posti quo povas videsar nur mencionita uzanti ne povas pinglagesar
|
||||
limit: Vu ja pinglagis maxima posti
|
||||
ownership: Posto di altra persono ne povas pinglagesar
|
||||
reblog: Busto ne povas pinglagesar
|
||||
reblog: Repeto ne povas pinglizesar
|
||||
poll:
|
||||
total_people:
|
||||
one: "%{count} persono"
|
||||
|
@ -1436,9 +1685,9 @@ io:
|
|||
exceptions: Ecepti
|
||||
explanation: Pro ke efacar posti esas nechipa procedo, co agas lente progresive kande servilo ne esas okupata. Do, vua posti forsan efacesos kurte pos oli atingas oldeslimito.
|
||||
ignore_favs: Ignorez favorati
|
||||
ignore_reblogs: Ignorez busti
|
||||
ignore_reblogs: Ignorez repeti
|
||||
interaction_exceptions: Ecepti segun interagi
|
||||
interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub favorato o bustlimito pos iras super ol.
|
||||
interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub la favoratala o repetala solii pos iras super oli.
|
||||
keep_direct: Retenez direta mesaji
|
||||
keep_direct_hint: Ne efacas irga vua direta mesaji
|
||||
keep_media: Retenez posti kun mediiatachaji
|
||||
|
@ -1462,8 +1711,9 @@ io:
|
|||
'7889238': 3 monati
|
||||
min_age_label: Oldeslimito
|
||||
min_favs: Retenez favorizita posti mine
|
||||
min_reblogs: Retenez bustita posti mine
|
||||
min_reblogs_hint: Ne efacas irga vua posti quo bustigesos mine ca foyoquanto. Restez quale vakua por efacar posti sen suciar olia foyoquanto
|
||||
min_favs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de favoriziti. Restez vakua por efacar posti senegarde la nombro de favoriziti
|
||||
min_reblogs: Retenez posti repetita adminime
|
||||
min_reblogs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de repeti. Restez vakua por efacar posti senegarde la nombro de repeti
|
||||
stream_entries:
|
||||
sensitive_content: Titiliva kontenajo
|
||||
strikes:
|
||||
|
@ -1564,7 +1814,10 @@ io:
|
|||
seamless_external_login: Vu enirar tra externa serveso, do pasvorto e retpostoopcioni ne esas disponebla.
|
||||
signed_in_as: 'Eniris quale:'
|
||||
verification:
|
||||
here_is_how: Yen quale
|
||||
instructions_html: Kopiez e glutinez la kodexo suba en la HTML di vua retsituo. Pose adjuntez la adreso di vua retsituo en un ek la textobuxi di vua profilo per la "Modifikar profilo" pagino e konservez chanji.
|
||||
verification: Verifikeso
|
||||
verified_links: Vua ligili verifikata
|
||||
webauthn_credentials:
|
||||
add: Insertez nova sekuresklefo
|
||||
create:
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue